-
ELK架构
-
Filebeat简介
-
Filebeat安装
-
Filebeat简单使用
-
专用日志搜集模块
-
案例模块-Nginx 模块
-
重读日志文件
-
使用Processors(处理器)过滤和增强数据
1.ELK架构
2.Filebeat简介
可以使用 Filebeat 收集各种日志,之后发送到指定的目标系统上,但是同一时间只能配置一个输出目标。
Filebeat 会对配置好的日志内容进行收集,第一次会从每个文件的开头一直读到当前文件的最后一行。
每一行称为一个事件,格式是一个包含很多字段的大字典,也就是 JSON 格式的数据。在 Filebeat中负责完成这个动作的官方称它为 Harvester (收割机)。
每个事件将来会被保存到 Elasticsearch 中
在收割机读到文件的最后,会停止工作。直到文件有新的内容写入才继续工作。
3.Filebeat安装
3.1安装filebeaat
# curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.6.2-linux-x86_64.tar.gz# tar xzvf filebeat-8.6.2-linux-x86_64.tar.gz -C /usr/local/
# mv /usr/local/filebeat-8.6.2-linux-x86_64 /usr/local/filebeat
1.前台运行
filebeat采用前台运行的方式查看Filebeat获取的日志结果
2.后台运行
使用nohup方式启动Filebeat到后台,日志结果可查看nohup.out文件
3.2Filebeat启动管理
使用systemd管理的后台方式启动Filebeat进程不能查看输出日志,测试阶段勿用
配置systemd方式的Filebeat启动管理文件:
# vim /usr/lib/systemd/system/filebeat.service
[Unit]
Description=Filebeat sends log files to Logstash or directly to Elasticsearch.
Wants=network‐online.target
After=network‐online.target
[Service]
User=root
Group=root
Environment="BEAT_CONFIG_OPTS=-c /usr/local/filebeat/filebeat.yml"
ExecStart=/usr/local/filebeat/filebeat $BEAT_CONFIG_OPTS
Restart=always
[Install]
WantedBy=multi‐user.target# systemctl daemon-reload 重新加载
# systemctl start filebeat
4.Filebeat简单使用
4.1准备测试数据
# vim /tmp/access.log
123.127.39.50 - - [04/Mar/2021:10:50:28 +0800] "GET /logo.jpg HTTP/1.1" 200 14137 "http://81.68.233.173/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.192 Safari/537.36" "-"
4.2 配置Filebeat 的输入和输出
# vim /usr/local/filebeat/filebeat.yml
filebeat.inputs:
- type: log
enabled: true #改
paths:
- /tmp/*.log #改 指定需要收集日志的路径,支持通配符可以写多个
filebeat.config.modules: # 内置的收集日志的模块配置文件的存放路径
path: ${path.config}/modules.d/*.yml
reload.enabled: false # 当模块的配置文件有更新时,此程序是否要自动加载,false不加载,true 加载
setup.template.settings:
index.number_of_shards: 1output.console: #添加 输出到终端即屏幕上
pretty: true# 输出到 logstash
#output.logstash:
# logstash 的 IP和端口
#hosts: ["172.26.139.148:5044"]
processors: #改
- add_host_metadata: # 添加此主机的源数据信息到输出数据中,比如 IP MAC OS 等信息
when.not.contains.tags: forwarded
4.3 运行观察输出
# /usr/local/filebeat/filebeat -c /usr/local/filebeat/filebeat.yml
找不到配置文件可使用-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
依次类推。
5.专用日志搜集模块
5.1查看可启用的模块列表
# /usr/local/filebeat/filebeat modules list -c /usr/local/filebeat/filebeat.yml
5.2 模块配置文件存储位置;禁用;启用
模块配置文件存储位置:/usr/local/filebeat/modules.d
禁用模块:/usr/local/filebeat/filebeat modules disable 模块名
启用模块:/usr/local/filebeat/filebeat modules enable 模块名
6.案例模块-Nginx 模块
6.1准备 Nginx 示例日志
访问日志示例文件:
# vim /var/log/access.log
123.127.39.50 - - [04/Mar/2021:10:50:28 +0800] "GET /logo.jpg HTTP/1.1" 200 14137 "http://81.68.233.173/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.192 Safari/537.36" "-"错误日志示例文件:
# vim /var/log/error.log
2021/03/04 10:50:28 [error] 11396#0: *5 open() "/farm/bg.jpg" failed (2: No such file or directory), client: 123.127.39.50, server: localhost, request: "GET /bg.jpg HTTP/1.1", host: "81.68.233.173", referrer: "http://81.68.233.173/"
6.2 启用 nginx 模块
6.3 情景1:使用模块默认的日志路径
修改
modules.d/nginx.yml
文件内容如下:nginx 模块搜集日志的默认路径是:
/var/log/nginx/access.log*
/var/log/nginx/error.log*
6.4 情景2:使用非默认路径(适用于所有的模块)
假如所要搜集的日志真实路径和日志收集模块默认的路径不一致,可以配置
var.paths:
属性进行配置。var.paths
接收的值是一个包含一个以上的日志绝对路径列表。接收的值是一个数组
用于给日志文件设置自定义路径的。如果不设置此选项,Filebeat将根据您的操作系统选择路径选择使用默认值
可以使用如下方式配置:- module: nginx
access:
enabled: true
var.paths: ["/opt/nginx/log/nginx/access.log*", "/opt/nginx/log/error.log*"]或者下面的方式:
- module: nginx
access:
enabled: true
var.paths:
- "/opt/nginx/log/nginx/access.log*"
- "/opt/nginx/log/error.log*"
6.5 测试
var.paths 指定的路径,是以追加的方式和模块默认路径合并到一起的,也就是说假如模块的默认路径有具体的日志文件
/var/log/nginx/access.log
。 这里var.paths
也配置了路径/tmp/log/nginx/access.log
,那么最终 Filebeat 收集的日志路径将会是:
/var/log/nginx/access.log
/tmp/log/nginx/access.log
测试:调用模块进行测试:
# /usr/local/filebeat/filebeat -e
6.6 配置output
(一)概述
简介:
Filebeat 是用于搜集日志,之后把日志推送到某个接收的系统中的,这些系统或者装置在 Filebeat 中称为
output
。
output
类型:
console
终端屏幕
elasticsearch
存放日志,并提供查询
logstash
进一步对日志数据进行处理
kafka
消息队列完整output列表:
https://www.elastic.co/guide/en/beats/filebeat/current/configuring-output.html
具体配置方式是编辑主配置文件 : /usr/local/filebeat/filebeat.yml
filebeat 运行的时候,以上的
output
只可配置其中的一种。注意:注释掉其他的 output
(二)输出到 console
输出完整 JSON 数据:
output.console:
pretty: true进入到 filebeat 的安装目录下,执行命令前台运行
# ./filebeat -c /usr/local/filebeat/filebeat.yml
如果只想输出完整Json数据中的某些字段:
output.console:
codec.format:
string: '%{[@timestamp]} %{[message]}'
(二)输出到 elasticsearch、 logstash
elasticsearch:
output.elasticsearch:
hosts: ['http://es01:9200', 'http://es02:9200']elasticsearch配置的官方文档:
https://www.elastic.co/guide/en/beats/filebeat/current/elasticsearch-output.html
logstash:
output.logstash:
hosts: ["127.0.0.1:5044"]
7.重读日志文件
7.1
有时候处于实验目的,可能需要重新读取日志文件,这个时候需要删除安装目录下的
data
文件夹,重新运行 filebeat 即可。假如出现如下报错,请删除安装目录中的
data
文件夹 :Exiting: data path already locked by another beat. Please make sure that multiple beats are not sharing the same data path (path.data).
查看一下是否有一个进程已经处于运行状态,尝试杀死此进程,之后重新运行 filebeat
8.使用Processors(处理器)过滤和增强数据
8.1 概述
可以在配置中定义处理器,以便在事件发送到配置的输出之前对其进行处理。libbeat库提供以下处理器:
减少导出字段的数量
使用其他元数据增强事件
执行其他处理和解码
8.2 工作方式
每个处理器都接收一个事件,对该事件应用已定义的操作,然后返回该事件。如果定义处理器列表,则将按照在Filebeat配置文件中定义的顺序执行它们。
8.3 去重日志中的某些行
配置位置在
filebeat.yml
文件中删除所有以
DBG:
开头的行:processors:
- drop_event:
when:
regexp:
message: "^DBG:" # message为自定义字段
8.4 向输出的数据中添加某些自定义字段
processors:
- add_fields:
target: project # 要添加的自定义字段key名称
fields:
name: myproject
id: '574734885120952459'
8.5 从事件中删除某些字段
processors:
- drop_fields:
fields: ["field1", "field2", ...]
ignore_missing: false以上配置,将删除字段:
field1
和field2
ignore_missing
的值为false
表示,字段名不存在则会返回错误。为true
不会返回错误。注意: 事件中的
"@timestamp
和type
字段是无法删除的。
8.6 案例
删除顶级字段
input
和 顶级字段ecs
中的version
字段。- drop_fields:
fields: ['input', "ecs.version"]配置之前:
配置之后:
官方完整的处理器列表:
https://www.elastic.co/guide/en/beats/filebeat/current/defining-processors.html