注:本篇基于filebeat7.5.2
filebeat是什么?
Filebeat是用于转发和集中日志数据的轻量级传送程序。作为服务器上的代理安装,Filebeat监视您指定的日志文件或位置,收集日志事件,并将它们转发到Elasticsearch或 Logstash等进行索引。
filebeat工作方式
Filebeat的工作方式如下:启动Filebeat时,它将启动一个或多个输入,这些输入将在为日志数据指定的位置中查找。对于Filebeat所找到的每个日志,Filebeat都会启动harvester。每个harvester都读取单个日志以获取新内容,并将新日志数据发送到libbeat,libbeat将聚集事件,并将聚集的数据发送到为Filebeat配置的输出。
input:负责管理harvester并查找所有可读取的资源。Input包括多种类型。Log,syslog,kafka,redis,tcp,s3 等等、
Tips: Filebeat保留每个文件的状态,并经常将状态刷新到注册表文件中的磁盘。该状态用于记住harvester正在读取的最后一个偏移量。
filebeat常见命令&参数
export 将配置或索引模板导出到stdout。
help 显示任何命令的帮助。
keystore 管理秘密密钥库。
modules 管理配置的模块。
run 运行Filebeat。如果在未指定命令的情况下启动Filebeat,则默认使用此命令。
setup 设置初始环境,包括索引模板,Kibana仪表板和机器学习作业
test 测试配置。
version 显示有关当前版本的信息
-E 覆盖配置文件中的配置。
filebeat -E "output.elasticsearch.hosts=["http://myhost:9200"]"
-M 覆盖filebeat模块的配置
filebeat -modules=nginx -M "nginx.access.var.paths=[/var/log/nginx/access.log*]"
-c 小c 指定配置文件的路径。
-e 记录到stderr并禁用syslog /文件输出。
filebeat test config -c filebeat.yml 测试配置文件正确与否
filebeat输入
filebeat输入最主要的就是区分什么样的数据作为一行数据进行接下来的操作。
filebeat modules list 查看启停的模块。
filebeat modules disable/enable mysql 关闭或启动模块。对应 modules.d/xxx.yml会被启用
在inputs配置输入,指定要输入的文件类型以及文件的路径,harvest会去收集
在处理文件行时,可能多行文件是一个日志,这时需要配置multiline特殊处理
multiline.pattern: '^\['
multiline.negate: true
multiline.match: after
Negate和match 设置的是行组合方式、
Tips: 自定义设置,需要配置相关日志文件的解析方式,如何识别数据成为一个doc
filebeat输出
如下的配置可以收集paths 下的文件,并以message为字段传给es
filebeat.inputs:
- type: log
enabled: true
#指定一个要读取数据的文件路径
paths:
- /var/log/nginx/*.log
setup.kibana:
host: “127.0.0.1:5601"
output.elasticsearch:
hosts: [“127.0.0.1:9200"]
processors: #处理器、用来过滤要导出的数据
- add_host_metadata: ~
nohup filebeat & 后台执行
等一会去检查es的索引存在, curl -XGET ‘localhost:9200/filbeat*’ 有输出
filebeat输出通过ingest进行拆分字段
将下面的管道在es中建立。
PUT _ingest/pipeline/pipeline-nginx-access
{
"description" : "nginx access log",
"processors": [
{
"grok": {
"field": "message",
"patterns": ["%{IP:clientip} - %{DATA:userid} %{DATA:username} - %{DATA:location} %{DATA:sex} at %{DATA:timestamp} \"%{DATA:useragent}\" end"]
}
},{
"geoip":{
"field": "clientip",
"target_field": "geoip"
}
},{
"user_agent": {
"field": "useragent",
"target_field": "useragent"
}
},{
"date": {
"field": "timestamp",
"formats": ["yyyy-MM-dd HH:mm:ss"],
"target_field": "timestamp"
}
}
]
}
在/var/log/nginx/access.log中替换成如下内容
10.95.110.123 - 82304918473 zhangsan - beijing male at 2020-03-14 14:41:58 "TimeHut/5.3.3 (iPhone8,2; iOS 9.3.5; Scale/3.00) (SOURCE/App Store, VERSION_CODE/533)" end
10.95.110.123 - 82304918474 zhangsan - beijing male at 2020-03-14 14:41:58 "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36" end
修改filebeat.yml配置文件为
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/nginx/access.log
fields:
type: "access-log"
setup.template.name: "ignore-this"
setup.template.pattern: "ignore-this"
output.elasticsearch:
hosts: ["localhost:9200"]
indices:
- index: "filebeat-nginx-access-%{+yyy.MM.dd}"
when.equals:
fields.type: "access-log"
pipelines:
- pipeline: "pipeline-nginx-access"
when.equals:
fields.type: "access-log"
然后 nohup filebeat & 后台运行
去logs 下面查 filebeat的日志。
参考: