Filebeat 介绍

Filebeat 是使用 Golang 实现的轻量型日志采集器,也是 Elasticsearch stack 里面的一员。本质上是一个 agent ,可以安装在各个节点上,根据配置读取对应位置的日志,并上报到相应的地方去。

Filebeat 的可靠性很强,可以保证日志 At least once 的上报,同时也考虑了日志搜集中的各类问题,例如日志断点续读、文件名更改、日志 Truncated 等。

Filebeat 并不依赖于 ElasticSearch,可以单独存在。我们可以单独使用Filebeat进行日志的上报和搜集。filebeat 内置了常用的 Output 组件, 例如 kafka、ElasticSearch、redis 等,出于调试考虑,也可以输出到 console 和 file 。我们可以利用现有的 Output 组件,将日志进行上报。

当然,我们也可以自定义 Output 组件,让 Filebeat 将日志转发到我们想要的地方。

filebeat 其实是 elastic/beats 的一员,除了 filebeat 外,还有 HeartBeat、PacketBeat。这些 beat 的实现都是基于 libbeat 框架。

Filebeat整体工作原理

Filebeat 由两个主要组件组成:harvester 和 prospector。

采集器 harvester 的主要职责是读取单个文件的内容。读取每个文件,并将内容发送到 the output。 每个文件启动一个 harvester,harvester 负责打开和关闭文件,这意味着在运行时文件描述符保持打开状态。如果文件在读取时被删除或重命名,Filebeat 将继续读取文件。

查找器 prospector 的主要职责是管理 harvester 并找到所有要读取的文件来源。如果输入类型为日志,则查找器将查找路径匹配的所有文件,并为每个文件启动一个 harvester。每个 prospector 都在自己的 Go 协程中运行。

注:Filebeat prospector只能读取本地文件, 没有功能可以连接到远程主机来读取存储的文件或日志。

由以上两个组件一起工作来读取文件(tail file)并将事件数据发送到您指定的输出。

直接开始实验

本次实验需要用到的elasticeseach和kibana,我的上一条博客已经介绍过详细的安装过程了,可以去参考 elasticeseach和kibana的详细安装 为了测试就不用/etc/filebeat/filebeat.yml配置文件的了 直接自己写一个文件,等下运行的时候指定就可以了

[root@server156 ~]# vim /root/nginx_json_log.yml

filebeat.inputs:

- type: log

enabled: true

paths:

- /var/log/nginx/www.access.log

tags: "access"

json.keys_under_root: false

json.overwrite_keys: true

json.add_error_key: true

json.message_key: json-err

setup.template.settings:

index.number_of_shards: 3

index.number_of_replicas: 0

#如果es索引模板已经存在,我们要修改 主副分片数 必须覆盖原来的模块

setup.template.overwrite: true

#设置自定义索引模块

setup.template.name: "nginx-log"

setup.template.pattern: "nginx-log-*"

output.elasticsearch:

hosts: ["http://192.168.121.156:9200"]

ilm.enabled: false

indices:

- index: "nginx-log-access-host156-%{+yyyy.MM}"

when.contains:

tags: "access"

写好yaml文件以后就可以去配置nginx的日志格式了 记得等下nginx的日志文件路径要对应上 有nginx的就直接设置 我这台机器上没有,yum下载一个比较方便

yum install nginx -y

修改nginx日志格式,先将原来的日志模板注释掉,然后再添加自己想要的格式 这个可以看自己的需求来配

[root@server156 ~]# vim /etc/nginx/nginx.conf

# log_format main '$remote_addr - $remote_user [$time_local] "$request" '

# '$status $body_bytes_sent "$http_referer" '

# '"$http_user_agent" "$http_x_forwarded_for"';

log_format main '{"remote_addr":"$remote_addr","remote_user":"$remote_user",'

'"time_local":"$time_local","request":"$request","status":"$status",'

'"body_size":"$body_bytes_sent","referer":"$http_referer","agent":"$http_user_agent",'

'"x_forwarded":"$http_x_forwarded_for"}';

为了区别原来默认的日志文件,我修改了日志文件名

access_log /var/log/nginx/www.access.log main;

然后启动nginx

[root@server156 ~]# systemctl start nginx

然后在浏览器或者其它主机访问这台主机,查看日志

[root@server156 elasticsearch-head-master]# cd

[root@server156 ~]# cat /var/log/nginx/www.access.log

{"remote_addr":"192.168.121.155","remote_user":"-","time_local":"11/Oct/2023:11:01:33 +0800","request":"GET / HTTP/1.1","status":"200","body_size":"4833","referer":"-","agent":"curl/7.29.0","x_forwarded":"-"}

{"remote_addr":"192.168.121.155","remote_user":"-","time_local":"11/Oct/2023:11:01:34 +0800","request":"GET / HTTP/1.1","status":"200","body_size":"4833","referer":"-","agent":"curl/7.29.0","x_forwarded":"-"}

{"remote_addr":"192.168.121.155","remote_user":"-","time_local":"11/Oct/2023:11:01:35 +0800","request":"GET / HTTP/1.1","status":"200","body_size":"4833","referer":"-","agent":"curl/7.29.0","x_forwarded":"-"}

{"remote_addr":"192.168.121.155","remote_user":"-","time_local":"11/Oct/2023:11:01:35 +0800","request":"GET / HTTP/1.1","status":"200","body_size":"4833","referer":"-","agent":"curl/7.29.0","x_forwarded":"-"}

日志已经是我们修改后的模板了 然后启动filebeat收集日志到elasticeseach

[root@server156 ~]# filebeat -e -c /root/nginx_json_log.yml

然后就去kibana的5601端口查看信息 可以看到我们的日志的索引已经收集到了 然后在kibana创建索引模式查看我们的数据 kibana的详细安装在我的上一条博客里已经有写了,还没安装的话可以去看看 创建后以后就可以去看我们的数据了 可以看到我们的日志信息已经转为json格式了,json前缀的就是我们的日志字段

好文阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: