在上一篇文章部署好了ELK环境,接下来进行nginx日志的收集
环境
192.168.2.112 jdk/elasticsearch/kibana CentOS release 6.5
192.168.2.118 jdk/logstash/nginx CentOS release 6.3 (Final)
- nginx日志收集
1)进入logstash的etc目录下,创建文件nginxlog.conf并添加如下内容
input {
file {
path => "/usr/local/nginx/logs/access.log"
type => "nginx"
}
}
output {
elasticsearch {
hosts => "192.168.2.112:9200"
}
}
path指向日志存储路径
2)然后启动logstash
[root@log-nginx etc]# ../bin/logstash -f nginxlog.conf
# nohup /usr/local/logstash/bin/logstash -f nginxlog.conf &>/dev/null & 后台启动
可以看到如下图显示内容:
或者
ps -ef | grep java
3)此时可以先手动访问nginx页面,访问日志数据在增加,则logstash会把数据推送给ES,然后直接在kibana上查看如下图:
- 加入redis消息队列提高速度收集nginx日志
1)118服上部署好redis服务并开启
[root@log-nginx elktest]# ps -ef | grep redis
root 4841 1 0 22:12 pts/1 00:00:00 /usr/local/redis/bin/redis-server *:6379
root 4850 1499 0 22:13 pts/1 00:00:00 grep redis
[root@log-nginx elktest]# netstat -tunl | grep 6379
tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN
tcp 0 0 :::6379 :::* LISTEN
2)在logstash的etc目录下建立文件agentnginx.conf并添加如下内容
input {
file {
type => "nginx-access"
path => "/usr/local/nginx/logs/access.log"
}
}
output {
redis {
host => "localhost"
port => 6379
data_type => "list"
key => "logstash"
}
}
把nginx日志数据推送到redis
3)在logstash的etc目录下建立文件indexnginx.conf并添加如下内容
input {
redis {
host => "localhost"
port => "6379"
data_type => "list"
key => "logstash"
type => "redis-input"
batch_count => 1
}
}
output {
elasticsearch {
hosts => "192.168.2.112"
}
}
4)启动logstash
nohup /usr/local/logstash/bin/logstash -f agentnginx.conf &>/dev/null &
nohup /usr/local/logstash/bin/logstash -f indexnginx.conf &>/dev/null &
ps -ef | grep java
5)此时查看web界面如下
至此nginx日志的简单收集功能完成。
若需要收集其他服务或系统的日志,操作方法与上述类似
如果需要批量收集多台服务器的日志数据,可以通过shell脚本或借助ansible/saltstack等工具把配置好的logstash目录同步到其他的服务器
例如上述的nginx日志收集,配置好了logstash里的agent.conf和index.conf后,直接把logstash目录同步到其他服务器对应的路径,然后修改conf文件里redis的ip即可(若本机有也可以不用修改)
备注:
1)可以点击右上角的时间按钮,然后点击auto-refresh,可以设置自动刷新时间
2)在图形左边一列,可以选择要显示的内容
3)若显示如下图所示内容,则可能是本身没有数据过来,或者是服务器之间的时间不同步。