3. Filebeat实战
最后更新于:2022-04-02 07:41:58
### 配置文件
请看过下节的错误配置后,再进行配置
```yaml
filebeat.prospectors:
#收集单行日志
- input_type: log
paths:
- /var/log/messages
#过滤文档中的空格和DBG开头的内容
exclude_lines: ["^DBG","^$"]
#过滤以gz结尾的文件
exclude_files: [".gz$"]
#定义额外字段
fields:
type: ddd
#覆盖重名字段
fields_under_root: true
#收集多行日志
- input_ytpe: log
paths:
- /app/tomcat1/logs/Java_Error.log
fields:
type: web02-tomcat-error
fields_under_root: true
#配置开头为时间的格式
multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
#处理匹配到的行
multiline.negate: true
#匹配后,向后收集,直到再次匹配算结束
multiline.match: after
#注意:filebeat不能定义某个日志发送至特定对象,如果定义多个,会全部发送
#输出到文件
output.file:
path: "/tmp/"
filename: filebeat
#输出到Redis
output.redis:
hosts: ["192.168.0.106"]
db: "3"
port: "6400"
password: "noted"
key: "abc"
#输出到Elasticsearch
output.elasticsearch:
hosts: ["192.168.0.230:9200"]
#输出到Logstash
output.logstash:
hosts: ["192.168.0.230:5044"]
```
通常我们会根据[type]来进行处理,所以要核实日志中的type字段是否被覆盖,否则会导致数据不处理
#### 错误配置(Yaml语法错误)
层级错误,导致Filebeat无法启动,日志无输出信息
```yaml
fields:
type: ddd
fields_under_root: true
```
层级错误,字符ddd并没有覆盖默认的type类型,而是变成了field中的一个键值
```yaml
fields:
type: ddd
fields_under_root: true
```
日志
```shell
{"@timestamp":"2017-09-05T06:00:02.210Z","beat":{"hostname":"web-log.prod.ding","name":"web-log.prod.ding","version":"5.5.2"},"fields":{"fields_under_root":true,"type":"ddd"},"input_type":"log","message":"Sep 5 14:00:01 web-log systemd: Stopping user-0.slice.","offset":359166,"source":"/var/log/messages","type":"log"}
```
尝试过将A文件传送至redis,B文件直接发给logstash,但是filebeat会要求设置一个output
```yaml
- input_ytpe: log
paths:
- /app/tomcat1/logs/Java_Error.log
fields:
type: web02-tomcat-error
fields_under_root: true
multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
multiline.negate: true
multiline.match: after
output.logstash:
hosts: ["192.168.0.230:5044"]
```
### 收集数据,转发Kafka(待整理)
';