前言
大家好,我是小郭,最近在玩 ELK 日志平台,它是 Elastic 公司推出的一整套日志收集、分析和展示的解决方案。
只有学习了,操作了才能算真正的学会使用了,虽然看起来简单,但是里面的流程步骤还是很多的,将步骤和遇到的问
题记录和总结下,今天主要分享下在Docker环境下部署 Filebeat 日志收集工具。
# 从零到一搭建ELK日志,在Docker环境下部署 Elasticsearch 数据库
# 从零到一搭建ELK日志,在Docker环境下部署 logstash 工具
# 从零到一搭建ELK日志,在Docker环境下部署 Kibana 可视化工具
什么是 Filebeat?
轻量型日志采集器,用于转发和集中日志数据
Filebeat 监控您指定的日志文件或位置,收集日志事件,并将它们转发到Elasticsearch或 Logstash生成索引
工作原理
启动 Filebeat 时,它会启动一个或多个输入,这些输入会在您为日志数据指定的位置中查找
对于 Filebeat 定位的每个日志,Filebeat 都会启动一个收割机。每个harvester 读取单个日志以获取新内容并将新日志数据发送到libbeat,libbeat 聚合事件并将聚合数据发送到您为Filebeat 配置的输出。
输入
filebeat.inputs: - type: log paths: - /var/log/*.log - /var/path2/*.log
输入的作用:输入负责管理收割机并查找所有要读取的源。
支持输入的类型:www.elastic.co/guide/en/be…
收割机
收割机的作用:负责打开和关闭文件,这意味着在收割机运行时文件描述符保持打开状态
如果文件在收集过程中被删除或重命名,Filebeat 会继续读取该文件。这样做的副作用是保留磁盘上的空间,直到收割机关闭
默认情况下,Filebeat 会保持文件打开,直到close_inactive到达。
存在丢失的情况:
Filebeat 的至少一次交付保证存在限制,涉及日志轮换和旧文件的删除。如果日志文件写入磁盘并旋转的速度超过了 Filebeat 处理的速度,或者如果在输出不可用时删除了文件,则数据可能会丢失
部署 Filebeat 日志收集工具
- 安装Filebeat镜像
docker pull docker.elastic.co/beats/filebeat:8.1.0
- 创建配置文件
mkdir -p /data/elk/filebeat touch filebeat.yml
filebeat.yml配置
需要注意的坑,在filebeat.yml 配置的日志地址是配置docker里面的地址,否则会读不到
filebeat.inputs: - type: log enabled: true paths: - /usr/share/filebeat/logs/* # output.logstash: # hosts: ["127.0.0.1:9900"] output.elasticsearch: hosts: ["192.168.56.10:9200"]
- 启动Filebeat
docker run -d -v /data/elk/filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml -v /home/logs:/usr/share/filebeat/logs --name filebeat docker.elastic.co/beats/filebeat:8.1.0
指令可能存在换行的问题,执行有问题,可以先复制出来去掉换行
- 生成索引,有生成才算成功
通过docker logs来看Filebeats的操作
我们可以看到 Filebeats 内部启动了 go程序 去我们所配置的文件日志拉取数据
查询是否生成索引
curl http://localhost:9200/_cat/indices?v
看到filebeat开头的那个索引,就表示成功了
- 上Kibana上添加索引
为了能看到日志,我们必须手动添加索引
再回到查询页面的时候我们就可以进行筛选的操作了
配置
Filebeat提供给我们的配置是非常丰富的,我们可以将收集到的数据写入很多不同的地方
这里我总结了部分常用到的,更多的配置信息我们可以到官网上去查询。
// 输出 filebeat.inputs: // 类型 - type: filestream id: my-filestream-id paths: - /var/log/*.log // 模块配置 设置启动模块 filebeat.modules: - module: nginx access: error: - module: mysql slowlog: // 输出到Es output.elasticsearch: hosts: ["https://myEShost:9200"] username: "filebeat_writer" password: "YOUR_PASSWORD" index: "%{[fields.log_type]}-%{[agent.version]}-%{+yyyy.MM.dd}" // 默认行为,当一个事件被 elasticsearch 明确拒绝时,它会被丢弃。 non_indexable_policy.drop: ~ indices: - index: "warning-%{[agent.version]}-%{+yyyy.MM.dd}" when.contains: message: "WARN" - index: "error-%{[agent.version]}-%{+yyyy.MM.dd}" when.contains: message: "ERR" // 输出到logstash output.logstash: hosts: ["localhost:5044", "localhost:5045"] // 如果设置为 true 并且配置了多个 Logstash 主机,则输出插件会将已发布的事件负载平衡到所有 Logstash 主机上。 // 如果设置为 false,则输出插件将所有事件仅发送到一个主机(随机确定), // 如果所选主机无响应,则将切换到另一台主机。默认值为假。 loadbalance: true index: filebeat proxy_url: socks5://user:password@socks5-proxy:2233 enabled: true output.kafka: # initial brokers for reading cluster metadata hosts: ["kafka1:9092", "kafka2:9092", "kafka3:9092"] # message topic selection + partitioning 用于生产事件的 Kafka 主题。 topic: '%{[fields.log_topic]}' partition.round_robin: reachable_only: false // 代理要求的 ACK 可靠性级别。0=无响应,1=等待本地提交,-1=等待所有副本提交。默认值为 1 required_acks: 1 // 设置输出压缩编解码器 compression: gzip // JSON 编码消息的最大允许大小 max_message_bytes: 1000000
总结
我们主要完成在Docker环境下部署 Filebeat 日志收集工具,他是搭建ELK日志非常重要的一部分,我们利用Filebeat日志收集完成之后,将数据写入 Elasticsearch 后用 Kibana 进行可视化展示,目前我们已经完成了Fliebeat + Es +Kibana部分。