使用 Azure 中的服务映射解决方案

服务映射自动发现 Windows 和 Linux 系统上的应用程序组件,并映射服务之间的通信。 使用服务映射,可将服务器看作提供关键服务的互连系统。 服务映射显示服务器之间的连接、进程、入站和出站连接延迟,以及跨任何已连接 TCP 的体系结构的端口。 只需安装代理,无需任何其他配置。

重要

服务映射将于 2025 年 9 月 30 日停用。 要监视服务器之间的连接、进程、入站和出站连接延迟以及跨任何已连接 TCP 的体系结构的端口,请确保在此日期之前迁移到 Azure Monitor VM 见解

本文介绍如何部署和使用服务映射。 该解决方案的先决条件如下:

注意

如果已部署服务映射,现在还可以在 VM 见解中查看映射,其中包括用于监视 VM 运行状况和性能的其他功能。 若要了解详细信息,请参阅 VM 见解概述。 若要了解服务映射解决方案与 VM 见解映射功能之间的差异,请参阅此常见问题解答

登录 Azure

登录 Azure 门户

启用服务映射

  1. Azure 市场启用服务映射解决方案。 或使用从解决方案库添加监视解决方案中所述的过程。

  2. 在你要从中获取数据的每台计算机上安装适用于 Windows 的 Dependency Agent安装适用于 Linux 的 Dependency Agent。 Dependency Agent 可以监视与直接邻居之间的连接,因此不需要在每台计算机上都具有代理。

  3. 在 Azure 门户中从 Log Analytics 工作区访问服务映射。 在左侧窗格中选择“旧的解决方案”选项。

    显示在工作区中选择“解决方案”选项的屏幕截图。

  4. 在解决方案列表中选择“ServiceMap(workspaceName)”。 在“服务映射”解决方案概述页上,选择“服务映射”摘要磁贴。

    显示“服务映射”摘要磁贴的屏幕截图。

用例:使 IT 进程感知依赖关系

发现

服务映射自动在服务器、进程和第三方服务上生成依赖关系的常见引用映射。 它会发现并映射所有 TCP 依赖项。 它会将意外连接、依赖的远程第三方系统和依赖项标识到网络的传统暗区(例如 Active Directory)。 服务映射会发现托管系统尝试建立的失败网络连接。 此信息可帮助你识别潜在的服务器配置错误、服务中断和网络问题。

事件管理

服务映射显示系统的连接方式以及相互的影响,在查明问题过程中消除各种猜测。 除了识别失败的连接外,它还可以帮助识别配置错误的负载均衡器、关键服务上的意外或多余负载,以及与生产系统通信的开发人员计算机等恶意客户端。 通过将集成的工作流与更改跟踪配合使用,还可以查看后端计算机或服务上的更改事件是否能解释事件的根本原因。

迁移保障

使用服务映射可以有效地计划、加快和验证 Azure 迁移,帮助确保迁移所有内容,不会发生意外中断。 方法:

  • 发现所有需要一起迁移的互相依赖的系统。
  • 评估系统配置和容量。
  • 确定正在运行的系统是否仍为用户提供服务,或者是否适合解除而不是迁移。

移动完成后,可以检查客户端负载和标识,验证测试系统和客户是否正在连接。 如果子网计划和防火墙定义有问题,服务映射中的映射中的失败连接将指向需要连接的系统。

业务连续性

如果你正在使用 Azure Site Recovery 并需要帮助定义应用程序环境的恢复顺序,服务映射可自动显示系统互相依赖的方式。 此信息有助于确保恢复计划可靠。

通过选择关键服务器或组并查看其客户端,可以标识要在该服务器还原并可用后恢复的前端系统。 相反,通过查看关键服务器的后端依赖关系,可以标识要在焦点系统还原之前恢复的系统。

修补程序管理

服务映射通过显示其他哪些团队和服务器依赖于你的服务来增强系统更新评估的使用。 这样,就可以在关闭系统进行修补之前提前通知这些团队。 服务映射还通过显示服务在完成修补和重启后是否可用并已正确连接,来增强修补程序管理。

映射概述

服务映射代理收集有关其安装所在的服务器上所有 TCP 连接进程的信息。 它们还收集有关每个进程的入站和出站连接的详细信息。

从左侧窗格的列表中,可选择具有服务映射代理的计算机或组,在指定时间范围内使其依赖关系可视化。 计算机依赖项映射注重于特定的计算机。 它们显示属于该计算机的直接 TCP 客户端或服务器的所有计算机。 计算机组映射显示服务器集及其依赖项。

显示服务映射概述的屏幕截图。

可在映射中扩展计算机,以在选定时间范围内显示具有有效网络连接的运行中的进程组和进程。 展开具有服务映射代理的远程计算机以显示进程详细信息时,仅显示与焦点计算机通信的进程。

连接到焦点计算机的无代理前端计算机计数显示在它们所连接到的进程左侧。 如果焦点计算机连接到无代理的后端计算机,则服务器端口组中包含后端服务器。 此组还包含与同一端口号的其他连接。

默认情况下,服务映射中的映射显示过去 30 分钟的依赖项信息。 可以使用左上方的时间控件查询最长一小时内的历史时间范围的映射,以查看依赖项在过去的情况。 例如,你可能想要查看它们在发生某个事件期间或发生某项更改之前的情况。 服务映射数据在付费工作区中存储 30 天,在免费工作区中存储 7 天。

状态徽章和边框着色

映射中每个服务器的底部可能会显示状态徽章的列表,用于传递有关服务器的状态信息。 徽章指示其中一个解决方案集成中的服务器有相关信息。

选择徽章会直接转到右侧窗格中的状态详细信息。 当前可用状态徽章包括“警报”、“服务台”、“更改”、“安全性”和“更新”。

根据状态徽章的严重性,计算机节点边框的颜色可以是红色(严重)、黄色(警告)或蓝色(信息)。 该颜色表示任何状态徽章的最严重状态。 灰色边框指示没有状态指示器的节点。

显示状态徽章的屏幕截图。

进程组

进程组将与常用产品或服务关联的进程合并到一个进程组中。 展开计算机节点后,将显示独立的进程以及进程组。 如果进程组中某个进程的入站或出站连接失败,则整个进程组的连接都将显示为失败。

计算机组

使用计算机组可以查看以一组服务器(而不只是一个服务器)为中心的映射。 这样,在一个映射中就能查看某个多层应用程序或服务器群集的所有成员。

用户可选择哪些服务器属于一个组,并选择该组的名称。 然后,可以选择查看该组及其所有进程和连接。 还可以仅查看与该组其他成员直接相关的进程和连接。

显示计算机组的屏幕截图。

创建计算机组

若要创建组,请执行以下操作:

  1. 在“计算机”列表中选择所需的一个或多个计算机,然后选择“添加到组”。

    显示创建组的屏幕截图。

  2. 选择“新建”并为该组指定名称。

    显示为组命名的屏幕截图。

注意

计算机组限制为 10 个服务器。

查看组

创建一些组后,可以查看它们。

  1. 选择“组”选项卡。

    显示“组”选项卡的屏幕截图。

  2. 选择组名称,查看该计算机组的映射。

    显示计算机组映射的屏幕截图。

    属于该组的计算机在映射中以白色框出。

  3. 展开该组以列出构成计算机组的计算机。

    显示计算机组计算机的屏幕截图。

按进程筛选

可以切换映射视图,以显示组中的所有进程和连接,或仅显示与计算机组直接相关的进程和连接。 默认视图显示所有进程。

  1. 选择映射上方的筛选器图标可更改视图。

    显示筛选组的屏幕截图。

  2. 选择“所有进程”可查看包含组中每个计算机上的所有进程和连接的映射。

    显示计算机组“所有进程”选项的屏幕截图。

  3. 若要创建简化视图,请将视图更改为仅显示连接到组的进程。 这样就会缩小映射内容范围,仅显示直接连接到组中其他计算机的进程和连接。

    显示计算机组中已筛选的进程的屏幕截图。

将计算机添加到组

若要将计算机添加到现有组,请选中所需计算机旁边的复选框,然后选择“添加到组”。 然后选择要将计算机添加到的组。

从组中删除计算机

在“组”列表中,展开组名称以列出计算机组中的计算机。 选择要删除的计算机旁边的省略号菜单,然后选择“删除”。

显示从组中删除计算机的屏幕截图。

删除或重命名组

选择“组”列表中组名称旁边的省略号菜单。

显示计算机组菜单的屏幕截图。

角色图标

某些进程在计算机上充当特定角色,例如 Web 服务器、应用程序服务器和数据库。 “服务映射”可批注进程和计算机设备,包含的角色图标有助于以显眼的方式标识进程或服务器扮演的角色。

角色图标 说明
Web 服务器 Web 服务器
应用服务器 应用程序服务器
数据库服务器 数据库服务器
LDAP 服务器 LDAP 服务器
SMB 服务器 SMB 服务器

显示角色图标的屏幕截图。

失败的连接

在服务映射中,失败的连接显示在进程和计算机的映射中。 红色虚线表示相应客户端系统无法访问某个进程或端口。

如果已部署服务映射代理的任何系统正尝试失败的连接,将从该系统报告失败的连接。 服务映射通过观察无法建立连接的 TCP 套接字测量此过程。 出现失败连接可能是因为防火墙、客户端或服务器中的配置错误或远程服务不可用。

显示服务映射的一部分的屏幕截图,其中突出显示了一条红色虚线,指示 backup.pl 进程与端口 4475 之间的连接失败。

了解失败的连接可帮助进行疑难解答、迁移验证、安全分析和了解总体体系结构。 失败的连接有时是无害的,但它们通常直接与某个问题相关。 完成云迁移后,故障转移环境可能突然无法访问,或者两个应用层可能无法相互通信。

客户端组

客户端组是映射上的各个框,表示没有 Dependency Agent 的客户端计算机。 单个客户端组表示单个进程或计算机的客户端。

显示客户端组的屏幕截图。

若要查看客户端组中的服务器 IP 地址,请选择该组。 “客户端组属性”窗格中会列出该组的内容。

显示客户端组属性的屏幕截图。

服务器端口组

服务器端口组是表示服务器(没有 Dependency Agent)上的服务器端口的各个框。 框中包含服务器端口,以及连接到该端口的服务器计数。 展开此框可查看各个服务器和连接。 如果框中仅有一个服务器,则会列出该服务器的名称或 IP 地址。

显示服务器端口组的屏幕截图。

上下文菜单

选择任意服务器右上方的省略号 (...) 可显示该服务器的上下文菜单。

显示服务映射中服务器的“加载服务器映射”和“显示自链接”选项的屏幕截图。

加载服务器映射

选择“加载服务器映射”会转到新映射,其中所选服务器是新的焦点计算机。

选择“显示自链接”会重绘包含任何自链接的服务器节点,这些自链接是表示服务器中的进程的开始和结束的 TCP 连接。 如果显示了自链接,则菜单命令会更改为“隐藏自链接”,以便可以关闭自链接。

计算机摘要

“计算机摘要”窗格包括服务器的操作系统、依赖关系计数以及来自其他解决方案的各种数据的概述。 此类数据包括性能指标、服务台票证、更改跟踪、安全性和更新。

显示“计算机摘要”窗格的屏幕截图。

计算机和进程属性

导航服务映射中的映射时,可以选择计算机和进程以获取有关其属性的其他上下文。 计算机提供有关 DNS 名称、IPv4 地址、CPU 和内存容量、VM 类型、操作系统和版本、上次重启时间及其 OMS 和服务映射代理的 ID 的信息。

显示“计算机属性”窗格的屏幕截图。

可以从有关正在运行的进程的操作系统元数据中收集进程详细信息。 详细信息包括进程名称、进程说明、用户名和域(在 Windows 上)、公司名称、产品名称、产品版本、工作目录、命令行和进程启动时间。

显示“进程属性”窗格的屏幕截图。

“进程摘要”窗格提供有关该进程的连接的其他信息,包括其绑定端口、入站和出站连接以及失败的连接。

显示“进程摘要”窗格的屏幕截图。

警报集成

服务映射与 Azure 警报集成,可显示所选时间范围内所选服务器触发的警报。 如果当前有警报,服务器会显示一个图标,且“计算机警报”窗格会列出警报。

显示“计算机警报”窗格的屏幕截图。

若要使服务映射能够显示相关警报,请创建对特定计算机触发的警报规则。 创建相应的警报:

  • 包含一个用于按计算机分组的子句。 例如“by Computer interval 1 minute”。
  • 根据指标度量值选择警报。

日志事件集成

服务映射与日志搜索集成,可显示所选时间范围内所选服务器的所有可用的日志事件。 可以选择事件计数列表中的任意行,跳转到“日志搜索”并查看单个日志事件。

显示“计算机日志事件”窗格的屏幕截图。

服务台集成

当在 Log Analytics 工作区中启用并配置了这两个解决方案时,服务映射会自动与 IT Service Management Connector 集成。 服务映射中的集成标记为“服务台”。有关详细信息,请参阅使用 IT 服务管理连接器集中管理 ITSM 工作项

“计算机服务台”窗格列出所选时间范围内选定服务器的所有 IT Service Management 事件。 如果当前存在项,服务器会显示一个图标,且“计算机服务台”窗格会列出存在的项。

显示“计算机服务台”窗格的屏幕截图。

若要打开连接的 ITSM 解决方案中的项,请选择“查看工作项”。

若要在日志搜索中查看项的详细信息,请选择“在日志搜索中显示”。 连接指标将写入到 Log Analytics 的两个新表中。

更改跟踪集成

当在 Log Analytics 工作区中启用并配置了这两个解决方案时,服务映射会自动与更改跟踪集成。

“计算机更改跟踪”窗格列出所有更改(最新更改列在顶部),以及一个用于向下钻取到日志搜索以获取更多详细信息的链接。

显示“计算机更改跟踪”窗格的屏幕截图。

下图是在选择“在 Log Analytics 中显示”后可能显示的 ConfigurationChange 事件的详细视图。

显示 ConfigurationChange 事件的屏幕截图。

性能集成

“计算机性能”窗格显示所选服务器的标准性能指标。 指标包括 CPU 利用率、内存利用率、发送和接收的网络字节数,以及发送和接收网络字节数最多的进程的列表。

显示“计算机性能”窗格的屏幕截图。

若要查看性能数据,可能需要启用相应的 Log Analytics 性能计数器。 要启用的计数器:

Windows:

  • Processor(*)\% Processor Time
  • Memory\% Committed Bytes In Use
  • Network Adapter(*)\Bytes Sent/sec
  • Network Adapter(*)\Bytes Received/sec

Linux:

  • Processor(*)\% Processor Time
  • Memory(*)\% Used Memory
  • Network Adapter(*)\Bytes Sent/sec
  • Network Adapter(*)\Bytes Received/sec

安全集成

当在 Log Analytics 工作区中启用并配置了这两个解决方案时,服务映射会自动与安全和审核集成。

“计算机安全”面板显示所选服务器的安全和审核解决方案的数据。 该窗格列出所选时间范围内服务器的所有未解决安全问题的摘要。 选择任意安全问题可向下钻取到日志搜索来了解有关安全问题的详细信息。

显示“计算机安全”窗格的屏幕截图。

更新集成

当在 Log Analytics 工作区中启用并配置了这两个解决方案时,服务映射会自动与更新管理集成。

“计算机更新”面板显示所选服务器的更新管理解决方案的数据。 该窗格列出所选时间范围内服务器缺少的所有更新的摘要。

显示“计算机更新”窗格的屏幕截图。

Log Analytics 记录

服务映射的计算机和进程清单数据可在 Log Analytics 中搜索。 此数据可应用于包括迁移计划、容量分析、发现和按需性能故障排除在内的方案。

除了在进程或计算机启动或载入服务映射时生成的记录外,还针对每个唯一计算机和进程每小时生成一条记录。 这些记录的属性在下表中列出。

ServiceMapComputer_CL 事件中的字段和值映射到 ServiceMap Azure 资源管理器 API 中计算机资源的字段。 ServiceMapProcess_CL 事件中的字段和值映射到 ServiceMap Azure 资源管理器 API 中进程资源的字段。 ResourceName_s 字段与相应的 Azure 资源管理器资源中的名称字段匹配。

注意

随着服务映射功能增加,这些字段可能会更改。

可以使用内部生成的属性来标识唯一的进程和计算机:

  • 计算机:使用 ResourceId 或 ResourceName_s 唯一标识 Log Analytics 工作区中的计算机。
  • 进程:使用 ResourceId 唯一标识 Log Analytics 工作区中的进程。 ResourceName_s 在运行该进程的计算机 (MachineResourceName_s) 的上下文中唯一。

由于在指定的时间范围内,指定的进程和计算机可能存在多条记录,因此针对同一个计算机或进程的查询可能返回多条记录。 若要仅添加最新记录,请在查询中添加 "| dedup ResourceId"

连接

连接指标写入到 Log Analytics 中名为 VMConnection 的新表中。 此表提供有关计算机的入站和出站连接的信息。 还可以通过 API 公开连接指标。使用这些 API 可以获取某个时间范围内的特定指标。

在侦听套接字上接受后生成的 TCP 连接是入站连接。 通过连接到给定 IP 和端口创建的连接是出站连接。 连接方向由 Direction 属性表示,可将其设置为 inboundoutbound

这些表中的记录是基于依赖项代理报告的数据生成的。 每条记录表示一分钟时间间隔内观测到的结果。 TimeGenerated 属性表示时间间隔的开始时间。 每条记录包含用于识别相应实体(即连接或端口)以及与该实体关联的指标的信息。 目前,只会报告使用“基于 IPv4 的 TCP”发生的网络活动。

为了控制成本和复杂性,连接记录不会显示单个物理网络连接。 多个物理网络连接分组到一个逻辑连接中,然后在相应的表中反映该逻辑连接。 因此,VMConnection 表中的记录表示逻辑分组,而不是观测到的单个物理连接。

在给定的一分钟时间间隔内对以下属性共用相同值的物理网络连接聚合到 VMConnection 中的一个逻辑记录内。

属性 说明
Direction 连接方向。 值为 inbound 或 outbound。
Machine 计算机 FQDN。
Process 进程或进程组的标识,状态为正在启动或接受连接。
SourceIp 源的 IP 地址。
DestinationIp 目标的 IP 地址。
DestinationPort 目标的端口号。
Protocol 用于连接的协议。 值为 tcp。

为了帮助你权衡分组造成的影响,以下记录属性中提供了有关分组的物理连接数的信息。

属性 说明
LinksEstablished 在报告时间范围内建立的物理网络连接数。
LinksTerminated 在报告时间范围内终止的物理网络连接数。
LinksFailed 在报告时间范围内失败的物理网络连接数 此信息目前仅适用于出站连接。
LinksLive 在报告时间范围结束时打开的物理网络连接数。

指标

除了连接计数指标以外,以下记录属性中还包含了有关在特定逻辑连接或网络端口上发送和接收的数据量的信息。

属性 说明
BytesSent 在报告时间范围内发送的字节总数。
BytesReceived 在报告时间范围内接收的字节总数。
Responses 在报告时间范围内观测到的响应数。
ResponseTimeMax 在报告时间范围内观测到的最大响应时间(毫秒)。 如果无值,则该属性为空。
ResponseTimeMin 在报告时间范围内观测到的最小响应时间(毫秒)。 如果无值,则该属性为空。
ResponseTimeSum 在报告时间范围内观测到的所有响应时间之和(毫秒)。 如果无值,则该属性为空

报告的第三种数据类型是响应时间。 调用方花费了多长时间来等待通过连接发送请求进行处理,并收到远程终结点的响应?

报告的响应时间是底层应用程序协议的真实响应时间的估算值。 它是基于物理网络连接的源与目标端之间的数据流观测结果,使用试探法计算出来的。

从概念上讲,响应时间是请求的最后一个字节离开发送方的时间,与发送方收到响应的最后一个字节的时间之差。 这两个时间戳用于描述特定物理连接上的请求和响应事件。 两者的差表示单个请求的响应时间。

在此功能的第一个版本中,我们的算法是求近似值,根据特定网络连接所用的实际应用程序协议,其成功度各不相同。 例如,当前做法非常适合基于请求-响应的协议(例如 HTTP/HTTPS)。 但这种做法不适合单向协议或基于消息队列的协议。

考虑的几个要点:

  • 如果进程在相同的 IP 地址上接受连接,但通过多个网络接口接受连接,则为每个接口单独报告一条记录。
  • 带通配符 IP 的记录不包含任何活动。 包含此类记录的目的是表示在计算机上为入站流量开放了某个端口这一事实。
  • 为了降低详细程度和数据量,存在带有特定 IP 地址的匹配记录(适用于相同的进程、端口和协议)时,将省略带通配符 IP 的记录。 省略了通配符 IP 记录后,具有特定 IP 地址的 IsWildcardBind 记录属性将设置为 True.。此设置表示已通过报告计算机的每个接口公开了该端口。
  • 仅在特定接口上绑定的端口的 IsWildcardBind 设置为 False

命名和分类

为提供方便,RemoteIp 属性中包含了连接的远程端的 IP 地址。 对于入站连接,RemoteIpSourceIp 相同;对于出站连接,它与 DestinationIp 相同。 RemoteDnsCanonicalNames 属性表示计算机针对 RemoteIp 报告的 DNS 规范名称。 RemoteDnsQuestionsRemoteClassification 属性保留供将来使用。

地理位置

VMConnection 还包含以下记录属性中每个连接记录的远程端的地理位置信息。

属性 说明
RemoteCountry 托管 RemoteIp 的国家/地区的名称。 例如“美国”。
RemoteLatitude 地理位置的纬度。 例如“47.68”。
RemoteLongitude 地理位置的经度。 例如“-122.12”。

恶意 IP

将会根据一组 IP 检查 VMConnection 表中的每个 RemoteIp 属性,以识别已知的恶意活动。 如果 RemoteIp 识别为恶意,则会在以下记录属性中填充以下属性(如果未将该 IP 视为恶意,则这些属性为空)。

属性 说明
MaliciousIp RemoteIp 地址。
IndicatorThreadType 检测到的威胁标志是以下值之一:Botnet、C2、CryptoMining、Darknet、DDos、MaliciousUrl、Malware、Phishing、Proxy、PUA 或 Watchlist。
Description 观察到的威胁说明。
TLPLevel 交通信号灯协议 (TLP) 级别是以下定义值之一:White、Green、Amber、Red。
Confidence 值介于 0 和 100 之间。
Severity 值介于 0 和 5 之间,其中 5 表示最严重,0 表示最不严重。 默认值为 3。
FirstReportedDateTime 提供程序第一次报告指标。
LastReportedDateTime Interflow 最后一次看到指标。
IsActive 使用值 True 或 False 指明是否停用标志。
ReportReferenceLink 与给定可观测结果相关的报告的链接。
AdditionalInformation 提供观测到的威胁的其他信息(如果适用)。

ServiceMapComputer_CL 记录

类型为 ServiceMapComputer_CL 的记录包含具有服务映射代理的服务器的清单数据。 这些记录的属性在下表中列出。

属性 说明
Type ServiceMapComputer_CL
SourceSystem OpsManager
ResourceId 工作区中计算机的唯一标识符
ResourceName_s 工作区中计算机的唯一标识符
ComputerName_s 计算机 FQDN
Ipv4Addresses_s 服务器的 IPv4 地址列表
Ipv6Addresses_s 服务器的 IPv6 地址列表
DnsNames_s DNS 名称的数组
OperatingSystemFamily_s Windows 或 Linux
OperatingSystemFullName_s 操作系统的全名
Bitness_s 计算机的位数(32 位或 64 位)
PhysicalMemory_d 物理内存(以 MB 为单位)
Cpus_d CPU 数
CpuSpeed_d CPU 速度(以 MHz 为单位)
VirtualizationState_s 未知物理虚拟虚拟机监控程序
VirtualMachineType_s hypervvmware 等等
VirtualMachineNativeMachineId_g 由虚拟机监控程序分配的 VM ID
VirtualMachineName_s VM 的名称
BootTime_t 引导时间

ServiceMapProcess_CL 类型记录

类型为 ServiceMapProcess_CL 的记录包含具有服务映射代理的服务器上 TCP 连接进程的清单数据。 这些记录的属性在下表中列出。

属性 说明
Type ServiceMapProcess_CL
SourceSystem OpsManager
ResourceId 工作区中进程的唯一标识符
ResourceName_s 进程在其运行所在计算机中的唯一标识符
MachineResourceName_s 计算机的资源名称
ExecutableName_s 进程可执行文件的名称
StartTime_t 进程池启动时间
FirstPid_d 进程池中的第一个 PID
Description_s 进程说明
CompanyName_s 公司名称
InternalName_s 内部名称
ProductName_s 产品名称
ProductVersion_s 产品版本
FileVersion_s 文件版本
CommandLine_s 命令行
ExecutablePath _s 可执行文件的路径
WorkingDirectory_s 工作目录
UserName 执行进程所用的帐户
UserDomain 执行进程所在的域

示例日志搜索

本部分列出了日志搜索示例。

列出所有已知计算机

ServiceMapComputer_CL | summarize arg_max(TimeGenerated, *) by ResourceId

列出所有托管计算机的物理内存容量

ServiceMapComputer_CL | summarize arg_max(TimeGenerated, *) by ResourceId | project PhysicalMemory_d, ComputerName_s

列出计算机名称、DNS、IP 和 OS

ServiceMapComputer_CL | summarize arg_max(TimeGenerated, *) by ResourceId | project ComputerName_s, OperatingSystemFullName_s, DnsNames_s, Ipv4Addresses_s

在命令行中查找带有“sql”的所有进程

ServiceMapProcess_CL | where CommandLine_s contains_cs "sql" | summarize arg_max(TimeGenerated, *) by ResourceId

按资源名称查找计算机(最新记录)

search in (ServiceMapComputer_CL) "m-4b9c93f9-bc37-46df-b43c-899ba829e07b" | summarize arg_max(TimeGenerated, *) by ResourceId

按 IP 地址查找计算机(最新记录)

search in (ServiceMapComputer_CL) "10.229.243.232" | summarize arg_max(TimeGenerated, *) by ResourceId

列出指定计算机上的所有已知进程

ServiceMapProcess_CL | where MachineResourceName_s == "m-559dbcd8-3130-454d-8d1d-f624e57961bc" | summarize arg_max(TimeGenerated, *) by ResourceId

列出所有运行 SQL 的计算机

ServiceMapComputer_CL | where ResourceName_s in ((search in (ServiceMapProcess_CL) "\*sql\*" | distinct MachineResourceName_s)) | distinct ComputerName_s

在我的数据中心列出 curl 的所有唯一产品版本

ServiceMapProcess_CL | where ExecutableName_s == "curl" | distinct ProductVersion_s

创建由运行 CentOS 的所有计算机组成的计算机组

ServiceMapComputer_CL | where OperatingSystemFullName_s contains_cs "CentOS" | distinct ComputerName_s

汇总一组计算机的出站连接

// the machines of interest
let machines = datatable(m: string) ["m-82412a7a-6a32-45a9-a8d6-538354224a25"];
// map of ip to monitored machine in the environment
let ips=materialize(ServiceMapComputer_CL
| summarize ips=makeset(todynamic(Ipv4Addresses_s)) by MonitoredMachine=ResourceName_s
| mvexpand ips to typeof(string));
// all connections to/from the machines of interest
let out=materialize(VMConnection
| where Machine in (machines)
| summarize arg_max(TimeGenerated, *) by ConnectionId);
// connections to localhost augmented with RemoteMachine
let local=out
| where RemoteIp startswith "127."
| project ConnectionId, Direction, Machine, Process, ProcessName, SourceIp, DestinationIp, DestinationPort, Protocol, RemoteIp, RemoteMachine=Machine;
// connections not to localhost augmented with RemoteMachine
let remote=materialize(out
| where RemoteIp !startswith "127."
| join kind=leftouter (ips) on $left.RemoteIp == $right.ips
| summarize by ConnectionId, Direction, Machine, Process, ProcessName, SourceIp, DestinationIp, DestinationPort, Protocol, RemoteIp, RemoteMachine=MonitoredMachine);
// the remote machines to/from which we have connections
let remoteMachines = remote | summarize by RemoteMachine;
// all augmented connections
(local)
| union (remote)
//Take all outbound records but only inbound records that come from either //unmonitored machines or monitored machines not in the set for which we are computing dependencies.
| where Direction == 'outbound' or (Direction == 'inbound' and RemoteMachine !in (machines))
| summarize by ConnectionId, Direction, Machine, Process, ProcessName, SourceIp, DestinationIp, DestinationPort, Protocol, RemoteIp, RemoteMachine
// identify the remote port
| extend RemotePort=iff(Direction == 'outbound', DestinationPort, 0)
// construct the join key we'll use to find a matching port
| extend JoinKey=strcat_delim(':', RemoteMachine, RemoteIp, RemotePort, Protocol)
// find a matching port
| join kind=leftouter (VMBoundPort 
| where Machine in (remoteMachines) 
| summarize arg_max(TimeGenerated, *) by PortId 
| extend JoinKey=strcat_delim(':', Machine, Ip, Port, Protocol)) on JoinKey
// aggregate the remote information
| summarize Remote=makeset(iff(isempty(RemoteMachine), todynamic('{}'), pack('Machine', RemoteMachine, 'Process', Process1, 'ProcessName', ProcessName1))) by ConnectionId, Direction, Machine, Process, ProcessName, SourceIp, DestinationIp, DestinationPort, Protocol

REST API

“服务映射”中的所有服务器、进程和依赖项数据均可通过服务映射 REST API 获取。

诊断和使用情况数据

Microsoft 自动收集你在使用服务映射过程中的使用情况和性能数据。 Microsoft 使用此数据提供和改进服务映射的质量、安全性和完整性。

为了提供准确高效的故障排除功能,收集的数据将包括有关软件配置的信息。 这些信息可能是操作系统和版本、IP 地址、DNS 名称和工作站名称。 Microsoft 不收集姓名、地址或其他联系信息。

有关数据收集和使用的详细信息,请参阅 Microsoft Online Services 隐私声明

后续步骤

详细了解 Log Analytics 中的日志搜索,以检索服务映射收集的数据。

疑难解答

如果安装或运行服务映射时遇到任何问题,可通过本部分内容获得帮助。 如果仍然无法解决问题,请联系 Microsoft 支持部门。

Dependency Agent 安装问题

本部分帮助你解决 Dependency Agent 安装问题。

安装程序提示重新启动

安装或卸载 Dependency Agent 后,通常不需要重启。 在极少数情况下,Windows Server 需要重启才能继续安装。 如果某个依赖项(通常是 Microsoft Visual C++ 可再发行程序包库)因锁定的文件而需要重启,则会发生此问题。

将显示“无法安装 Dependency Agent: Visual Studio 运行时库安装失败 (code = [code_number])”消息

Microsoft Dependency Agent 基于 Microsoft Visual Studio 运行时库。 如果安装库时出现问题,将收到一条消息。

运行时库安装程序在 %LOCALAPPDATA%\temp 文件夹中创建日志。 该文件为 dd_vcredist_arch_yyyymmddhhmmss.log,其中 arch 为 x86amd64,yyyymmddhhmmss 是创建日志时的日期和时间(24 小时制)。 该日志提供有关阻止安装的问题的详细信息。

这可能有助于首次安装最新运行时库

下表列出了代码号和建议的解决方法。

代码 说明 解决方法
0x17 库安装程序需要尚未安装的 Windows 更新。 查看最新的库安装程序日志。

如果对 Windows8.1-KB2999226-x64.msu 的引用后跟行 Error 0x80240017: Failed to execute MSU package,,则不具备安装 KB2999226 的先决条件。 请按照 Windows 中的通用 C 运行时一文中先决条件部分的说明操作。 可能需要运行 Windows 更新并重启多次才能安装必备组件。

再次运行 Microsoft Dependency Agent 安装程序。

安装后的问题

本部分帮助你解决安装后的问题。

服务映射中不显示服务器

如果已成功安装 Dependency Agent,但在服务映射解决方案中看不到计算机:

  • Dependency Agent 是否已安装成功? 检查服务是否已安装并正在运行。

    • Windows:查找名为“Microsoft Dependency Agent”的服务 。
    • Linux:查找正在运行的进程“microsoft-dependency-agent” 。
  • 你是否在使用 Log Analytics 免费层? 免费计划允许最多 5 个仅有的服务映射计算机。 服务映射中不再显示任何其他的计算机,即使前 5 个服务器不再发送数据。

  • 你的服务器是否会向 Azure Monitor 日志发送日志和性能数据? 转到 Azure Monitor\Logs,并为计算机运行以下查询:

    Usage | where Computer == "admdemo-appsvr" | summarize sum(Quantity), any(QuantityUnit) by DataType
    

结果中是否有多种不同的事件? 是否为最新数据? 如果是,则表示 Log Analytics 代理正常运行并正在与工作区通信。 如果不是,请检查计算机上的代理。 参阅适用于 Windows 的 Log Analytics 代理故障排除适用于 Linux 的 Log Analytics 代理故障排除

服务器会在服务映射中显示,但没有任何进程

可以在服务映射中看到你的计算机,但它没有进程或连接数据。 该行为表明 Dependency Agent 已安装并正在运行,但内核驱动程序未加载。

查看 C:\Program Files\Microsoft Dependency Agent\logs\wrapper.log file(在 Windows 中)或 /var/opt/microsoft/dependency-agent/log/service.log file(在 Linux 中)。 文件的最后几行应指出为何未加载内核。 例如,如果更新内核,则内核在 Linux 上可能不受支持。

建议

是否有任何关于服务映射或本文档的反馈? 访问 User Voice 页面,在其中可以建议开发所需的功能或投票赞成现有建议。