前面讲了ELK的部署以及Logstash的插件的安装方式,本篇就介绍一下如何使用Logstash读取nginx的日志,并写入ES中,通过Kibana分析。
ELK系列(一)、安装ElasticSearch+Logstash+Kibana+Filebeat-v7.7.0
ELK系列(二)、在Kibana中使用RESTful操作ES库
-----------------------------使用Logstash读取nginx日志------------------------------------
日志格式
上面讲了如何给Logstash安装插件以及离线安装,安装好的插件就在Logstash目录下:
/opt/app/logstash-7.7.0/vendor/bundle/jruby/2.5.0/gems
nginx的日志默认结构为HTTPD_COMBINEDLOG,可以对比/usr/local/nginx/conf/nginx.conf和/opt/app/logstash-7.7.0/vendor/bundle/jruby/2.5.0/gems/logstash-patterns-core-4.1.2/patterns/httpd 中的格式,然后我们就可以直接使用该格式的正则作为filter内容。
输出到控制台
配置logstash配置文件:
vim $LS_HOME/config/logstash_nginxlog2print.conf
input {
# 从文件读取日志信息
file {
path => "/usr/local/nginx/logs/access.log"
type => "system"
start_position => "beginning"
}
}
filter {
grok {
match => { "message" => "%{HTTPD_COMBINEDLOG}" }
}
}
output {
# 标准输出
stdout {}
}
启动验证:
bin/logstash -f config/logstash_nginxlog2print.conf
刷新nginx页面,或使用curl命令访问nginx,然后查看logstash的打印信息:
其中setting {:sincedb_path=>"/opt/app/logstash-7.7.0/data/plugins/inputs/file/.sincedb_d2343edad78a7252d2ea9cba15bbff6d", :path=>["/usr/local/nginx/logs/access.log"]}表示此配置文件读取该access.log文件,且读取的位置信息记录在sincedb文件内,下次再启动对这个日志文件的监控都会从记录的offset开始读,因此如果需要从头读取需要把这个文件先删掉。
输出到ES
配置logstash配置文件
vim $LS_HOME/config/logstash_nginxlog2es.conf
input {
# 从文件读取日志信息
file {
path => "/usr/local/nginx/logs/access.log"
type => "nginx_access"
start_position => "beginning"
}
}
filter {
grok {
match => { "message" => "%{HTTPD_COMBINEDLOG}" }
}
}
output {
# 输出es
elasticsearch {
hosts => ["wykd:9200"]
index => "nginx-%{+YYYY.MM.dd}"
}
}
启动验证
先删掉刚才的sincedb文件,然后启动监控并写入ES:
rm -rf /opt/app/logstash-7.7.0/data/plugins/inputs/file/.sincedb_d2343edad78a7252d2ea9cba15bbff6d
bin/logstash -f config/logstash_nginxlog2es.conf
Kibana中分析nginx日志
可以在kibana中看到nginx日志的索引已经自动创建了,此时我们使用curl命令访问nginx,该索引内的数据量也会实时变化:
在kibana中创建index patten,并在discover中查看index数据:
如果对你有帮助,请点个赞鼓励一下作者吧~ 谢谢!