Filebeat日志采集器使用详解2(样例:日志文件采集、输出至Elasticsearch)
二、日志文件采集、输出至 Elasticsearch
1,功能说明
在该样例中,我们通过 Filebeat 采集应用程序产生的日志数据,然后将日志数据输出到 Elasticsearch 中。
2,编写配置文件
(1)首先进入 Filebeat 目录,执行如下命令编辑默认的配置文件:
vi filebeat.yml
(2)需要修改里面的 filebeat.inputs 和 output.elasticsearch 的相关配置。
filebeat.inputs: # 配置log插件 - type: log # 设置为 true 表示启用 log 插件 enabled: true # 指定要监控采集的日志文件,可以指定多个规则 paths: - /home/log/*.log output.elasticsearch: # 指定 ES 集群的节点信息,可以指定多个,用逗号隔开即可 hosts: ["192.168.60.9:9200"]
注意:在 filebeat.yml 文件中会发现,filebeat.inputs 配置模块中有 Multiline 的相关配置,但默认被注释掉了。如果要实现异常日志数据合并采集,那利用 Filebeat 也是可以实现的。
3,启动测试
(1)首先我们执行如下命令启动 filebeat:
(2)接着我们编辑 /home/log/hangge.log 日志文件,往里面写入如下数据并保存:
(3)最后,我们到 Elasticsearch 中确认是否有数据,以及数据的格式是否正确。在浏览器中访问“http://192.168.60.9:9200/_search?pretty”即可查询目前 Elasticsearch 中的所有数据。
(4)发现采集的原始日志数据被保存到 message 字段中了,并且还多了很多额外的字段,这些字段是 Filebeat 默认产生的。如果只需要保存原始日志数据,则需要在 output.elasticsearch 模块中配置 codec 参数。
./filebeat -c filebeat.yml
(2)接着我们编辑 /home/log/hangge.log 日志文件,往里面写入如下数据并保存:
2023-11-24 12:15:54,985 [main] [com.hangge.LogPruducer] [DEBUG] - 初始化链接成功! 2023-11-24 12:15:55,985 [main] [com.hangge.LogPruducer] [INFO] - 开始执行计算操作! 2023-11-24 12:15:56,985 [main] [com.hangge.LogPruducer] [ERROR] - 除零异常。 2023-11-24 12:15:57,988 [main] [com.hangge.LogPruducer] [ERROR] - 计算执行失败! 2023-11-24 12:15:58,985 [main] [com.hangge.LogPruducer] [DEBUG] - 释放链接!
(3)最后,我们到 Elasticsearch 中确认是否有数据,以及数据的格式是否正确。在浏览器中访问“http://192.168.60.9:9200/_search?pretty”即可查询目前 Elasticsearch 中的所有数据。
output.elasticsearch: # 指定 ES 集群的节点信息,可以指定多个,用逗号隔开即可 hosts: ["192.168.60.9:9200"] codec.format: string: '%{[message]}'
附:解决 Filebeat 无法将数据输出至 Elasticsearch 问题
(1)如果 Filebeat 启动后一直无法将数据输出至 Elasticsearch,并且查看 Filebeat 目录下的 logs 文件夹内容日志,看到如下错误:
2023-11-28T18:57:11.860+0800 ERROR [publisher_pipeline_output] pipeline/output.go:154 Failed to connect to backoff(elasticsearch(http://192.168.60.9:9200)): Connection marked as failed because the onConnect callback failed: error loading template: failure while checking if template exists: 405 Method Not Allowed:
(2)这是由于 Filebeat 和 Elasticsearch 版本不一致造成的,我们使用相同版本即可。