一、前言
Filebeat是本地文件的日志数据采集器,可监控日志目录或特定日志文件(tail file),并将它们转发给Elasticsearch或Logstatsh进行索引、kafka等。带有内部模块(auditd,Apache,Nginx,System和MySQL),可通过一个指定命令来简化通用日志格式的收集,解析和可视化。
二、部署与运行
①.下载(或使用网盘中提供的安装包,版本为:filebeat-6.5.4)
网盘链接:https://pan.baidu.com/s/1quCglgpLYMy_Z_gyVvSqKA
提取码:ctf9
②.解压并且创建相应的目录存放解压后的文件
#创建一个存放filebeat压缩包的文件夹
mkdir /usr/local/beats
#解压
tar -xvf filebeat-6.5.4-linux-x86_64.tar.gz
#进入解压后的filebeat目录
cd filebeat-6.5.4-linux-x86_64
③.创建一个filebeat.yml
文件
#创建如下配置文件 filebeat.yml
filebeat.inputs:
- type: stdin
enabled: true
setup.template.settings:
index.number_of_shards: 3
output.console:
pretty: true
enable: true
④.启动filebeat
#启动filebeat
./filebeat -e -c itcast.yml
#输入hello运行结果如下:
hello
⑤.输出结果
{
"@timestamp": "2019-01-12T12:50:03.585Z",
"@metadata": { #元数据信息
"beat": "filebeat",
"type": "doc",
"version": "6.5.4"
},
"source": "",
"offset": 0,
"message": "hello", #输入的内容
"prospector": { #标准输入勘探器
"type": "stdin"
},
"input": { #控制台标准输入
"type": "stdin"
},
"beat": { #beat版本以及主机信息
"name": "itcast01",
"hostname": "itcast01",
"version": "6.5.4"
},
"host": {
"name": "itcast01"
}
}
三、读取日志文件
#创建如下配置文件 filebeat-log.yml
filebeat.inputs:
#读取日志信息
- type: log
paths:
- /usr/local/beats/logs/ *.log
setup.template.settings:
index.number_of_shards: 3
output.console:
pretty: true
enable: true
#启动filebeat
./filebeat -e -c filebeat-log.yml
#/haoke/beats/logs下创建a.log文件,并输入如下内容
hello
world
#观察filebeat输出
//......省略
四、自定义字段
#修改配置文件 filebeat-log.yml
filebeat.inputs:
#读取日志信息
- type: log
paths:
- /usr/local/beats/logs/ *.log
#添加自定义tag,便于后续的处理
tags: ["web"]
#添加自定义字段
fields:
test: filebeat_test
fields_under_root: true #true为添加到根节点,false为添加到子节点中
setup.template.settings:
index.number_of_shards: 3
output.console:
pretty: true
enable: true
#启动filebeat
./filebeat -e -c filebeat-log.yml
#/haoke/beats/logs下创建a.log文件,并输入如下内容
hello
world
#观察filebeat输出
//......省略
五、输出到Elasticsearch
#修改配置文件 filebeat-log.yml
filebeat.inputs:
#读取日志信息
- type: log
paths:
- /usr/local/beats/logs/ *.log
#添加自定义tag,便于后续的处理
tags: ["elasticsearch"]
#添加自定义字段
fields:
test: filebeat_test
fields_under_root: true #true为添加到根节点,false为添加到子节点中
setup.template.settings:
index.number_of_shards: 3
#指定ES的配置
output.elasticsearch:
hosts: ["192.168.1.7:9200","192.168.1.7:9201","192.168.1.7:9202"]
#启动filebeat
./filebeat -e -c filebeat-log.yml
#/haoke/beats/logs下创建a.log文件,并输入如下内容
123
在日志文件中输入新的内容进行测试:
查看数据
六、Module
前面要想实现日志数据的读取以及处理都是自己手动配置的,其实,在Filebeat中,有大量的Module,可以简化我 们的配置,直接就可以使用,如下:
./filebeat modules list
Enabled:
Disabled:
apache2
auditd
elasticsearch
haproxy
icinga
iis
kafka
//......省略其他模块
①.可以看到,内置了很多的module,但是都没有启用,如果需要启用需要进行enable操作:
./filebeat modules enable nginx #启动
#./filebeat modules disable nginx #禁用
Enabled:
nginx
Disabled:
apache2
auditd
elasticsearch
haproxy
icinga
iis
kafka
//......省略其他模块
②.nginx module 配置 :
#此配置文件在filebeat目录下的modules.d下面
- module: nginx
# Access logs
access:
enabled: true
var.paths: ["/usr/local/nginx/logs/access.log*"]
# Set custom paths for the log files. If left empty,
# Filebeat will choose the paths depending on your OS.
#var.paths:
# Error logs
error:
enabled: true
var.paths: ["/usr/local/nginx/logs/error.log*"]
# Set custom paths for the log files. If left empty,
# Filebeat will choose the paths depending on your OS.
#var.paths:
③.配置filebeat :
#vim itcast-nginx.yml
filebeat.inputs:
#- type: log # enabled: true # paths:
# - /usr/local/nginx/logs/ *.log
# tags: ["nginx"]
setup.template.settings:
index.number_of_shards: 3
output.elasticsearch:
hosts: ["192.168.40.133:9200","192.168.40.134:9200","192.168.40.135:9200"]
filebeat.config.modules:
path: ${path.config}/modules.d/ *.yml
reload.enabled: false
④.测试 :
./filebeat -e -c itcast-nginx.yml
//.....查看输出结果
七、Filebeat工作原理
Filebeat由两个主要组件组成:prospector 和 harvester。
-
harvester:
- 负责读取单个文件的内容。
- 如果文件在读取时被删除或重命名,Filebeat将继续读取文件。 -
prospector
- prospector 负责管理harvester并找到所有要读取的文件来源。
- 如果输入类型为日志,则查找器将查找路径匹配的所有文件,并为每个文件启动一个harvester。
- Filebeat目前支持两种prospector类型:log和stdin。 -
Filebeat如何保持文件的状态
- Filebeat 保存每个文件的状态并经常将状态刷新到磁盘上的注册文件中。
- 该状态用于记住harvester正在读取的最后偏移量,并确保发送所有日志行。
- 如果输出(例如Elasticsearch或Logstash)无法访问,Filebeat会跟踪最后发送的行,并在输出再次可用 时继续读取文件。
- 在Filebeat运行时,每个prospector内存中也会保存的文件状态信息,当重新启动Filebeat时,将使用注册 文件的数据来重建文件状态,Filebeat将每个harvester在从保存的最后偏移量继续读取。
- 文件状态记录在data/registry文件中。
八、总结
一般情况下Filebeat可满足大部分的日志采集需求,但是仍然避免不了一些特殊的场景需要我们对Filebeat进行定制化开发,当然Filebeat本身的设计也提供了良好的扩展性。