Beats及Filebeat轻量型日志采集器
Beats简介
Beats被官方称为Lightweight Data Shipper,就是轻量级数据传送者,它主要有几个分类,如下:
1. Filebeats日志文件,主要是针对日志文件。
2. Metricbeat度量数据,主要可以收集CPU等数据,内存,磁盘,服务器软件(如nginx,Mysql等)。
3. Packetbeat网络数据,主要收集网络数据。
4. Winlogbeat Windows数据,针对windows系统日志数据。
5. Heartbeat健康检查。
下图是Beats在整个Elastic Stack中的位置。
Beats位于上图的左侧,也就是数据产生的起始端,它们可以将数据直接传输到elasticsearch中,也可以通过logstash对数据进行解析和转换,然后在传输到elasticsearch,最后在对数据进行可视化的展示。
什么是Filebeat
Filebeat是一款使用go语言开发的,主要是对日志文件进行处理的,是一个属于Beats系列的日志托运者 (一组安装在主机上的轻量级托运人),用于将不同类型的数据传送到ELK堆栈进行分析。每个Beat专门用于传送不同类型的信息,例如,Winlogbeat发布Windows事件日志,Metricbeat发布主机指标等等。顾名思义,Filebeat提供日志文件。
Filebeat处理流程
1. 日志文件输入(Input)。
2. 处理日志文件(Filter)。
3. 输出到目标对象中(Output)。
上图是Filebeat的结构图。 上图左边灰色框中就是Filebeat,右边是Filebeat的输出对象,Filebeat可以将日志输出到Elasticsearch,Logstash,Kafka,redis等。
Filebeat的组成
根据上图可以看到Filebeat由两个主要组件组成,prospector 和 harvester。
1. harvester(收割者):
负责读取单个文件的内容。
如果文件在读取时被删除或重命名,Filebeat将继续读取文件。
2. prospector(观察者):
prospector负责管理harvester并找到所有要读取的文件来源,主要监控文件是否变化,如果输入类型为日志,则查找器将查找路径匹配的所有文件,并为每个文件启动一个harvester(上图prospector1就有两个harvester),如果文件有变化harvester就会收集新的日志。
Filebeat可以有多个prospector,每个prospector负责的文件是不同的。
Filebeat安装
可以先将Filebeats下载,去官网下载,地址:https://www.elastic.co/downloads/beats,也可以在这个地址 https://elasticsearch.cn/download/#seg-4
Filebeats官网地址:https://www.elastic.co/cn/beats/filebeat
Filebeats文档地址:https://www.elastic.co/guide/en/beats/filebeat/current/index.html
Filebeats目录说明
Mac系统安装:
可以先查看filebeat安装信息
安装
查看安装是否成功
安装后Filebeat的相关安装位置:
1. 安装目录:/usr/local/Cellar/filebeat/{filebeat版本}/
2. 配置目录:/usr/local/etc/filebeat/
3. 缓存目录:/usr/local/var/lib/filebeat/
启动featbeat,可以通过命令brew services start filebeat
Filebeat配置
Filebeat的配置文件是filebeat.yml。Filebeat使用的是yaml语法,下面是Filebeat配置示例
filebeat.prospector:
- input_type: log
paths:
- /var/log/apache/httpd-*.log
document_type: apache
- input_type: log
paths:
- /var/log/messages
- /var/log/*.log
说明:
1. prospector可以配置多个,所以这里yaml对于数组是用 - 符号来表示的,每个prospector都有输入类型(input_type),这里log表示日志文件。
2. paths也是数组(下面也有-这个符号),path用于指定日志路径。
Filebeat Output配置
1. Filebeat Console(标准输出):Filebeat将收集到等数据,输出到console里,一般用于开发环境中,用于调试。
output.console pretty.true
enable: true
2. Filebeat Elasticsearch
output.elasticsearch host:["http://localhost:9200"] username: "admin" password: "123456"
Filebeat Filter配置
Filebeat本身可以对数据进行处理,不过处理能力还是有点弱,同时也缺乏对数据转换的能力。
Filebeat 演示-收集Nginx日志
通过stdin收集日志。
先查看Nginx是否启动,在浏览器上输入http://127.0.0.1:8080/
如果不知道你的环境nginx监听的端口,可以查看nginx.conf配置文件中listen就可以。
查看下nginx日志内容
songguojundeMacBook-Pro:~ songguojun$ head -n 10 /usr/local/var/log/nginx/access.log
127.0.0.1 - - [07/May/2020:22:38:13 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:76.0) Gecko/20100101 Firefox/76.0"
127.0.0.1 - - [07/May/2020:22:44:36 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:76.0) Gecko/20100101 Firefox/76.0"
先对nginx.yml文件进行配置,我的Mac系统nginx.yml路径在/usr/local/etc/filebeat/modules.d/下面,如果没有,可以新建一个nginx.yml文件。
该文件内容配置如下:
filebeat.prospectors: - input_type: stdin output.console: pretty: true
在输入命令head -n 10 /usr/local/var/log/nginx/access.log | filebeat -e -c /usr/local/etc/filebeat/modules.d/nginx.yml
nginx日志每一条都被封装到json中。
Filebeat和Elasticsearch Ingest Node
Filebeat是缺乏对数据转换的能力。所以ES在5.x版本的时候增加了一个新的node类型Ingest Node。这个Ingest Node可以在数据写入ES之前可以对数据进行转换,使用的Api是pipeline。
Filebeat Module介绍
Filebeat Module是针对社区中常见的需求进行配置,封装来增加易用性,比如常见nginx的日志,apache日志,mysql日志。这些封装都在featbeat.yml这个配置文件中。