Filebeat 是用于转发和集中日志数据的轻量级传送程序。作为服务器上的代理安装,Filebeat监视您指定的日志文件或位置,收集日志事件,并将它们转发到Elasticsearch或Logstash进行索引。
Logstash 直接收集日志,需要安装JDK,并且会占用至少500M 以上的内存
生产一般使用filebeat代替logstash,基于go开发,部署方便,重要的是只需要10M多内存,比较节约资源。
filebeat 支持从日志,Syslog,Redis,Docker,TCP,UDP,标准输入等读取数据,再输入至Elasticsearch,logstash,Redis,Kafka等
Filebeat的工作方式如下:
启动Filebeat时,它将启动一个或多个输入,这些输入将在为日志数据指定的位置中查找。对于Filebeat所找到的每个日志,Filebeat都会启动收集器。每个收集器都读取一个日志以获取新内容,并将新日志数据发送到libbeat,libbeat会汇总事件并将汇总的数据发送到为Filebeat配置的输出。
https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-overview.html
https://www.elastic.co/guide/en/beats/filebeat/current/configuring-howto-filebeat.html
![图片[1]-利用 Filebeat 收集日志(上)-李佳程的个人主页](http://www.lijiach.com/wp-content/uploads/2023/01/image-54.png)
注意:Filebeat 支持多个输入,但不支持同时有多个输出
1、安装 Filebeat
root@web01:~# wget https://mirrors.tuna.tsinghua.edu.cn/elasticstack/7.x/apt/pool/main/f/filebeat/filebeat-7.17.8-amd64.deb
root@web01:~# dpkg -i filebeat-7.17.8-amd64.deb
添加新字段的配置说明
#添加新字段
vim /etc/filebeat/filebeat.yml
- type : log
enabled: true
paths:
- /var/log/syslog
fields:
project: test-syslog #添加fields.project和fields.env字段,可用于区分不同的日志
env: test
tags: ["syslog","test"] #添加标签,也可以用于区分不同的日志
2、案例: 从标准输入读取再输出至标准输出
2.1、创建配置
root@web01:~# vim /etc/filebeat/stdin.yml
filebeat.inputs:
- type: stdin
enabled: true
output.console:
pretty: true
enable: true
2.2、执行读取
root@web01:~# filebeat -e -c /etc/filebeat/stdin.yml
.....
hello,es #输入,回车后,输出如下
{
"@timestamp": "2023-01-03T08:55:19.537Z",
"@metadata": {
"beat": "filebeat",
"type": "_doc",
"version": "7.17.8"
},
"ecs": {
"version": "1.12.0"
},
"host": {
"name": "web01.test.com"
},
"agent": {
"id": "2fe34205-12d8-4f37-a3f5-39e0d42f73e6",
"name": "web01.test.com",
"type": "filebeat",
"version": "7.17.8",
"hostname": "web01.test.com",
"ephemeral_id": "fdac9f65-ed3e-4a4a-a51b-9a56898d2629"
},
"log": {
"offset": 0,
"file": {
"path": ""
}
},
"message": "hello,es",
"input": {
"type": "stdin"
}
}
3、案例: 从标准输入读取再输出至 Json 格式的文件
3.1、创建配置
root@web01:~# vim /etc/filebeat/stdout_file.yml
filebeat.inputs:
- type: stdin
enabled: true
json.keys_under_root: true
output.file:
path: "/tmp"
filename: "filebeat.log"
3.2、执行读取
root@web01:~# filebeat -e -c /etc/filebeat/stdout_file.yml
.....
# 输入
{"name" : "lijiacheng", "age" : "18", "phone" : "0123456789" }
# Json格式整理
root@web01:~# apt -y install jq
root@web01:~# tail -f /tmp/filebeat.log | jq
{
"@timestamp": "2023-01-03T09:27:39.715Z",
"@metadata": {
"beat": "filebeat",
"type": "_doc",
"version": "7.17.8"
},
"input": {
"type": "stdin"
},
"ecs": {
"version": "1.12.0"
},
"host": {
"name": "web01.test.com"
},
"agent": {
"name": "web01.test.com",
"type": "filebeat",
"version": "7.17.8",
"hostname": "web01.test.com",
"ephemeral_id": "b2feada7-6c79-408d-bbfa-56bafa4e894b",
"id": "2fe34205-12d8-4f37-a3f5-39e0d42f73e6"
},
"log": {
"offset": 0,
"file": {
"path": ""
}
},
"name": "lijiacheng",
"age": "18",
"phone": "0123456789"
}
4、案例: 从文件读取再输出至标准输出
filebeat 会将每个文件的读取数据的相关信息记录在/var/lib/filebeat/registry/filebeat/log.json文件中,可以实现日志采集的持续性,而不会重复采集。
4.1、创建配置
root@web01:~# vim /etc/filebeat/file.yml
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/syslog
output.console:
pretty: true
enable: true
4.2、执行读取
root@web01:~# filebeat -e -c /etc/filebeat/file.yml
# 执行生成文件内容后echo hello,lj > /var/log/filebeat.log,可以看到下面的输出信息
{
"@timestamp": "2023-01-03T09:36:43.692Z",
"@metadata": {
"beat": "filebeat",
"type": "_doc",
"version": "7.17.8"
},
"input": {
"type": "log"
},
"ecs": {
"version": "1.12.0"
},
"host": {
"name": "web01.test.com"
},
"agent": {
"id": "2fe34205-12d8-4f37-a3f5-39e0d42f73e6",
"name": "web01.test.com",
"type": "filebeat",
"version": "7.17.8",
"hostname": "web01.test.com",
"ephemeral_id": "80dfb517-f84f-455d-bc11-bb42cee3f9a8"
},
"message": "hello,lj",
"log": {
"offset": 0,
"file": {
"path": "/var/log/filebeat.log"
}
}
}
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END