Filebeat收集日志
一、概述
Filebeat是一个日志文件托运工具,做为一个agent安装到服务器上,filebeat会监控日志目录或者指定的日志文件,追踪读取这些文件(追踪文件的变化,不停的读),并且转发这些信息到elasticsearch或者logstarsh中存放。
*Filebeat包含两个主要的组件,prospectors(探测器)和harvesters(收割机)。
1. harvesters(收割机)
harvesters负责一行一行地读取日志文件,并将内容发送到指定的输出。
2. prospectors(探测器)
prospectors负责管理所有的harvesters,和发现所有的需要读取的日志源。
如果输入源是log(日志),prospectors根据配置路径,查找驱动器上的所有匹配的日志文件,并为每个文件启动一个收割机。
此组件一般情况下默认就行,不用做配置。
*Filebeat内置了很多模块,封装了日志的收集和过滤操作。
二、支持的模块
activemq、apache、auditd、aws、azure、cef、cisco、coredns
elasticsearch、envoyproxy、googlecloud、haproxy、ibmmq、icinga
iis、iptables、kafka、kibana、logstash、misp、mongodb、mssql
mysql、nats、netflow、nginx、o365、okta、osquery、panw
postgresql、rabbitmq、redis、santa、suricata、system、traefik、zeek
三、模块收集日志
*这里以system为例
(一)输出到Elasticsearch中
- 配置启动system模块
filebeat modules enable system
filebeat modules list
- 找到日志文件
- 配置vim /etc/filebeat/modules.d/system.yml文件
这里system模块默认了路径,一般都是在/var/log/mesagge和/var/log/secure
也可以自己配置路径,只需去掉var.paths的注释,然后添加路径,支持同时写多个路径。(注意缩进)
var.paths:
- 路径1
- 路径2
- 配置filebeat.yml
(1) 配置输出源
*从7.0版本以后,只能配置一个输出源
index表示es的索引
when.eaquals表示比较
when.eaquals
event:
module: "system"
#表示event字段下的module字段为system时,使用这个索引。module字段就表示模块,可以设置其他字段来判断。
还有when.contains #包含
(2) 配置kibana
setup.kibana:
host: "19.130.244.160:5601"
setup.template.name: "logstash-"
setup.template.pattern: "logstash-*"
setup.template.overwrite: true
setup.template.enabled: true
setup.ilm.enabled: false
- 启动filebeat
systemctl start filebeat
systemctl status filebeat
(二) 输出到logstash(模板收集的日志也可输出到logstash)
- 配置filebeat配置文件
(1) 去除kibana配置
(2) 配置输出源(端口可自定义,默认5044)
- 启动filebeat
systemctl restart filebeat
systemctl status filebeat
四、使用file输入源收集日志
filebeat.inputs:
- type: log
enabled: true
paths:
- 日志路径1(可使用通配符*)
- type: log
enabled: true
paths:
- 日志路径2(可使用通配符*)
五、Febeat常用配置说明
yml配置文件严格控制缩进,如果配置顶格,那么应用到全局,如果存在缩进,则只应用到此缩进层级。以下配置根据需要选取
filebeat.inputs:
- type: log
enabled: true
paths:
- 日志路径1(可使用通配符*)
tags: ["标记1","标记2"] #向日志中添加tags标记,tags字段为数组类型
fields:
test1: test1_value #向日志中添加test1字段,默认在fields字段下
test2: 2
encoding: utf-8 #指定编码
fields_under_root: true #默认为false,为true是将添加的字段放在根路径,不放在fields字段下
include_lines: ["^正则表达式1","^正则表达式2"] #只收集开头匹配上此正则表达式的行
exclude_files: ["^正则表达式1","^正则表达式2"] #排除,不收集开头匹配上此正则表达式的行
#多行匹配,将多行日志合并成一条日志,比如java日志、tomcat的catalina日志等。
multiline.pattern: '正则表达式' #多行匹配使用的正则表达式
multiline.negate: true #开启匹配模式,为true则以匹配上的为分隔,为false则以不匹配上的为分隔。
multiline.match: after #上一条配置为true,则将匹配不上的追加在匹配上的后面;
#为false,则将匹配上的追加在匹配不上的后面。
#此配置为before,则追加在前面。
如果想要重新从头读取日志文件,可以删除/var/lib/filebeat/registry目录,然后重启filebeat
rm -rf /var/lib/filebeat/registry && systemctl restart filebeat