Metricbeat发送数据到Elastic Cloud时新增字段实现Kibana集群筛选问询
实现方案
方案1:Metricbeat配置层面注入集群唯一标识(最推荐)
该方案改造成本最低,后续维护也最简单,适配绝大多数场景:
- 修改Metricbeat的DaemonSet配置,在
fields配置项中添加自定义的集群标识字段,参考配置如下:metricbeat.config: fields: cluster_name: "生产集群-01" # 每个集群部署时替换为对应集群的唯一名称 fields_under_root: true # 可选配置,开启后字段会放到文档根层级,无需加fields前缀,筛选更方便 - 每个集群部署Metricbeat时,将上述配置里的
cluster_name值替换为对应集群的唯一标识即可,其余采集配置无需调整,后续所有采集到的日志、指标都会自动携带该字段写入Elasticsearch索引。 - Kibana侧直接选
cluster_name字段作为下拉选择框的数据源,就能实现切换集群筛选对应数据,原有看板的所有可视化组件无需修改,全局筛选会自动生效。
方案2:Ingest Pipeline侧注入字段(适合不方便修改Metricbeat配置的场景)
如果已经大规模部署了Metricbeat不方便逐集群改配置,可以通过Elasticsearch的Ingest Pipeline在数据写入时自动打集群标识:
- 在Elasticsearch中创建Ingest Pipeline,通过
set处理器结合判断规则给不同集群的文档添加标识,示例配置如下:
可以根据实际场景调整判断规则,比如用{ "processors": [ { "set": { "field": "cluster_name", "value": "生产集群-01", "if": "ctx.host?.ip != null && ctx.host.ip.startsWith('192.168.1.')" } }, { "set": { "field": "cluster_name", "value": "测试集群-01", "if": "ctx.host?.ip != null && ctx.host.ip.startsWith('192.168.2.')" } } ] }agent.hostname前缀、kubernetes.node.name规则来区分集群。 - 在Metricbeat的输出配置中指定使用该Pipeline,或者直接将Pipeline配置到对应索引模板的默认Pipeline上,所有写入目标索引的文档都会自动被处理添加字段。
- Kibana侧的配置和方案1完全一致,绑定
cluster_name字段作为下拉筛选源即可。
注意事项
- 如果没有开启
fields_under_root,自定义字段的完整路径是fields.cluster_name,Kibana配置筛选时要选对应层级的字段。 - 建议提前在索引模板中把
cluster_name字段配置为keyword类型,避免text类型的分词问题,确保下拉选项可以正常获取所有唯一集群值。
内容的提问来源于stack exchange,提问作者sidharth vijayakumar
相关产品推荐
相关产品推荐

