本篇主要来聊一聊filebeat的安装部署与使用。
概念
如果你用过logstash,那么你就会非常快速的熟悉filebeat,它其实就做一件事情:从input读取事件源,经过相应的解析和处理之后,从output输出到目标存储库。
下载
首先我们要去下载安装包,这个比较简单,就不多介绍了
我这里选择了rpm安装包。
安装
我这里用的是linux操作系统,把上一步下载到的安装包放到对应的目录下,然后进入到该目录,执行rpm -ivh filebeat-6.6.0-x86_64.rpm
,执行完之后就安装成功了,我们可以看到安装的相关路径
配置
rpm方式安装完之后,它默认的配置文件路径在/etc/filebeat
,如图
filebeat.yml是一个样例文件,我们可以基于这个文件来改动自己想要的配置项,filebeat.reference.yml是包含了所有的配置项的文件,我们可以从里面拷贝自己想要的项。这里介绍几个我们常用的配置项,
filebeat.inputs
主要用来配置收集的信息来源,我们用的比较多的是如下这种方式来收集日志
type就是收集的类型,enabled就是是否启用,paths就是对应的日志文件。这个节点是支持多个类型的收集配置的,如
filebeat.modules
这个估计大家用的不多或者说不是很熟,其实这个可以理解为对中间件的日志解析模块,很多中间件输出的日志格式都是固定的,只要这里加了对应中间件的module就可以自动帮你解析。通过
./filebeat modules list
可以查看所有支持的module。output
这里写output并不是说这是一个配置节点,是因为filebeat支持多种输出,我们真正在配置的时候是配实际的输出方式,比如output.elasticsearch、output.file等。
更多的配置介绍可以查看官网的配置。
启动
执行命令systemctl start filebeat.service
就可以启动了。然后执行ps -ef|grep filebeat
查看一下
可以看到已经启动成功了,如果你发现没有启动成功,可以执行 cd /usr/bin
,在这个目录下执行./filebeat -c /etc/filebeat/filebeat.yml -e
,这样会提示具体的错误信息。比如我这里filebeat用的8.1.2版本,es用的7.9版本,用启动的时候就提示es版本太老,需要配置output.elasticsearch.allow_older_versions为true。而用systemctl start filebeat.service
启动的时候没有任何提示,连在 /var/log/filebeat/ 和 /var/lib/filebeat/registry/filebeat/ 都没找到错误信息,这里属实有点坑。
重新启动命令systemctl restart filebeat.service
。
最后看下es的内容http://ip:9200/_cat/indices?v
:
可以看到已经有了,当然我们可以自定义索引名称。
集成ElasticSearch
如何使用filebeat将日志文件数据同步到es中去呢,这里基于例子来讲。我本地有两个日志文件,分别为/usr/local/log/ucs.20220412.0.log
、/usr/local/log/cps-provider.20220412.0.log
,filebeat.yml做如下配置:
#输入
filebeat.inputs:
- type: log
enabled: true
paths:
- /usr/local/log/ucs.20220412.0.log
tags: ucs
- type: log
enabled: true
paths:
- /usr/local/log/cps-provider.20220412.0.log
tags: cps
setup.template.name: "my-log"
setup.template.pattern: "my-log-*"
#输出
output.elasticsearch:
# Array of hosts to connect to.
hosts: ["192.168.10.118:9200"]
indices:
- index: "ucs-%{+yyyy.MM.dd}"
when.contains:
tags: "ucs"
- index: "cps-%{+yyyy.MM.dd}"
when.contains:
tags: "cps"
#如果是es版本较老,则开启下面这项
#allow_older_versions: true
配置完成之后启动filebeat,再访问es地址http://ip:port/_cat/indices?v
看下
我们新加的两个日志文件对应的索引内容都有了。
多行进行合并
filebeat默认是逐行进行解析并同步的,但是我们的日志一般都是会由多行组成,如下
此时我们需要将多行进行合并到一个message中去,这里需要做如下配置
以上只是一个示例,具体的切割匹配可以自己定义。
如果不小心删了es里的数据,如何重新同步?删除/var/lib/filebeat/registry/filebeat
目录下的log.json再重启即可。
总结
总体比较简单,就是出了问题不知道去哪找日志排查起来比较坑。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。