使用 ARMClient 创建连接监视器

重要

自 2021 年 7 月 1 日起,你将无法在现有工作区中添加新测试,也无法在网络性能监视器中启用新的工作区。 你还将无法在连接监视器(经典)中添加新的连接监视器。 可以继续使用在 2021 年 7 月 1 日之前创建的测试和连接监视器。 为了最大程度地减少当前工作负荷的服务中断,请在 2024 年 2 月 29 日之前,在 Azure 网络观察程序中将测试从网络性能监视器迁移到新连接监视器,或从连接监视器(经典)迁移到新连接监视器。

了解如何使用 ARMClient 创建连接监视器以监视资源之间的通信。 它支持混合部署和 Azure 云部署。

准备阶段

在通过连接监视器创建的连接监视器中,可以将本地计算机和 Azure VM 添加为源。 这些连接监视器还可以监视与终结点的连接。 终结点可以位于 Azure 上,也可以位于任何其他 URL 或 IP 上。

连接监视器包含以下实体:

  • 连接监视器资源 - 特定于区域的 Azure 资源。 以下所有实体都是连接监视器资源的属性。

  • 终结点 - 参与连接检查的源或目标。 终结点的示例包括 Azure VM、本地代理、URL 和 IP。

  • 测试配置 - 针对测试的特定于协议的配置。 根据选定协议,可以定义端口、阈值、测试频率和其他参数。

  • 测试组 -包含源终结点、目标终结点和测试配置的组。 连接监视器可包含多个测试组。

  • 测试 - 将源终结点、目标终结点和测试配置组合在一起。 测试是可用于监视数据的最精细级别。 监视数据包括检查失败的百分比和往返时间 (RTT)。

    Diagram showing a connection monitor, defining the relationship between test groups and tests

使用 ARMClient 创建连接监视器的步骤

使用以下代码通过 ARMClient 创建连接监视器。

$connectionMonitorName = "sampleConnectionMonitor"

$ARM = "https://management.chinacloudapi.cn"

$SUB = "subscriptions/<subscription id 1>;"

$NW = "resourceGroups/NetworkWatcherRG/providers/Microsoft.Network/networkWatchers/NetworkWatcher\_<region>"

$body =

"{

location: '<region>',

properties: {

endpoints: [{

name: 'endpoint_workspace_machine',

type: 'MMAWorkspaceMachine',

resourceId: '/subscriptions/<subscription id>/resourcegroups/<resource group>/providers/Microsoft.OperationalInsights/workspaces/sampleWorkspace',

//Example 1: Choose a machine

address : '<non-Azure machine FQDN>'
}

//Example 2: Select IP from chosen machines

address : '<non-Azure machine FQDN>

"scope": {
      "include": [
            {
                  "address": "<IP belonging to machine chosen above>"  
	    }
       ]
      }
   }    

name: 'endpoint_workspace_network',

type: 'MMAWorkspaceNetwork',

resourceId: '/subscriptions/<subscription id>/resourcegroups/<resource group>/providers/Microsoft.OperationalInsights/workspaces/sampleWorkspace',

 coverage level : 'high', //Optional

 //Include subnets. You can also exclude IPs from subnet to exclude from monitoring

 scope: {
      "include": [
            {
                  "address": "<subnet 1 mask>" // Eg: 10.10.1.0/28
            },
            {
                  "address": "<subnet 2 mask>" 
            }
      ],
      "exclude": [
      		{ 
      		"address" : "<ip-from-included-subnets-that-should-be-excluded>"
		}
      ]
     }
},

//Use an Azure VM as an endpoint
{

name: 'endpoint_virtualmachine',

resourceId: '/subscriptions/<subscription id>/resourceGroups/<resource group>/providers/Microsoft.Compute/virtualMachines/<vm-name>'

},

//Use an Azure VNET or Subnet as an endpoint

 {

name: 'endpoint_vnet_subnet',

resourceId: '<resource id of VNET or subnet'
coverage level: 'high' //Optional

//Scope is optional.

  "scope": {
      "include": [
            {
                  "address": "<subnet 1 mask>" // Eg: 10.10.1.0/28 .This subnet should match with any existing subnet in vnet
            }
      ],
    "exclude": [
            {
                  "address": "<ip-from-included-subnets-that-should-be-excluded>" // If used with include, IP should be part of the subnet defined above. Without include, this could be any address within vnet range or any specific subnet range as a whole.
            }
      ]
  }
   },

//Endpoint as a URL
{

name: 'azure portal'

address: '<URL>'

   },

//Endpoint as an IP 
 {

    name: 'ip',

     address: '<IP>'

 }

  ],

  testGroups: [{

    name: 'Connectivity to Azure Portal and Public IP',

    testConfigurations: ['http', 'https', 'tcpEnabled', 'icmpEnabled'],

    sources: ['vm1', 'workspace'],

    destinations: ['azure portal', 'ip']

   },

{

    name: 'Connectivty from Azure VM 1 to Azure VM 2',

   // Choose your protocol

    testConfigurations: ['http', 'https', 'tcpDisabled', 'icmpDisabled'],

    sources: ['vm1'],

    destinations: ['vm2'],

    disable: true

   }

  ],

  testConfigurations: [{

    name: 'http',

    testFrequencySec: <frequency>,

    protocol: 'HTTP',

    successThreshold: {

     checksFailedPercent: <threshold for checks failed %>,

     roundTripTimeMs: <threshold for RTT>

    }

   }, {

    name: 'https',

    testFrequencySec: <frequency>,

    protocol: 'HTTP',

    httpConfiguration: {

     port: '<port of choice>'

    preferHTTPS: true // If port chosen isn't 80 or 443

    method: 'GET', //Choose GET or POST

    path: '/', //Specify path for request

    requestHeaders: [
            {
              "name": "Content-Type",
              "value": "appication/json"
            }
          ],

    validStatusCodeRanges: [ "102", "200-202", "3xx" ], //Samples

    },

    successThreshold: {

     checksFailedPercent: <choose your checks failed threshold>,

     roundTripTimeMs: <choose your RTT threshold>

    }

   }, 
   {

    name: 'tcpEnabled',

    testFrequencySec: <frequency>,

    protocol: 'TCP',

    tcpConfiguration: {

     port: 80

    },

    successThreshold: {

     checksFailedPercent: <choose your checks failed threshold>,

     roundTripTimeMs: <choose your RTT threshold>

    }

   }, {

    name: 'icmpEnabled',

    testFrequencySec: <frequency>,

    protocol: 'ICMP',

    successThreshold: {

     checksFailedPercent: <choose your checks failed threshold>,

     roundTripTimeMs: <choose your RTT threshold>

    }

   }, {

    name: 'icmpDisabled',

    testFrequencySec: <frequency>,

    protocol: 'ICMP',

    icmpConfiguration: {

     disableTraceRoute: true

    },

    successThreshold: {

     checksFailedPercent: <choose your checks failed threshold>,

     roundTripTimeMs: <choose your RTT threshold>

    }

   }, {

    name: 'tcpDisabled',

    testFrequencySec: <frequency>,

    protocol: 'TCP',

    tcpConfiguration: {

     port: 80,

     disableTraceRoute: true

    },

    successThreshold: {

     checksFailedPercent: <choose your checks failed threshold>,

     roundTripTimeMs: <choose your RTT threshold>

    }

   }

  ]

 }

} "

下面是部署命令:

armclient PUT $ARM/$SUB/$NW/connectionMonitors/$connectionMonitorName/?api-version=2019-07-01 $body -verbose

属性说明

  • connectionMonitorName - 连接监视器资源的名称

  • SUB - 将在其中创建连接监视器的订阅的订阅 ID

  • NW - 将在其中创建 CM 的网络观察程序资源 ID

  • location - 将在其中创建连接监视器的区域

  • 终结点

    • name - 每个终结点的唯一名称
    • resourceId - 对于 Azure 终结点,资源 ID 是指虚拟机的 Azure 资源管理器资源 ID。 对于非 Azure 终结点,资源 ID 是指链接到非 Azure 代理的 Log Analytics 工作区的 Azure 资源管理器资源 ID。
    • address - 仅当未指定资源 ID 或资源 ID 为 Log Analytics 工作区时适用。 如果与 Log Analytics 资源 ID 一起使用,则是指可用于监视的代理的 FQDN。 如果在没有资源 ID 的情况下使用,则可以是任何公共终结点的 URL 或 IP。
    • filter - 对于非 Azure 终结点,使用筛选器从 Log Analytics 工作区中选择代理,该代理将用于在连接监视资源中进行监视。 如果未设置筛选器,则属于 Log Analytics 工作区的所有代理均可用于监视。
      • type - 将类型设置为“代理地址”
      • address - 将地址设置为本地代理的 FQDN
  • 测试组

    • name - 命名测试组。
    • testConfigurations - 根据哪些源终结点连接到目标终结点来测试配置
    • sources - 从上面创建的终结点中进行选择。 基于 Azure 的源终结点需要安装 Azure 网络观察程序扩展,基于非 Azure 的源终结点需要安装 Azure Log Analytics 代理。 若要为源安装代理,请参阅安装监视代理
    • destinations - 从上面创建的终结点中进行选择。 可以通过将 Azure VM 或任何终结点(公共 IP、URL 或 FQDN)指定为目标,从而监视其连接。 单个测试组中可以添加 Azure VM、Office 365 URL、Dynamics 365 URL 和自定义终结点。
    • disable - 选择此字段为测试组指定的所有源和目标禁用监视。
  • 测试配置

    • name - 测试配置的名称。

    • testFrequencySec - 指定源对指定协议和端口上的目标执行 ping 操作的频率。 可以选择 30 秒、1 分钟、5 分钟、15 分钟或 30 分钟。 源将根据所选的值来测试与目标的连接。 例如,如果选择 30 秒,则源将在 30 秒的时间段内至少检查一次与目标的连接。

    • protocol - 可以选择 TCP、ICMP、HTTP 或 HTTPS。 根据协议,可以执行一些特定于协议的配置

      • preferHTTPS - 指定当使用的端口既不是 80 也不是 443 时是否使用 HTTPS 而非 HTTP
      • port - 指定所选的目标端口。
      • disableTraceRoute - 适用于其协议为 TCP 或 ICMP 的测试配置。 它将阻止源发现拓扑和逐跳 RTT。
      • method - 适用于其协议为 HTTP 的测试配置。 选择 HTTP 请求方法(GET 或 POST)
      • path - 指定要追加到 URL 的路径参数
      • validStatusCodes - 选择适用的状态代码。 如果响应代码与此列表不匹配,你会收到一条诊断消息
      • requestHeaders - 指定将传递到目标的自定义请求头字符串
    • successThreshold - 可以在以下网络参数上设置阈值:

      • checksFailedPercent - 设置在源使用指定条件检查到目标的连接时可能检查失败的百分比。 对于 TCP 或 ICMP 协议,检查失败的百分比可能会与数据包丢失的百分比相同。 对于 HTTP 协议,此字段表示未接收到响应的 HTTP 请求的百分比。
      • roundTripTimeMs - 设置 RTT(以毫秒为单位),用于确定源按测试配置连接到目标所需的时间。

规模限制

连接监视器具有以下规模限制:

  • 每个区域每个订阅的最大连接监视器数:100
  • 每个连接监视器的最大测试组:20 个
  • 每个连接监视器的最大源和目标:100
  • 每个连接监视器的最大测试组:20 个通过 ARMClient

后续步骤