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效果

 

posted @ 2023-06-07 12:14  小粉优化大师  阅读(449)  评论(0编辑  收藏  举报