作者:来自 Elastic C. Pierce

Kibana 的 Network Topology plugin 提供了一个可直接部署的 Logstash pipeline、一个结构化 schema,以及一个拓扑视图,用于展示 "哪些东西与哪些东西相连接"。
SNMP 采集不应该像一次 "额外的任务"。
将 SNMP 数据接入 Elasticsearch 可以解锁对网络的丰富可观测性 ------ 接口利用率、路由健康状态、二层转发情况等等。实现路径包含一些常见步骤:选择要遍历的 MIB、将 OID 映射为人类可读的字段名、配置 SNMP v2c 或 v3 认证、适配厂商自定义 MIB 扩展,并调优 pipeline 以优雅处理大规模设备库中的设备超时问题。有了一个稳定模板后,原本需要定制开发的 Logstash 项目,就变成了一个可复用、可共享的配置,团队中的任何工程师都可以接手并扩展。
插件 包含一个 Logstash pipeline template,可以开箱即用处理常见场景。它会按每个目标设备、在可配置的 poll interval 下遍历 IF-MIB(接口计数与状态)、IP-MIB(ARP 表与 IP 地址分配)、BRIDGE-MIB(MAC 地址转发表)、BGP4-MIB(BGP 对等会话)以及 OSPF-MIB(OSPF 邻居关系)。
你只需要添加设备列表和认证信息,启动 Logstash,数据就会开始流入 Elasticsearch。
该模板还处理了一些常见的运维问题:poll timeout、设备不支持某些 MIB 时的 OID 缺失分支,以及在大规模设备列表上的批量遍历调度。
在 Elasticsearch 中结构化 SNMP 数据:schema 设计
当 SNMP 数据进入 Elasticsearch 后,下一个问题就是结构化。像接口计数器这样的数据 ifInOctets(和)ifOperStatus 在 ECS(Elastic Common Schema)中有相对合理的映射,它们属于 host-level metrics,并且可以直接对应到 `` 字段。但网络工程师真正用于排障的数据本质上是 relational 的,而这个 plugin 提供了一种查看这些关系的方法。
一个 BGP peer session 包含 state、remote AS number、uptime 和 update count。一个 OSPF adjacency 包含 neighbor router ID、area、priority,以及 state machine position。一个 MAC table entry 记录某个 MAC address 是在哪个物理 switch port 上被学习到的。这些都没有直接的 ECS field 定义,如果强行塞进通用的 event.* 或 observer.* 字段,会丢失使这些数据有意义的语义信息 。
该 plugin 采用一种有明确主张的设计方式 :在适用时使用 ECS,在不适用时通过清晰的 namespace 进行扩展。interface data 映射到 ECS-aligned fields;routing protocol 和 L2 forwarding data 则进入专门设计的 namespaces(bgp_peer.*, ospf_neighbor.*, arp.*, mac_table.*),字段命名直接贴合运维人员的认知方式。如果你知道 router CLI 中 bgpPeerState 的含义,那么 Elasticsearch 中的 bgp_peer.state 会非常直观。如果你已经在使用自定义 schema 来采集 SNMP 数据,那么该 plugin 的 templates 和 ingest pipeline 将是补充而不是替代------这些新字段是 additive 的,因此可以按节奏逐步采用。
| 数据类型关键字段ECS 命名空间 | ||
|---|---|---|
| BGP Peer Session | State、Remote AS、Uptime、Update Count | `` |
| OSPF Adjacency | Neighbor Router ID、Area、Priority、State | `` |
| MAC Table Entry | Switch Port、Learned MAC Address | `` |
| ARP Entry | IP-to-MAC Mapping | `` |
一个 ingest pipeline(snmp-device-enrichment)在 index time 负责 classification。它解析每台设备的 sysDescr 字符串,用于生成标准化的 device.type (router、switch、firewall、access point)以及 device.vendor,从而让所有 downstream consumer(dashboards、ES|QL queries、alerting rules、topology view)都可以使用一致的 device metadata,而无需自定义 parsing。该 pipeline 默认支持常见 vendor,同时也支持在更复杂环境中扩展。
最终得到的结果是:SNMP 数据可以像 Elasticsearch 中任何结构化数据一样被查询。
"显示所有不在 Established 状态的 BGP session"变成一个 filter,而不是 regex。
"哪些 Cisco switches 上存在 admin-up 但 oper-down 的接口" 变成一个 KQL query,而不是脚本。
在 Kibana 中可视化 SNMP 网络拓扑
Dashboards 擅长回答 "数据是多少?"而拓扑视图则回答一个互补问题:"它们之间是如何连接的?"网络工程师是以 topology 的方式思考问题的:上游与下游关系、路径冗余,以及链路故障的 blast radius。一个空间化的 graph-based 视图可以把这种心智模型直接带入 Kibana,并与运维人员已经依赖的 charts 和 data tables 并列使用。
该 plugin 在 Kibana 的 Observability navigation 中新增了一个交互式拓扑图。它从 Elasticsearch 中读取结构化 SNMP 数据,通过 ARP、MAC table、BGP 和 OSPF 关系构建 adjacency graph,并以 force-directed layout 的形式渲染出来,支持缩放、拖拽和重新布局。
其中 nodes 表示设备,edges 表示已发现的关系。点击任意设备都会打开一个 flyout,展示其 interface table、ARP neighbors 以及 routing protocol sessions。

如何在 Kibana 中设置 SNMP 网络拓扑监控?

该插件几乎可以开箱即用,只有少量 assets 需要安装。具体设置如下:
-
在 self-managed Kibana instance 上安装 plugin zip(bin/kibana-plugin install file:///path/to/networkTopology-.zip)。
-
应用 index templates 和 ingest pipeline。点击 plugin 的 Setup tab 中的模板安装流程,几个按钮操作即可完成,schema 就会就绪。
-
部署 Logstash pipeline 。将你的 device targets、authentication details 或其他配置添加到内置模板中并启动它。如果你使用 Logstash Centralized Pipeline Management,可以直接从 Kibana 推送,无需 SSH。
数据会在下一次 poll cycle 进入 Elasticsearch,ingest pipeline 会对其进行分类和 enrich,然后 topology view 就会被填充。从开始到结束只需要几分钟,而不是数小时或数天的试错。
如果团队想在连接真实基础设施之前评估插件,还提供了 sample data generator:可以启动 Docker development environment 来探索完整功能集,并使用一个真实的 multi-site network 进行体验。