在 CentOS 上,Filebeat 本身不直接采集系统指标(CPU、内存、磁盘、网络等),常见做法是通过脚本/命令将指标写入日志文件,再由 Filebeat 采集并发送到 Elasticsearch 或 Kafka,最终在 Kibana 或 Grafana 中可视化与告警。
整体架构与前提
- 采集链路:系统命令/脚本 → 日志文件 → Filebeat → Elasticsearch/Kafka → Kibana/Grafana。
- 组件准备:在 CentOS 安装 Filebeat;准备 Elasticsearch/Logstash/Kafka 任一接收端;如需可视化,准备 Kibana/Grafana。
- 建议目录与权限:为指标日志创建专用目录(如 /var/log/sysmon/),并确保 filebeat 用户可读。
方案一 日志文件方式采集系统指标
- 步骤 1 安装 Filebeat
- 使用 YUM 安装并启动服务:
- 安装:sudo yum install -y filebeat
- 启动/自启:sudo systemctl start filebeat && sudo systemctl enable filebeat
- 验证:sudo systemctl status filebeat、journalctl -u filebeat -f
- 步骤 2 生成系统指标日志
- 以 top 为例,将快照追加到日志文件(建议后台运行并做轮转):
- 命令:top -b -d 10 >> /var/log/sysmon/top.log &
- 说明:可按需替换为 vmstat、iostat、sar、netstat 等命令,或编写脚本输出 JSON 便于解析。
- 步骤 3 配置 Filebeat 采集
- 编辑 /etc/filebeat/filebeat.yml,示例:
- 输入:
- filebeat.inputs:
- type: log
enabled: true
paths:
若输出到 ES 且需要索引生命周期管理,可按需设置 ilm
setup.ilm.enabled: false
- 输出(三选一或并存,示例为 ES):
- output.elasticsearch:
- hosts: [“http://<es_host>:9200”]
- 或 output.kafka:
- hosts: [“<kafka_host>:9092”]
topic: “sysmon-metrics”
compression: gzip
- 或 output.logstash:
- hosts: [“<logstash_host>:5044”]
- 步骤 4 启动与验证
- 重启 Filebeat:sudo systemctl restart filebeat
- 在目标端(ES/Kafka/Logstash)查看是否收到数据;在 Kibana 建立索引模式并检索 @timestamp、host、message 等字段。
方案二 输出到 Kafka 并实时处理
- 适用场景:需要流式处理、解耦采集与分析、对接多系统。
- Filebeat 侧配置(示例):
- output.kafka:
- hosts: [“<kafka_broker1>:9092”,“<kafka_broker2>:9092”]
- topic: “sysmon-metrics”
- version: “2.0.0” # 与 Kafka 版本匹配
- compression: gzip
- 下游实时处理(示例架构):
- Kafka → Flink/Spark Streaming → Elasticsearch → Kibana/Grafana,在流处理作业中解析日志行(如 top 的空格分隔或 JSON),计算 CPU%、内存使用、I/O、连接数 等指标并落库。
可视化与告警
- Kibana:
- 创建 Index Pattern(如 filebeat-* 或 sysmon-*),基于 @timestamp 建立 Discover/Lens 图表;使用 Dashboard 构建 CPU、内存、磁盘、网络 概览;通过 Threshold/Metric Threshold 设置告警。
- Grafana(若走 Kafka → Flink → ES):
- 以 Elasticsearch 为数据源,导入或自建 Grafana Dashboard,配置阈值告警并接入通知渠道(如 邮件/钉钉/企业微信/短信)。
性能与安全建议
- 性能与资源
- 限制采集占用:在 filebeat.yml 设置 max_procs: <CPU核数>;合理设置 queue.mem.events / flush.min_events / flush.timeout 以平衡吞吐与延迟;必要时启用 持久化队列(queue.type: persisted) 提升可靠性。
- 日志与文件管理
- 使用 logrotate 对 /var/log/sysmon/*.log 做按日轮转与压缩,避免无限增长;为 Filebeat 配置 ignore_older / clean_inactive 等参数减少无效扫描与注册表膨胀。
- 安全
- 输出到 ES/Kafka 时启用 认证与 TLS;在 Kibana 中基于 角色/权限 控制仪表盘与索引访问;仅开放必要端口与网络路径。