最近新上了个项目,昨日把各个服务器的log统一收集到es中.我这边采用的是通过filebeat采集日志文件推给logstash,然后logstash在处理日志输出保存到es中.
在配置filebeat的时候遇到了点小问题,记录一下,供参考
- type: log
enabled: true
#必须将ignore_older设置为大于close_inactive
ignore_older: 1h
#在预定义的时间段后关闭文件处理程序。时间段从读取文件的最后一行开始,而不是从文件最后修改时间开始。可>以使用2小时(2h)、5分钟(5m)等时间字符串。
close_inactive: 10m
#注意yaml配置语法中 : - 后需要有一个空格
#注意下面为 glob正则匹配模式
paths:
- /data/logs/cms-api/*_20[2-9][0-9][0-1][0-9][0-9][0-9].log - /data/logs/survey-api/*_20[2-9][0-9][0-1][0-9][0-9][0-9].log - /data/logs/common-api/*_20[2-9][0-9][0-1][0-9][0-9][0-9].log
#这个正则匹配是 整个文件地址绝对地址的匹配
exclude_files: ['.*cli_.*log$','.*notice_.*log$']
#可以自定义自定 下面自定的logType字段归于 fields的下面,传给logstash
fields:
logtype: newApp
selfFiled: selfValue
#涉及到多行的匹配策略 将不符合的行追加到符合匹配条件的行后面
multiline.pattern: '^\w{2,}\|\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}'
multiline.negate: true
multiline.match: after
官方input配置说明地址Configure inputs | Filebeat Reference [8.0] | Elastic
简单说一下注意事项
- filebeat.yml配置文件要遵循yaml语法规范 , : 和 - 后面需要有一个空格,不然配置文件虽然能测试通过,但是执行起来报错
- 一个 - type相当于一个日志收集模块 可以配置多个. 类型不同,下面的配置项也不同. 具体参看完整配置文件 filebeat.reference.yml
- paths 项的正则匹配是采用的glob模式的. 主要是用来匹配目录的. 跟平时后端语言的正则表达式有差别 . 具体参考 百度百科 glob模式_百度百科
- exclude_files: ['.*cli_.*log$','.*notice_.*log$'] 这个正则匹配是根据每个日志文件绝对路径地址来匹配的 . 常见的后端正则匹配模式
- fileds 可以自定义字段 传给logstash. 当前配置匹配到的每行日志 会保存在 message字段中,在这个配置项中添加的字段. 会保存在与message同级的fields字段下
- 多行匹配问题 ,针对异常行,数据不是已一行输出的问题 官方说明详细的很Manage multiline messages | Filebeat Reference [8.0] | Elastic
参考:Filebeat Reference [8.0] | Elastichttps://www.elastic.co/guide/en/beats/filebeat/current/index.html