前面我们介绍了使用logstash监控nginx日志,nginx日志默认是httpd格式的日志,对于开发人员来说,json格式更加友好,因此本篇我们就介绍如何修改nginx的默认日志格式,以及如何使用logstash的插件解析json格式的日志,然后写入到ES中。
ELK系列(一)、安装ElasticSearch+Logstash+Kibana+Filebeat-v7.7.0
ELK系列(二)、在Kibana中使用RESTful操作ES库
ELK系列(四)、Logstash读取nginx日志写入ES中
ELK系列(五)、Logstash修改@timestamp时间为日志的产生时间
------------------------修改nginx日志为json格式并使用logstash读取到es内-----------------
nginx配置
vim /usr/local/nginx/conf/nginx.conf
添加如下内容
log_format log_json '{"remote_addr": "$remote_addr", '
'"ident": "-", '
'"user": "$remote_user", '
'"timestamp": "$time_local", '
'"request": "$request", '
'"status": $status, '
'"bytes": $body_bytes_sent, '
'"referer": "$http_referer", '
'"agent": "$http_user_agent", '
'"x_forwarded": "$http_x_forwarded_for"'
' }';
access_log logs/access-json.log log_json;
重启nginx
sbin/nginx -s reload
可以看到在nginx日志目录新多了一个access-json.log文件。
logstash配置
vim /opt/app/logstash-7.7.0/config/logstash_nginxlog2es_json.conf
input {
# 从文件读取日志信息
file {
path => "/usr/local/nginx/logs/access-json.log" #修改为json日志文件
type => "nginx_access_json"
start_position => "beginning"
}
}
filter {
json {
source => "message"
remove_field => ["beat","offset","tags","prospector"] #移除字段,不需要采集
}
date {
match => ["timestamp", "dd/MMM/yyyy:HH:mm:ss Z"] #匹配timestamp字段
target => "@timestamp" #将匹配到的数据写到@timestamp字段中
}
}
output {
# 输出es
elasticsearch {
hosts => ["wykd:9200"]
index => "nginx-%{+YYYY.MM.dd}"
}
}
重启logstash
bin/logstash -f config/logstash_nginxlog2es_json.conf
验证ES内的数据
希望本文对你有帮助,请点个赞鼓励一下作者吧~ 谢谢!