Filebeat在CentOS上的典型落地场景
- 小型团队或日志量在G级/日以内,直接采用Filebeat → Elasticsearch → Kibana,快速落地、资源占用低,适合日常问题排查与可视化。
- 中大型集群或需要解耦与缓冲,采用Filebeat → Kafka → Logstash → Elasticsearch → Kibana,便于横向扩展、削峰填谷与统一处理。
- 容器化或混合部署,使用Docker 运行 Filebeat,挂载日志目录与配置,快速接入现有容器与主机日志。
以上三种做法在CentOS 7/8环境中均已被广泛实践,可按规模与复杂度选择其一或组合演进。
案例一 轻量直传 Elasticsearch 的可视化方案
- 适用场景:日志规模不大、无需复杂解析,期望分钟级搭建可视化平台。
- 核心配置 filebeat.yml(示例):
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/*.log
ignore_older: 72h
fields:
type: systemlog
fields_under_root: true
output.elasticsearch:
hosts: [“es-host:9200”]
index: “system-logs-%{+yyyy.MM.dd}”
- 启动与验证:
sudo systemctl start filebeat && sudo systemctl enable filebeat
sudo systemctl status filebeat
在 Kibana 创建索引模式匹配system-logs-*,进入 Discover 实时查看。
- 说明:该方案依赖 Filebeat 7.x 的默认索引生命周期与 Kibana 索引模式机制,适合“开箱即用”的可视化与检索。
案例二 高可用管道 Filebeat → Kafka → Logstash → ES + 钉钉告警
- 适用场景:多业务线、日志量大、需解耦生产与消费、统一治理与告警。
- Filebeat 采集与投递至 Kafka(示例):
filebeat.inputs:
- type: log
paths:
- /var/log/messages
- /var/log/secure
fields:
log_type: system
output.kafka:
hosts: [“kafka1:9092”,“kafka2:9092”,“kafka3:9092”]
topic: “topic-syslogs”
partition.round_robin:
reachable_only: false
required_acks: 0
compression: gzip
max_message_bytes: 1000000
- Logstash 消费 Kafka 并写入 ES(示例):
input {
kafka {
group_id => “topic-log”
topics_pattern => “topic-.*”
decorate_events => true
bootstrap_servers => “kafka1:9092,kafka2:9092,kafka3:9092”
consumer_threads => 10
codec => “json”
}
}
filter {
mutate {
split => { “[@metadata][kafka][topic]” => “-” }
add_field => { “topic” => “%{[@metadata][kafka][topic][1]}” }
}
}
output {
elasticsearch {
hosts => [“es1:9200”,“es2:9200”,“es3:9200”]
user => “elastic”
password => “YourStrongP@ss”
index => “%{topic}-%{+YYYY.MM.dd}”
}
}
- 告警:在 ES 上配置ElastAlert规则,结合钉钉 Webhook实现如“Nginx 5xx 突增”“/var/log/secure 失败登录”等告警。
- 说明:该链路具备良好的水平扩展能力与缓冲能力,适合生产级集中式日志平台。
案例三 Docker 化部署 Filebeat 采集应用日志
- 适用场景:应用已容器化或希望以最小侵入方式接入日志。
- 运行示例(挂载主机日志与配置):
docker run -d --name filebeat
-v /log/:/home/log
-v /home/filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml
elastic/filebeat:7.5.0
- 配置要点(filebeat.yml 片段):
filebeat.inputs:
- type: log
paths:
- /home/log/app.info.log
fields:
source: app.info.log
log_from: app
- type: log
paths:
- /home/log/app.error.log
fields:
source: app.error.log
log_from: app
output.elasticsearch:
hosts: [“http://es:9200”]
indices:
- index: “%{[fields.log_from]}-info-%{+yyyy.MM.dd}” when.contains: { fields: { source: “app.info.log” } }
- index: “%{[fields.log_from]}-error-%{+yyyy.MM.dd}” when.contains: { fields: { source: “app.error.log” } }
setup.kibana:
host: “http://kibana:5601”
- 说明:容器与主机日志统一采集,按字段分流索引,便于权限隔离与成本控制。
排错与最佳实践清单
- 权限与路径:确保 Filebeat 对日志路径(如**/var/log/**)具备读取权限;遇到“读取无权限”时,优先检查运行用户与文件 ACL。
- 版本匹配:Filebeat 与 Elasticsearch/Kibana 版本尽量保持一致,避免协议与模板不兼容(尤其在 Docker 化场景)。
- 时间与索引:统一时区与时间格式,按天创建索引便于滚动与清理;Kibana 索引模式需与实际索引模板一致。
- 资源与背压:合理设置ignore_older、close_inactive、clean_inactive等参数,避免文件句柄泄漏与内存膨胀;Kafka 消费者线程与批量大小结合吞吐调优。
- 可视化与告警:先在 Kibana 验证字段解析与索引覆盖,再上线 ElastAlert/自定义告警,减少误报。
以上要点可显著提升稳定性与可维护性,并已在多套 CentOS 环境中验证有效。