ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

十九、日志格式处理

2021-09-23 12:34:16  阅读:402  来源: 互联网

标签:filebeat log local 192.168 nginx 格式 日志 十九


一、日志格式处理

前面已经学了EFK的搭建,查看es-head插件可以发现收集上来的日志对我们来说只有message这个键值才有用,接下来格式化nginx日志将message里的值提取出来方便我们查看。

image-20210922110529189

image-20210922110616809

image-20210922110639954

二、环境介绍

Filebeat-->es-->kibana

主机名 IP 安装软件
es01 192.168.0.110 es/kibana
es02 192.168.0.111 es
es03 192.168.0.112 es/filebeat/nginx

一套完整的EFK系统太耗内存了,机器配置不够的可以使用该简化版本。

三、Nginx日志格式配置

以监控Nginx日志为例。

该方案是通过修改Nginx配置文件中的日志格式,然后将格式化后的日志发给Filebeat。

1、修改ES配置文件

es01配置文件如下,es02跟es03只修改node.namediscovery.zen.ping.unicast.hosts即可

cd /usr/local/elasticsearch-7.9.3/config && cp elasticsearch.yml elasticsearch.yml.bak

echo '
cluster.name: tz_elk
node.name: es01
node.master: true
node.data: true
path.data: /data/elasticsearch/data
path.logs: /data/elasticsearch/logs
bootstrap.memory_lock: false 
bootstrap.system_call_filter: false
network.host: 0.0.0.0
http.port: 9200
discovery.zen.ping.unicast.hosts: ["192.168.0.111","192.168.0.112"] #允许发现111跟112节点
cluster.initial_master_nodes: ["192.168.0.110"]  #指定master节点
discovery.zen.minimum_master_nodes: 2
discovery.zen.ping_timeout: 150s
discovery.zen.fd.ping_retries: 10
client.transport.ping_timeout: 60s
http.cors.enabled: true
http.cors.allow-origin: "*"
' >/usr/local/elasticsearch-7.9.3/config/elasticsearch.yml

#启动
su - ela -c "cd /usr/local/elasticsearch-7.9.3/ && nohup bin/elasticsearch &"
#关闭
fuser -k -n tcp 9200

2、修改kibana配置文件

cp /usr/local/kibana-7.9.3/config/kibana.yml /usr/local/kibana-7.9.3/config/kibana.yml.bak

echo '
server.port: 5601
server.host: "192.168.0.110"
elasticsearch.hosts: ["http://192.168.0.110:9200"]
kibana.index: ".kibana"
i18n.locale: "zh-CN"
'>/usr/local/kibana-7.9.3/config/kibana.yml

#启动
su - ela -c "cd /usr/local/kibana-7.9.3/ && nohup ./bin/kibana &"
#关闭
fuser -k -n tcp 5601

3、修改Filebeat配置文件

cd /usr/local/filebeat-7.9.3/ && cp filebeat.yml filebeat.yml.bak

vim /usr/local/filebeat-7.9.3/filebeat.yml
filebeat.inputs:
- type: log
  paths:
    - /var/log/nginx/access.log
  json.keys_under_root: true #加入这三行配置,表示接收json格式的日志
  json.add_error_key: true
  json.message_key: log
output.elasticsearch:  #输出到es
  hosts: ["192.168.0.110:9200","192.168.0.111:9200","192.168.0.112:9200"]  #输出到ES节点,注意端口是9200
  index: "Nginx-%{+yyyy.MM.dd}" #生成的es索引名
setup.ilm.enabled: false
setup.template.enabled: false

#启动
cd /usr/local/filebeat-7.9.3/ && nohup ./filebeat -e -c filebeat.yml &
#关闭
kill -9 `ps -aux|grep filebeat|awk '{print$2}'|awk 'NR==1'`

参考资料:
json.keys_under_root介绍
setup.ilm.enabled介绍

4、修改Nginx配置文件

需要加入如下配置

#新增一个名为access_json的日志格式
log_format access_json '{"time_local":"$time_local",'  
                           '"host":"$server_addr",'  #host是key,是自定义的,后面的值是nginx内置变量
                           '"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.log  access_json;
    #注释掉原来的日志格式
    #access_log  /var/log/nginx/access.log  main;

参考资料:Nginx变量

5、重启服务

#检查配置文件是否正确
cd /usr/local/filebeat-7.9.3/
./filebeat test config
nginx -t

#重启filebeat
kill -9 `ps -aux|grep filebeat|awk '{print$2}'|awk 'NR==1'`
cd /usr/local/filebeat-7.9.3/ && nohup ./filebeat -e -c filebeat.yml &

#重新加载Nginx配置文件
nginx -t
systemctl reload nginx

6、验证

1)清空日志文件,增加访问日志

> /var/log/nginx/access.log
yum -y install httpd-tools

#批量访问nginx,产生access.log
ab -c 2 -n 9999 http://192.168.0.112/

#批量访问nginx,产生error.log,xxx为不存在的资源,访问不存在的资源会报404
ab -c 2 -n 9999 http://192.168.0.112/xxx

这时Nginx的访问日志格式如下

image-20210922232257393

2)访问Kibana,创建索引模式,选定字段,查看效果

image-20210923092214240

image-20210923092245399

image-20210922232421151

四、按类型分类日志

前面介绍了Nginx日志格式处理,但只接收了access.log日志,如果要看error.log以及其他日志怎么办呢?

非常好办,直接修改Filebeat配置文件即可。

1、修改Filebeat配置文件

vim /usr/local/filebeat-7.9.3/filebeat.yml
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/nginx/access.log
  json.keys_under_root: true
  json.add_error_key: true
  json.message_key: log
  tags: ["access"]
  
- type: log
  enabled: true
  paths:
    - /var/log/nginx/error.log
  tags: ["error"]
 
output.elasticsearch:  
  hosts: ["192.168.0.110:9200","192.168.0.111:9200","192.168.0.112:9200"] 
  indices:
    - index: "Nginx-access-%{+yyyy.MM.dd}"
      when.contains:
        tags: "access"
    - index: "Nginx-error-%{+yyyy.MM.dd}"
      when.contains:
        tags: "error"
setup.ilm.enabled: false
setup.template.enabled: false

#重启filebeat
kill -9 `ps -aux|grep filebeat|awk '{print$2}'|awk 'NR==1'`
cd /usr/local/filebeat-7.9.3/ && nohup ./filebeat -e -c filebeat.yml &

2、修改nginx配置文件

增加error.log日志格式处理

vim /etc/nginx/ningx.conf 
 log_format error_json ' {
        "time_local":"$time_local",'
        '"clientip":"$remote_addr",'
        '"size":$body_bytes_sent,'
        '"responsetime":$request_time,'
        '"http_host":"$host",'
        '"url":"$uri",'
        '"domain":"$host",'
        '"status":"$status"
        }';

   access_log /var/log/nginx/error.log error_json;

#重启nginx
nginx -t
systemctl restart nginx
    
#清空日志文件
>/var/log/nginx/error.log

#批量访问nginx,产生error.log,xxx为不存在的资源,访问不存在的资源会报404
ab -c 2 -n 9999 http://192.168.0.112/xxx

这里要注意的是使用nginx -t检查语法,语法没错不代表配置文件配置正确了,最好重启Nginx。

3、验证

创建索引模式,查看效果

image-20210923121712996

这里的error.log日志格式生效了,但因为无法形成标准的json格式,因为有些错误日志信息如下,故所有信息还是在message字段中。

image-20210923121934851

五、Kibana查询语言

1、批量产生404日志

访问不存在的资源就会产生404报错,tz996是不存在的资源,也可以写成其他的。

ab -c 2 -n 9990 http://192.168.0.112/tz996

2、使用Kibana查询语言

搜索客户端IP为192.168.0.110,状态码为404的日志

image-20210923100023814

详情见官方文档

参考资料
老男孩教育_day107_视频
Nginx日志格式处理
配置Filebeat

标签:filebeat,log,local,192.168,nginx,格式,日志,十九
来源: https://www.cnblogs.com/tz90/p/15323683.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有