ELK-Filebeat配置解析
1、配置解析
1.1、目录结构
root@filebeat:~# tree -L 1 /etc/filebeat /etc/filebeat ├── fields.yml ├── filebeat.reference.yml ├── filebeat.yml # 主配置文件 ├── filebeat.yml.bak └── modules.d # 配置示例样板
1.2、配置文件
1.2.1、配置组成部分
root@filebeat:~# cat /etc/filebeat/filebeat.yml | egrep -iv '# [a-Z]+|^$' | egrep -iv '#[a-Z]' # ============================== Filebeat inputs =============================== filebeat.inputs: - type: log id: nginx_id_20230606 enabled: true paths: - /var/log/nginx/*.log # ============================== Filebeat modules ============================== filebeat.config.modules: path: ${path.config}/modules.d/*.yml reload.enabled: false # ======================= Elasticsearch template setting ======================= setup.template.settings: index.number_of_shards: 5 # ================================== General =================================== # ================================= Dashboards ================================= # =================================== Kibana =================================== setup.kibana: # =============================== Elastic Cloud ================================ # ================================== Outputs =================================== # ---------------------------- Elasticsearch Output ---------------------------- # ------------------------------ Logstash Output ------------------------------- output.logstash: hosts: ["192.168.10.28:5044"] # ================================= Processors ================================= processors: - add_host_metadata: when.not.contains.tags: forwarded - add_cloud_metadata: ~ - add_docker_metadata: ~ - add_kubernetes_metadata: ~ # ================================== Logging =================================== # ============================= X-Pack Monitoring ============================== # ============================== Instrumentation =============================== # ================================= Migration ==================================
1.2.2、精简的配置文件
root@filebeat:~# cat /etc/filebeat/filebeat.yml| egrep -v '^$|#' filebeat.inputs: - type: log id: nginx_id_20230606 enabled: true paths: - /var/log/nginx/*.log filebeat.config.modules: path: ${path.config}/modules.d/*.yml reload.enabled: false setup.template.settings: index.number_of_shards: 5 setup.kibana: output.logstash: hosts: ["192.168.10.28:5044"] processors: - add_host_metadata: when.not.contains.tags: forwarded - add_cloud_metadata: ~ - add_docker_metadata: ~ - add_kubernetes_metadata: ~
1.2.3、属性解析
filebeat默认情况下,可以从文件中获取相关信息,但是该功能并没有开启,我们还可以借助于include_lines和exclude_files属性获取文件中的特定内容信息。
filebeat的默认输出方式是elasticsearch和logstash,只需要配置好对应的地址即可。
注意:
filebeat的配置文件可以自己随意定制,不一定非要使用默认的filebeat.yaml文件,可以自己创建一个yaml格式的filebeat配置文件即可。
2、实践1-过滤出状态码404,存入ES
2.1、需求
从项目的nginx日志中,获取状态码404相关的日志信息,传输数据的时候,为了区别日志特点,增加一个tag标签字段属性值,在传输到es的时候,定制索引名称。
2.2、编辑配置文件
root@filebeat:~# cat /etc/filebeat/filebeat.yml | grep -Eiv '^$|#' filebeat.inputs: - type: log id: nginx_id_20230607 enabled: true paths: - /var/log/nginx/access.log include_lines: ['404'] filebeat.config.modules: path: ${path.config}/modules.d/*.yml reload.enabled: false setup.ilm.enabled: false setup.template: name: nginx404 pattern: "nginx404-*" overwrite: true setup.template.settings: index.number_of_shards: 5 tags: ["404"] setup.kibana: output.elasticsearch: hosts: ["192.168.10.25:9200"] index: "nginx404-%{+yyyy.MM.dd}" processors: - add_host_metadata: when.not.contains.tags: forwarded - add_cloud_metadata: ~ - add_docker_metadata: ~ - add_kubernetes_metadata: ~
# 属性解析
setup.ilm.enabled 表示不用默认官方自带的模板
index命名的时候,尽量不要使用单字母,匹配的时候,最后面是"-*"而不是"_*"
2.3、测试效果
2.3.1、手动测试
# 关闭filebeat服务 systemctl stop filebeat filebeat -e -c /etc/filebeat/filebeat.yml
2.3.2、启动服务
# 测试没有问题,就启动服务 systemctl stop filebeat
2.4、查看效果
2.4.1、查看索引
2.4.2、查看数据
3、实践2-nginx日志设置为JSON格式,存入ES
3.1、需求解析
3.1.1、需求分析
我们知道es中的索引的数据获取都是基于json格式数据的键名获取具体信息,默认情况下,message键里面的内容才是我们需要的内容,虽然可以获取到我们想要的内容,但是无关信息太多了,比如说,我们仅仅需要获取客户端IP地址的话。
所以为了便于后续我们的定制日志分析,结合es索引数据格式的特点,我们需要将项目的nginx access日志定制为json格式,然后将error和access拆分到不同的es索引中。
3.1.2、技术点梳理
1、定制nginx的json格式日志,直接按照键值对描述即可 2、识别json格式日志: filebeat默认情况下,无论什么格式日志,都会识别为普通的字符串日志,我们需要借助于如下两条属性定制日志解析格式: json.keys_under_root: true json.overwrite_keys: true 3、同时收集error和access两种不同格式日志: 设置两个input,为了方便查看,在传输数据的时候,通过fields方法为不同的日志定制扩展字段 fields: log_type: "access|error" fields_under_root: true
3.2、nginx日志准备
3.2.1、默认的日志格式
# vim /etc/nginx/nginx.conf log_format proxy_format '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent "$http_referer"' '"$http_user_agent" "$http_x_forwarded_for" "$http_x_real_ip"';
3.2.2、json日志格式
# vim /etc/nginx/nginx.conf log_format json_format '{"remote_addr": "$remote_addr",' '"remote_user": "$remote_user",' '"time_local": "$time_local",' '"request": "$request", ' '"request_method": "$request_method", ' '"request_time": "$request_time", ' '"status": "$status", ' '"body_bytes_sent": "$body_bytes_sent", ' '"http_referrer": "$http_referer", ' '"http_user_agent": "$http_user_agent", ' '"http_x_forwarded_for": "$http_x_forwarded_for", ' '"http_x_real_ip": "$http_x_real_ip"}';
3.2.3、nginx使用json格式
# vim /etc/nginx/nginx.conf ... access_log /var/log/nginx/access_json.log json_format; ...
3.2.4、重启nginx后查看日志效果
root@filebeat:~# head -n1 /var/log/nginx/access_json.log {"remote_addr": "192.168.10.1","remote_user": "-","time_local": "07/Jun/2023:12:29:08 +0800","request": "GET / HTTP/1.1", "request_method": "GET", "request_time": "0.000", "status": "304", "body_bytes_sent": "0", "http_referrer": "-", "http_user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.60 Safari/537.36", "http_x_forwarded_for": "-", "http_x_real_ip": "-"}
3.3、编辑filebeat.yml文件
3.3.1、配置filebeat
root@filebeat:~# cat /etc/filebeat/filebeat.yml | grep -Ev '^$|#' filebeat.inputs: - type: log id: nginx_access_json enabled: true paths: - /var/log/nginx/access_json.log fields: log_type: "access" fields_under_root: true json.keys_under_root: true json.overwrite_keys: true - type: log id: nginx_error enabled: true paths: - /var/log/nginx/error.log fields: log_type: "error" fields_under_root: true filebeat.config.modules: path: ${path.config}/modules.d/*.yml reload.enabled: false setup.ilm.enabled: false setup.template: name: nginx-access pattern: "nginx-access-*" overwrite: true setup.template.settings: index.number_of_shards: 5 setup.kibana: output.elasticsearch: hosts: ["192.168.10.25:9200"] index: "nginx-access-%{+yyyy.MM.dd}" processors: - add_host_metadata: when.not.contains.tags: forwarded - add_cloud_metadata: ~ - add_docker_metadata: ~ - add_kubernetes_metadata: ~
3.3.2、启动filebeat服务
systemctl start filebeat
3.3.3、查看ES效果