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(待整理)
';