Beats 是 Elastic Stack 中的数据采集器,用于从各种来源(日志、指标、网络数据等)轻量级收集数据,而 Elasticsearch 是搜索和分析引擎,负责存储、索引和快速检索数据。二者结合可搭建强大的数据分析管道(如 ELK Stack)。以下是核心结合方式和工作流程:
核心结合方式
直接输出到 Elasticsearch
Beats 配置中指定 Elasticsearch 集群地址和认证信息,数据直接写入 ES:output.elasticsearch: hosts: ["https://es-node1:9200", "https://es-node2:9200"] username: "beats_writer" password: "your_password" ssl.enabled: true
通过 Logstash 中转(推荐复杂场景)
若需数据过滤、富化或缓冲,可先发到 Logstash 处理再写入 ES:output.logstash: hosts: ["logstash-host:5044"]
Logstash 配置示例(过滤后输出到 ES):
input { beats { port => 5044 } } filter { grok { match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:level} %{GREEDYDATA:message}" } } } output { elasticsearch { hosts => ["es-host:9200"] } }
结合 Kibana 可视化
数据进入 Elasticsearch 后,通过 Kibana 创建仪表板(如使用 Filebeat 的预建看板分析 Nginx 日志)。
关键配置项
组件 | 配置重点 |
---|---|
Beats | - 启用模块(filebeat modules enable nginx )- 配置输入(日志路径、类型) - 设置 ES/Logstash 输出 |
Elasticsearch | - 创建索引生命周期策略(ILM) - 设置用户权限(避免使用 elastic 超级用户)- 配置 TLS 加密通信 |
Kibana | - 导入 Beats 预置仪表板(filebeat setup --dashboards ) |
典型工作流
最佳实践
安全加固
- 使用 TLS 加密 Beats → ES/Logstash 通信
- 通过 Elasticsearch API 密钥或角色限权(如:
beats_writer
角色仅拥有create_index
和manage
权限)
性能优化
- Bulk 写入:调整
bulk_max_size
(默认 50 事件)提高吞吐 - ILM 管理:自动滚动旧索引到热/冷层,删除过期数据
- Beats 轻量化:避免在 Beats 端做复杂处理(交给 Logstash/ES Ingest Pipeline)
- Bulk 写入:调整
高可用
output.elasticsearch: hosts: ["es-node1:9200", "es-node2:9200", "es-node3:9200"] # 多节点集群 loadbalance: true # 负载均衡
常见场景示例
- Nginx 访问日志分析
启用 Filebeat Nginx 模块 → 自动解析日志字段 → Kibana 查看流量/状态码仪表板。 - 服务器监控
Metricbeat 收集 CPU/内存 → ES 存储 → Kibana 的 Metrics 应用生成实时监控图。 - 安全审计
Auditbeat 跟踪系统调用 → 结合 Elastic SIEM 检测异常行为。
故障排查
- 检查 Beats 状态
./filebeat test output # 测试 ES/Logstash 连接 ./filebeat -e -d "*" # 调试模式查看日志
- 验证 ES 数据
curl -u user:pass 'http://es-host:9200/filebeat-*/_search?pretty'
通过以上步骤,Beats 可高效地将数据输入 Elasticsearch,构建端到端的实时数据分析系统。根据数据量和复杂度选择直连 ES 或 Logstash 中转方案,并始终关注安全与性能配置。