排查故障时经常要回答一个问题:这台机器到底在跟谁说话?架构图里写的依赖,和线上此刻真实存在的依赖,常常不是一回事——服务下线了图没删,新加的调用没人补图,容器漂移之后更对不上。于是只能登上主机,一个个看连接。
ServiceMap(Beta) 换了个做法:不依赖任何手工维护的图,直接用 monit-agent 通过 eBPF 观测到的真实网络连接,自动构建主机、进程、容器与工作负载之间的依赖拓扑。它展示的是此刻实际在通信的对象,而不是文档里应该通信的对象。
把「一次连接」变成「一条服务依赖」
Agent 观测到的原始事实是「某个进程连了某个 ip:port」。ServiceMap 会把这个目标端点匹配到同一网络作用域内的已知监听者,从而还原出服务级依赖,并标注可信程度:唯一匹配的记为已确认;匹配到多个可能对端的记为候选,需要你结合上下文判断;匹配不到任何监听者的记为未解析,默认不进画布,避免外部地址和短暂连接淹没真实依赖。
画布上可以按解析状态筛选、调整上下游跳数、双击任意节点进入聚焦模式只看它的邻居。点开节点或依赖,右侧面板会给出实体身份、可执行文件、容器与工作负载、目标端点、解析原因、候选数量与置信度等字段——判断一条依赖能不能信,看的就是这些。
未解析的连接不会被藏起来
匹配不到对端的端点会按原因分组收进独立面板,支持按端点或来源服务过滤,也可以一键导出 CSV 拿去线下核对。你还可以从这里「定位来源」,回到画布上高亮出是谁发起了这条连接。
先告诉你这张图可不可信
拓扑来自近期观测窗口内的证据,不是实时快照,也不保证完整。所以查询信息里会明确给出采集模式、证据新鲜度、监听清单与 Kubernetes 元数据的富化状态,以及本次查询是否触发了截断。新鲜度不是 fresh、或者出现截断提示,就说明这张图不能当作完整实时的依赖关系直接下结论——把判断依据摆出来,比给一张看起来很确定的图更有用。
开始使用
前往 Flashduty 控制台 → 监控告警 → 监控对象,在主机行点击 拓扑,或用工具栏的 ServiceMap 主机 浏览全部已上报主机。
ServiceMap 目前处于 Beta 阶段,功能与界面可能继续调整;它依赖 monit-agent 的 eBPF 观测能力,Agent 版本过低、运行环境不支持或未启用时不会有拓扑数据。
更多介绍请参考产品文档。