学习目标:
掌握filebeat软件的使用
学习内容:
Filebeat概述
- 可以使用Filebeat收集各种日志,之后发送到指定的目标系统上,但是同时只能配置一个输出目标。
- Filebeat会对配置好的日志内容进行收集,第一次会从每个文件的开头一直读到当前文件的最后一行
- 每一行称为一个事件,格式是一个包含很多字段的字典,也就是JSON格式的数据,在Filebeat中负责完成这个动作的官方称它为Harvester(收割机)
- 每个事件将来会保存到Elasticsearch中
- 在收割机读到文件的最后,会停止工作。直到文件有新的内容写入才继续工作
Filebeat安装
#curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.13.2-linux-x86_64.tar.gz
#tar -zxvf filebeat-7.13.2-linux-x86_64.tar.gz -C /usr/local
#mv /usr/local/filebeat-7.13.2-linux-x86_64 /usr/local/filebeat
Filebeat启动管理
- 前台运行
采用前台运行的方式查看Filebeat获取的日志结果 - 后台运行
使用nohup方式启动Filebeat到后台,日志结果可查看nohup.out文件
使用systemd管理的后台方式启动Filebeat进程不能查看输出日志,测试阶段勿用
#systemctl deamon-reload #该命令是重新加载systemd文件
#systemctl start filebeat #加载后可以用此命令启动filebeat
Filebeat简单使用
准备测试数据
#vi /tmp/access.log
159.138.94.11 - -|[20/Oct/2022:07:28:14 +0000]|"POST /cwr-user-web/rest/user/admin/refresh/session?RandStr=1666250893718 HTTP/1.1"|200|"https://sp.cwrcloud.huawei.com/cwr-user-web/pages/cwr-homepage/index.html"|"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36"|"167.1.179.193"|"upstream Addr:"10.234.252.124:8080|0.040|0.041|61|420|247040484|1|1379
#vi /tmp/error.log
2022/10/20 07:28:28 [error] 19149#0: *247040885 open() "/home/nginx/html/404.html" failed (2: No such file or directory), client: 159.138.94.174, server: , request: "GET /favicon.ico HTTP/1.1", host: "sp.cwrcloud.huawei.com", referrer: "https://sp.cwrcloud.huawei.com/cwr-user-web/shiro-cas?targetUrl=%2Findex.jsp&ticket=ST-60698-Zv0uqvLrLi-GLOlo4XV-1PlYjbYauth.cwrcloud.huawei.com"
配置Filebeat的输入输出
#文件名 filebeat.yml
filebeat.inputs:
- type: log
enabled: true #开关 true是开,false是关
paths:
- /tmp/access.log #指定需要收集的日志路径,支持通配符可以写多个
filebeat.config.modules: #内置的收集日志的模块配置文件的存放路径
path: $(path.config)/modules.d/*.yml
reload.enabled: false #当模块的配置文件有更新时,此程序是否要自动加载,false不加载,true加载
setup.template.settings:
index.number_of_shards: 1 #可以指定索引的分区数[实际生产未指定]
output.console: #添加 输出到终端即屏幕上
pretty: true
#output.logstash: #输出到logstash
# hosts: ["logstash的ip:端口"]
#指定ES的配置,[实际生产未配置,测试使用]例举:
#output.elasticearch:
# hosts: ["192.168.88.111:9200","192.168.88.112:9200","192.168.88.113:9200"]
processors:
- add_host_metadata: #添加此主机的源数据信息到输出数据中,比如ip、mac、os等信息
when.not.contains.tags: forwarded
运行观察输出
找不到配置文件可使用 -c 指定配置文件位置
./filebeat -c /usr/local/filebeat/filebeat.yml
Filebeat进程日志
filebeat本身运行日志默认位置 /usr/local/filebeat/logs/filebeat
要修改Filebeat的日志路径,可以添加如下内容在配置文件filebeat.yml中实现
这样设置后,filebeat启动后,日志的目录是/var/log/,日志的文件名为filebeat,每次启动或者重启程序会生成一个新的日志文件filebeat,旧的日志文件名为filebeat.1依次类推。
启用日志收集模块
#/usr/local/filebeat/filebeat modules list
#模块配置文件存储位置 /usr/local/filebeat/modules.d
禁用模块
#/usr/local/filebeat/filebeat modules disable 模块名
启用模块
#/usr/local/filebeat/filebeat modules enable 模块名
示例模块–nginx模块
情景1:使用模块默认的日志路径
修改modules.d/nginx.yml文件内容如下:
- module: nginx
access:
enabled: true
errorr:
enabled: true
nginx模块收集的日志的默认路径是:
- /var/log/nginx/access.log*
- /var/log/nginx/error.log*
情景2:使用非默认路径(适用于所有模块)
假如所要收集的日志真实路径和日志路径收集模块默认的路径不一致,可以配置 var.paths: 属性进行配置,接收的值是一个包含一个以上的日志绝对路径列表,接收的值是一个数组
用于给日志文件设置自定义路径的,如果不设置此选项,Filebeat将根据你的操作系统选择路径使用默认值,可以使用如下方式配置:
- module: nginx
access:
enabled: true
var.paths: ["/opt/nginx/log/access.log*","/opt/nginx/log/error.log*"]
或者下面的方式:
- module: nginx
access:
enabled: true
var.paths:
- "/opt/nginx/log/access.log*"
- "/opt/nginx/log/error.log*"
注意
var.pahts指定的路径,是以追加的方式和模块默认路径合并在一起
测试:调用模块进行测试:./filebeat -e
配置output
filebeat适用于收集日志,之后把日志推送到某个接收的系统中,这些系统或者装置在filebeat中称为output,output类型:
- console:终端屏幕
- elasticsearch:存放日志、并提供查询
- logstash:进一步对日志数据进行处理
- kakfa:消息队列
如果只想输出完整json数据中的某些字段
output.console:
codec.format:
string: '%{[@timestamp]} %{[message]}'
pretty: true
使用processors(处理器)过滤和增强数据(扩展部分)
可以在配置中定义处理器,以便在事情发送到配置的输出之前对其进行处理,libbeat库提供以下处理器:
- 减少导出字段的数量
- 使用其他元数据增强事件
- 执行其他处理和解码
工作方式
每个处理器都接收到一个事件,对该事件应用已定义的操作,然后返回该事件,如果定义处理器列表,则按照在filebeat配置文件中定义的顺序执行它们
去重日志中的某些行
- 删除所有以 DBG开头的行
processors:
- drop_event:
when:
regexp:
message: "^DBG" #message为自定义字段
- 向输出的数据中添加某些自定义字段
processors:
- add_fields:
target: project
fields:
name: myproject
id: '12324435566'
- 从事件中删除某些字段
processors:
- drop_fields:
fields: ["field1","field2",....]
ignore_missing: false
以上配置,将删除字段:field1和field2
ignore_missing的值为false表示,字段名不存在则返回错误,为true不会返回错误
注意:事件中的 @timestamp 和 type 字段是无法删除的