- A+
所属分类:ELKstack
我们将 Nginx 日志转成 json 格式进行收集,这样在 kibana 界面可以更好的查看日志的详细信息,json格式每个值对应一个key,这样通过某个key,在kibana就可以更方便的查到自己想要的值了。
配置Nginx日志格式
在 Nginx 配置中我们定义的日志格式一般是这样的:
- # cat /usr/local/nginx/conf/nginx.conf
- ......
- ......
- http {
- ......
- ......
- log_format main 'remote_addr - remote_user [time_local] "request" '
- 'status body_bytes_sent "$http_referer" '
- '"http_user_agent" "http_x_forwarded_for"';
- access_log logs/access.log main;
- ......
- ......
- }
现在我们修改一下 Nginx 的日志格式,将以上日志格式替换成如下的 json 格式:
- # 配置位置:http标签
- log_format access_json '{ "@timestamp": "$time_local", '
- '"host": "$server_addr",'
- '"clientip":"$remote_addr",'
- '"size":"$body_bytes_sent",'
- '"responsetime":$request_time,'
- '"upstreamtime":"$upstream_response_time",'
- '"upstreamhost":"$upstream_addr",'
- '"http_host":"$host",'
- '"url":"$uri",'
- '"domain":"$host",'
- '"xff":"$http_x_forwarded_for",'
- '"referer":"$http_referer",'
- '"status":"$status",'
- access_log /var/log/nginx/access_json.log json; # 日志路径根据需求定义
解释:在以上的 Nginx 日志格式中,如:'"host": "$server_addr",' ,其中第一个双引号中的 “host”是一个key,key是自定义的,第二个双引号中的"$server_addr"是 Nginx 中自己支持的变量。以上只是部分key,如果还需要看更多的输出直接添加即可。
配置Logstash
配置的 logstash 日志收集和推送到 elasticsearch(以es地址为 192.168.56.31:9200 为例) 配置文件如下:
- input {
- file {
- path => "/var/log/nginx/access_json.log"
- type => "logstash-nginx-log-node3"
- start_position => "beginning"
- stat_interval => "2"
- codec => "json" # 日志如果是json格式的话需要配置对json解析的编码
- }
- }
- output {
- elasticsearch {
- hosts => ["192.168.56.31:9200"]
- index => "logstash-nginx-log-node3-%{+YYYY.MM.dd}"
- }
- }
配置好之后重启 logstash ,在 kibana 中添加索引即可。