重要
连接监视器(经典)已弃用,现在不再可用。 有关详细信息,请参阅从连接监视器(经典)迁移,以将连接监视器从连接监视器(经典)迁移到新的连接监视器。
了解如何使用 ARMClient 创建连接监视器以监视资源之间的通信。 它支持混合部署和 Azure 云部署。
准备阶段
在通过连接监视器创建的连接监视器中,可以将本地计算机和 Azure VM 添加为源。 这些连接监视器还可以监视与终结点的连接。 终结点可以位于 Azure 上,也可以位于任何其他 URL 或 IP 上。
连接监视器包含以下实体:
连接监视器资源 - 特定于区域的 Azure 资源。 以下所有实体都是连接监视器资源的属性。
终结点 - 参与连接检查的源或目标。 终结点的示例包括 Azure VM、本地代理、URL 和 IP。
测试配置 - 针对测试的特定于协议的配置。 根据选定协议,可以定义端口、阈值、测试频率和其他参数。
测试组 -包含源终结点、目标终结点和测试配置的组。 连接监视器可包含多个测试组。
测试 - 将源终结点、目标终结点和测试配置组合在一起。 测试是可用于监视数据的最精细级别。 监视数据包括检查失败的百分比和往返时间 (RTT)。
使用 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
位置 - 在其中创建连接监视器的区域
终结点
- 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 秒的时间段内至少检查一次与目标的连接。
协议 - 可以选择 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