在 Ubuntu 上使用 Filebeat 进行日志分析
一 架构与准备
- 组件分工:Filebeat 负责采集与轻量处理,Elasticsearch 存储与检索,Kibana 检索与可视化;如需复杂解析,可在中间加入 Logstash。
- 安装要点(APT):
- 导入 GPG 并添加仓库后安装:sudo apt update && sudo apt install filebeat。
- 配置文件默认路径:/etc/filebeat/filebeat.yml。
- 服务管理:sudo systemctl start filebeat && sudo systemctl enable filebeat。
- 验证配置:sudo filebeat test config;查看服务日志:sudo journalctl -u filebeat -f。
二 快速上手 系统日志模块
- 启用模块与检查:sudo filebeat modules enable system;sudo filebeat modules list。
- 配置输出(二选一):
- 直连 ES(示例):
- output.elasticsearch.hosts: [“http://localhost:9200”]
- 发送至 Logstash(示例):
- output.logstash.hosts: [“your_logstash_host:5044”]
- 初始化与启动:
- 初始化索引模板与 Kibana 仪表板:sudo filebeat setup(首次接入 ES/Kibana 建议执行)。
- 重启:sudo systemctl restart filebeat。
- 在 Kibana 的 Discover 中选择 filebeat-* 索引模式即可检索系统日志(如 auth、syslog)。
三 自定义日志与常见场景
- 采集 Java 应用日志(多行堆栈友好):
- 建议以多行事件采集,匹配以空格开头的堆栈行,避免单行截断:
- filebeat.inputs:
- type: log
enabled: true
paths:
- /opt/app/logs/*.log
multiline.type: pattern
multiline.pattern: ‘^\s’
multiline.negate: true
multiline.match: after
- 采集 Docker 容器日志(Filebeat 8):
- 启用模块与处理器,自动附加容器元数据(容器名、镜像等):
- filebeat.inputs:
- type: container
containers.ids: [‘*’]
- processors:
- output.elasticsearch.hosts: [“http://localhost:9200”]
- 重启服务后,在 Kibana 按容器维度检索与分析。
四 解析与时间戳校正
- 使用 Modules 可获得开箱即用的解析(如 system、nginx 等),减少手写 Grok 的工作量。
- 将日志中的“事件时间”作为 @timestamp(而非采集时间)的方法:
- 方案 A:使用 Elasticsearch Ingest Pipeline 解析时间字段并写入 @timestamp(适合直连 ES 的场景)。
- 方案 B:在 Logstash 中用 Grok/Date 插件解析后写入 @timestamp(适合需要复杂处理的场景)。
五 运维与排错要点
- 配置与连通性:
- 测试配置:sudo filebeat test config;测试输出:sudo filebeat test output。
- 日志与调试:
- 实时查看服务日志:sudo journalctl -u filebeat -f。
- 提高日志级别(调试用):在 filebeat.yml 中设置 logging.level: debug,然后重启服务。
- 常见问题速查:
- 配置路径错误:确认 /etc/filebeat/filebeat.yml 是否存在且语法正确。
- 权限问题:确保 Filebeat 对日志文件有读取权限(如 /var/log/ 下的系统日志)。
- 输出目标冲突:Filebeat 同一时间只能配置一种输出(Elasticsearch 或 Logstash 等)。