在 CentOS 上使用 Filebeat 进行日志分析
一 架构与准备
- 组件分工:Filebeat 负责采集与轻量处理日志,Elasticsearch 负责存储与检索,Kibana 负责可视化与交互分析。
- 环境要求:确保 CentOS 可访问 Elasticsearch 与 Kibana(同机或网络可达),开放端口 9200/9300(ES)与 5601(Kibana)。
- 安全建议:生产环境启用 TLS/认证 与最小权限;本文示例为本地或受信网络演示,便于快速上手。
二 安装与配置 Filebeat
- 安装方式(二选一)
- YUM 安装(推荐)
- 导入 GPG 并添加仓库:
- sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
- sudo tee /etc/yum.repos.d/elasticsearch.repo <<EOF
[elasticsearch-7.x]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
EOF
- 安装:sudo yum install filebeat -y
- RPM 安装:sudo rpm -ivh filebeat--x86_64.rpm
- 最小可用配置(/etc/filebeat/filebeat.yml)
- 采集系统日志并输出到本地 Elasticsearch:
- filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/*.log
- /var/log/messages
fields:
type: systemlog
fields_under_root: true
exclude_lines: [“^DBG”]
exclude_files: [“.gz”]
- output.elasticsearch:
- hosts: [“localhost:9200”]
index: “system-logs-%{+yyyy.MM.dd}”
- 校验与启动
- 校验配置:sudo filebeat test config
- 启动与自启:sudo systemctl start filebeat && sudo systemctl enable filebeat
- 查看服务状态:sudo systemctl status filebeat
- 实时查看 Filebeat 日志:sudo journalctl -u filebeat -f
- 验证 ES 是否收到数据:curl -X GET “localhost:9200/_cat/indices?v”(应见到以 system-logs- 或 filebeat- 开头的索引)
三 解析与模块增强
- 使用模块快速解析常见应用日志(以 Nginx 为例)
- 启用模块:sudo filebeat modules enable nginx
- 导入 Nginx 仪表盘:在 Kibana 中进入 Dashboard,打开 [Filebeat Nginx] Overview ECS 仪表盘查看指标与样例分析
- 使用处理器进行字段提取与清洗
- JSON 日志解析(将 JSON 字符串展开为字段)
- processors:
- decode_json_fields:
fields: [“message”]
target: “”
overwrite_keys: true
- 键值/分隔符解析(dissect)
- processors:
- dissect:
tokenizer: “%{timestamp} %{level} %{message}”
field: “message”
target_prefix: “”
- 字段管理(添加/删除/重命名)
- processors:
- add_fields:
fields:
env: “prod”
- drop_fields:
fields: [“agent.ephemeral_id”, “input.type”]
- 常用输入与处理器组合示例
- 多路径采集 + 类型标记 + 排除调试行
- filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/*.log
- /var/log/messages
fields:
type: systemlog
fields_under_root: true
exclude_lines: [“^DBG”]
exclude_files: [“.gz”]
- processors:
- add_fields:
fields:
host_type: “centos”
- 输出到 Elasticsearch(按日索引)
- output.elasticsearch:
- hosts: [“elasticsearch-host:9200”]
index: “system-logs-%{+yyyy.MM.dd}”
- 如需更强处理能力,可接入 Logstash 进行复杂解析与聚合后再写入 ES
四 在 Kibana 中分析与告警
- 创建索引模式
- 访问 http://<kibana_host>:5601,进入 Management → Index Patterns,创建匹配 system-logs-* 或 filebeat-* 的模式,设置时间字段为 @timestamp
- 日志检索与可视化
- 在 Discover 中按时间筛选、按字段(如 host.name、log.level、message)构建查询
- 在 Dashboard 中创建可视化图表(柱状/折线/饼图),组合为系统/应用监控大盘
- 告警与监控
- 在 Kibana Alerting & Actions 中创建规则(如:ERROR 级别日志 5 分钟内超过阈值、特定关键字出现)
- 可结合 Elasticsearch Watcher(7.x)或 Kibana 告警 实现邮件/钉钉/企业微信通知
- 定期在 Stack Monitoring 查看 Filebeat/ES/Kibana 资源与健康状态
五 运维与安全建议
- 日志轮转与保留
- 使用 logrotate 管理本地日志轮转;在 Elasticsearch 侧通过 Index Lifecycle Management(ILM) 设置热/温/冷/删除阶段,控制存储成本
- 性能与稳定性
- 适度调整 bulk_max_size、worker 数量与 queue.spool 等参数;避免采集过多无关文件
- 安全加固
- 启用 TLS 加密与 API/角色权限 控制;限制 Filebeat 仅能读取目标日志目录
- 版本与升级
- 统一 Elastic Stack 版本,变更前在测试环境验证;保留回滚方案
- 故障排查
- 使用 filebeat test config/test output 校验配置与输出连通性;通过 journalctl 与 Kibana 日志定位问题