Beats概述
什么是Beats
官方定义是:轻量级数据传送工具。
Beats其实是一组beat工具的统称,它包含有很多的工具。
beat工具
- Filebeat:针对日志文件
- Metricbeat:度量数据,可以搜集系统性能和软件数据,将这些数据存在Elasticsearch中就可以进行展示、告警等功能。
- Packetbeat:网络数据,比如抓包
- Winlogbeat:主要针对Windows数据
- Hearbeat:健康检查
架构
Beats工具位于数据的起始端,它们获取到数据后可以直接传递到Elasticsearch中进行存储,或者传输给Logstash进行日志处理,最终都会交给Kibana进行展示。
Filebeat
Filebeat处理流程
Filebeat主要是针对日志文件进行处理的,它的处理流程如下:
1、输入Input:输入就是日志文件
2、处理 Filter:对获取到的日志文件进行处理
3、输出 Output:将结果输出
Fliebeat构成
从图中可以看出,Filebeat的输出对象可以使Elasticsearch、Logstash、Kafka、Redis等。而Filebeat有两个组成部分:Prospector和Harvester。
Prospector:负责检测指定的日志文件是否存在变化。
Harvester:当 Prospector 检测到指定的日志发生变化时就会通知Harvester来收集新的日志,然后发送到output对象。
在一个Filebeat中可以有多个Prospector对象,每一个Prospector对象针对的日志对象都是不同的。每个Prospector会对自己匹配到的日志文件启动一个Harvester。
Filebeat配置
Filebeat配置是通过yaml语法进行配置的。
Input配置
示例:
filebeat.prospectors:
- input_type:log
paths:
- /var/log/apache/httpd-*.log
- input_type:log
paths:
- /var/log/messages
- /var/log/*.log
其中,input_type有两种类型:
- log:日志文件
- stdin:标准输入
Output配置
Output支持的输出对象有:
- Console:标准输出
- Elasticsearch
- Logstash
- Kafka
- redis
- file:输出到另一个文件中
示例1,输出到elasticsearch:
output.elasticsearch:
hosts:["http://10.10.99.229:9200"]
username:"admin"
password:"admin"
如果加了用户权限认证则需要配置username和password
示例2,输出到标准输出:
output.console:
pretty:true
Filter配置
Filebeat对读入的内容可以通过Filter进行一定的处理。但是其处理能力相对较弱。
Input时处理:
- Include_lines:读入这一行
- exclude_lines:不读入这一行
- exclude_files:不读取这个文件
Output前处理 – Processer:
- drop_event:如果读入数据满足一定条件就丢弃
- drop_fields:丢弃满足条件的字段
- Decode_json_fields:对符合json格式的字段进行json解析
- Include_fields:加入字段
示例
processirs:
- drop_event:
when:
regexp:
message: "^DBG."
当匹配到正则表达式的时候丢弃不存储。
processors:
- decode_json_fields:
fields:["inner"]
将日志中的inner字段的json格式正常化处理
Filebeat Module
Filebeat Module对从Field写数据到ES的过程进行了合理的封装,比如nginx,mysql,apache的日志等。
他具体封装了filebeat.yaml、ingest node pipeline、kibana dashboard,这样就极大简化了日志存储的过程。
Elasticsearch Igest Node
前面提到,Filebeat缺乏数据转换的能力,在Elasticsearch5.X后,官方提供了一个 Elasticsearch Igest Node的新的node类型,它可以在写入ES前进行数据转换,它使用pipeline api。
Filebeat 收集Nginx日志
通过stdin收集日志,通过console输出结果。
安装Filebeat
首先下载Filebeat 5.6.4版本,可以通过命令下载:
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.6.4-linux-x86_64.tar.gz
解压并将解压后的目录移动到 /usr/local:
tar zxf filebeat-5.6.4-linux-x86_64.tar.gz
mv filebeat-5.6.4-linux-x86_64 /usr/local/filebeat-5.6.4
修改权限:
chown elastic:elastic -R filebeat-5.6.4/
我们要分析的nginx访问日志的信息如下:
设置Filebeat 配置
首先设置一个nginx.yaml 的配置文件,内容如下:
filebeat.prospectors:
- input_type: stdin
output.console:
pretty: true
分析日志
通过标准输入向filebeat中输入日志信息,同时指定日志分析的配置文件:
head -2 /var/log/nginx/access.log | ./filebeat -e -c nginx.yaml
可以看到,从标准输入输入了日志文件的两行,日志分析出了两组数据。
Packetbeat简介
packetbeat能够实时抓取网络包,并能自动解析应用层协议。
packetbeat抓取http包并解析
这里以packetbeat解析es的http请求为例:
下载packetbeat:
wget https://artifacts.elastic.co/downloads/beats/packetbeat/packetbeat-5.6.9-linux-x86_64.tar.gz
解压并修改属主:
tar zxf packetbeat-5.6.9-linux-x86_64.tar.gz
mv packetbeat-5.6.9-linux-x86_64 /usr/local/packetbeat-5.6.9
chown -R elastic:elastic packetbeat-5.6.9
创建packetbeat配置文件:
packetbeat.interface.device: ens192
packetbeat.protocols.http:
ports: [9200]
send_request: true
include_body_for: ["application/json","x-www-form-urlencoded"]
output.console:
pretty: true
interface.device指定了监听的网卡,protocols.http指定了抓包的协议为http,并且和端口。send_request: true表示记录了详细的信息。include_body_for设置了记录哪些格式的数据。
运行抓包:
sudo ./packetbeat -e -c es.yml -strict.perms=false
这里之所以用到sudo是应为转包命令普通用户权限可能不足。-strict.perms=false表示不检查文件的权限。