以下是使用 Azure CLI,為邊緣上的 Azure 監視器管線建立和設定所需元件的必要步驟。
邊緣管線延伸模組
下列命令會將邊緣管線延伸模組新增至已啟用 Arc 的 Kubernetes 叢集。
az k8s-extension create --name <pipeline-extension-name> --extension-type microsoft.monitor.pipelinecontroller --scope cluster --cluster-name <cluster-name> --resource-group <resource-group> --cluster-type connectedClusters --release-train Preview
## Example
az k8s-extension create --name my-pipe --extension-type microsoft.monitor.pipelinecontroller --scope cluster --cluster-name my-cluster --resource-group my-resource-group --cluster-type connectedClusters --release-train Preview
自訂位置
下列 ARM 範本會為已啟用 Arc 的 Kubernetes 叢集建立自訂位置。
az customlocation create --name <custom-location-name> --resource-group <resource-group-name> --namespace <name of namespace> --host-resource-id <connectedClusterId> --cluster-extension-ids <extensionId>
## Example
az customlocation create --name my-cluster-custom-location --resource-group my-resource-group --namespace my-cluster-custom-location --host-resource-id /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/my-resource-group/providers/Microsoft.Kubernetes/connectedClusters/my-cluster --cluster-extension-ids /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/my-resource-group/providers/Microsoft.Kubernetes/connectedClusters/my-cluster/providers/Microsoft.KubernetesConfiguration/extensions/my-cluster
DCE
下列 ARM 範本會建立資料收集端點 (DCE),而邊緣上的管線需要有此端點,才能連線到雲端管線。 如果您在相同區域中已經有 DCE,則可使用現有的 DCE。 部署範本之前,請先取代下表中的屬性。
az monitor data-collection endpoint create -g "myResourceGroup" -l "eastus2euap" --name "myCollectionEndpoint" --public-network-access "Enabled"
## Example
az monitor data-collection endpoint create --name strato-06-dce --resource-group strato --public-network-access "Enabled"
DCR
DCR 會儲存在 Azure 監視器中,並定義從邊緣上的管線接收資料時處理資料的方式。 邊緣上的管線設定會指定 DCR 的 immutable ID
,以及 DCR 中將處理資料的 stream
。 immutable ID
會在建立 DCR 時自動產生。
執行 CLI 命令來建立 DCR 之前,請先取代下列範本中的屬性,並將其儲存在 JSON 檔案中。 如需 DCR 結構的詳細資訊,請參閱 Azure 監視器中資料收集規則的結構。
參數 |
描述 |
name |
DCR 的名稱。 針對訂用帳戶必須是唯一的。 |
location |
DCR 的位置。 必須符合 DCE 的位置。 |
dataCollectionEndpointId |
DCE 的資源識別碼。 |
streamDeclarations |
所接收資料的結構描述。 管線設定中的每個資料流程都需要一個串流。 該名稱在 DCR 中必須是唯一的,且開頭必須是 Custom-。 下列範例中的 column 區段應該用於 OLTP 和 Syslog 資料流程。 如果目的地資料表的結構描述不同,則您可以使用 transformKql 參數中定義的轉換加以修改。 |
destinations |
新增額外區段,將資料傳送到多個工作區。 |
- name |
dataFlows 區段中要參考之目的地的名稱。 針對 DCR 必須是唯一的。 |
- workspaceResourceId |
Log Analytics 工作區的資源識別碼。 |
- workspaceId |
Log Analytics 工作區的工作區識別碼。 |
dataFlows |
符合串流和目的地。 每個串流/目的地組合一個項目。 |
- streams |
一或多個串流 (定義於 streamDeclarations 中)。 您可以包含多個串流,但前提是其會傳送到相同的目的地。 |
- destinations |
一或多個目的地 (定義於 destinations 中)。 您可以包含多個目的地。但前提是其會傳送到相同的目的地。 |
- transformKql |
將資料傳送到目的地之前要套用到資料的轉換。 使用 source 傳送資料,而不需進行任何變更。 轉換的輸出必須符合目的地資料表的結構描述。 如需轉換的詳細資訊,請參閱 Azure 監視器中的資料收集轉換。 |
- outputStream |
指定 Log Analytics 工作區中的目的地資料表。 此資料表必須已經存在工作區中。 針對自訂資料表,在資料表名稱前面加上 Custom-。 邊緣上的管線目前不支援內建資料表。 |
{
"properties": {
"dataCollectionEndpointId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/my-resource-group/providers/Microsoft.Insights/dataCollectionEndpoints/my-dce",
"streamDeclarations": {
"Custom-OTLP": {
"columns": [
{
"name": "Body",
"type": "string"
},
{
"name": "TimeGenerated",
"type": "datetime"
},
{
"name": "SeverityText",
"type": "string"
}
]
},
"Custom-Syslog": {
"columns": [
{
"name": "Body",
"type": "string"
},
{
"name": "TimeGenerated",
"type": "datetime"
},
{
"name": "SeverityText",
"type": "string"
}
]
}
},
"dataSources": {},
"destinations": {
"logAnalytics": [
{
"name": "LogAnayticsWorkspace01",
"workspaceResourceId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/my-resource-group/providers/Microsoft.OperationalInsights/workspaces/my-workspace",
}
]
},
"dataFlows": [
{
"streams": [
"Custom-OTLP"
],
"destinations": [
"LogAnayticsWorkspace01"
],
"transformKql": "source",
"outputStream": "Custom-OTelLogs_CL"
},
{
"streams": [
"Custom-Syslog"
],
"destinations": [
"LogAnayticsWorkspace01"
],
"transformKql": "source",
"outputStream": "Custom-Syslog_CL"
}
]
}
}
使用下列命令安裝 DCR:
az monitor data-collection rule create --name 'myDCRName' --location <location> --resource-group <resource-group> --rule-file '<dcr-file-path.json>'
## Example
az monitor data-collection rule create --name my-pipeline-dcr --location westus2 --resource-group 'my-resource-group' --rule-file 'C:\MyDCR.json'
DCR 存取
已啟用 Arc 的 Kubernetes 叢集必須能夠存取 DCR,才能將資料傳送到雲端管線。 使用下列命令,為叢集擷取系統指派身分識別的物件識別碼。
az k8s-extension show --name <extension-name> --cluster-name <cluster-name> --resource-group <resource-group> --cluster-type connectedClusters --query "identity.principalId" -o tsv
## Example:
az k8s-extension show --name my-pipeline-extension --cluster-name my-cluster --resource-group my-resource-group --cluster-type connectedClusters --query "identity.principalId" -o tsv
使用此命令的輸出作為下列命令的輸入,讓 Azure 監視器管線作為授權單位來將遙測傳送到 DCR。
az role assignment create --assignee "<extension principal ID>" --role "Monitoring Metrics Publisher" --scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.Insights/dataCollectionRules/<dcr-name>"
## Example:
az role assignment create --assignee "00000000-0000-0000-0000-000000000000" --role "Monitoring Metrics Publisher" --scope "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/my-resource-group/providers/Microsoft.Insights/dataCollectionRules/my-dcr"
邊緣管線設定
邊緣管線設定會定義邊緣上的管線執行個體詳細資料,並部署接收和傳送遙測至雲端所需的資料流程。
部署範本之前,請先取代下表中的屬性。
屬性 |
描述 |
一般 |
|
name |
管線執行個體的名稱。 必須是訂閱中唯一的。 |
location |
管線執行個體的位置。 |
extendedLocation |
|
接收器 |
每個接收器一個項目。 每個項目都會指定要接收的資料類型、將接聽的連接埠,以及將在設定 pipelines 區段中使用的唯一名稱。 |
type |
接收的資料類型。 目前的選項為 OTLP 和 Syslog 。 |
name |
service 區段中所參考的接收器名稱。 針對管線執行個體必須是唯一的。 |
endpoint |
接收器接聽的位址和連接埠。 針對 al 位址使用 0.0.0.0 。 |
處理器 |
保留供未來使用。 |
匯出工具 |
每個目的地一個項目。 |
type |
目前唯一支援的類型為 AzureMonitorWorkspaceLogs 。 |
name |
針對管線執行個體必須是唯一的。 此名稱用於設定的 pipelines 區段中。 |
dataCollectionEndpointUrl |
邊緣上的管線將在其中傳送資料的 DCE URL。 您可以在 Azure 入口網站中瀏覽至 DCE 並複製記錄擷取值來找到此項。 |
dataCollectionRule |
在雲端管線中定義資料收集之 DCR 的固定 ID。 從 Azure 入口網站中 DCR 的 JSON 檢視中,複製 [一般] 區段中 [固定 ID] 的值。 |
- stream |
DCR 中將接受資料的串流名稱。 |
- maxStorageUsage |
快取的容量。 達到此容量的 80% 時,會剪除最舊的資料,以騰出空間來容納更多資料。 |
- retentionPeriod |
保留期間 (分鐘)。 系統會在此時間量之後剪除資料。 |
- schema |
傳送到雲端管線的資料結構描述。 這必須符合 DCR 串流中定義的結構描述。 此範例中使用的結構描述適用於 Syslog 和 OTLP。 |
服務 |
每個管線執行個體一個項目。 建議每個管線延伸模組只有一個執行個體。 |
管線 |
每個資料流程一個項目。 每個項目都會比對 receiver 與 exporter 。 |
name |
管線的唯一名稱。 |
receivers |
接聽要接收資料的一或多個接收器。 |
processors |
保留供未來使用。 |
exporters |
將資料傳送到雲端管線的一或多個匯出工具。 |
persistence |
用於快取的永續性磁碟區名稱。 如果您不想啟用快取,請移除此參數。 |
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"metadata": {
"description": "This template deploys an edge pipeline for azure monitor."
},
"resources": [
{
"type": "Microsoft.monitor/pipelineGroups",
"location": "eastus",
"apiVersion": "2023-10-01-preview",
"name": "my-pipeline-group-name",
"extendedLocation": {
"name": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/my-resource-group/providers/Microsoft.ExtendedLocation/customLocations/my-custom-location",
"type": "CustomLocation"
},
"properties": {
"receivers": [
{
"type": "OTLP",
"name": "receiver-OTLP",
"otlp": {
"endpoint": "0.0.0.0:4317"
}
},
{
"type": "Syslog",
"name": "receiver-Syslog",
"syslog": {
"endpoint": "0.0.0.0:514"
}
}
],
"processors": [],
"exporters": [
{
"type": "AzureMonitorWorkspaceLogs",
"name": "exporter-log-analytics-workspace",
"azureMonitorWorkspaceLogs": {
"api": {
"dataCollectionEndpointUrl": "https://my-dce-4agr.eastus-1.ingest.monitor.azure.com",
"dataCollectionRule": "dcr-00000000000000000000000000000000",
"stream": "Custom-OTLP",
"schema": {
"recordMap": [
{
"from": "body",
"to": "Body"
},
{
"from": "severity_text",
"to": "SeverityText"
},
{
"from": "time_unix_nano",
"to": "TimeGenerated"
}
]
}
},
"cache": {
"maxStorageUsage": 10000,
"retentionPeriod": 60
}
}
}
],
"service": {
"pipelines": [
{
"name": "DefaultOTLPLogs",
"receivers": [
"receiver-OTLP"
],
"processors": [],
"exporters": [
"exporter-log-analytics-workspace"
],
"type": "logs"
},
{
"name": "DefaultSyslogs",
"receivers": [
"receiver-Syslog"
],
"processors": [],
"exporters": [
"exporter-log-analytics-workspace"
],
"type": "logs"
}
],
"persistence": {
"persistentVolumeName": "my-persistent-volume"
}
},
"networkingConfigurations": [
{
"externalNetworkingMode": "LoadBalancerOnly",
"routes": [
{
"receiver": "receiver-OTLP"
},
{
"receiver": "receiver-Syslog"
}
]
}
]
}
}
]
}
使用下列命令來安裝範本:
az deployment group create --resource-group <resource-group-name> --template-file <path-to-template>
## Example
az deployment group create --resource-group my-resource-group --template-file C:\MyPipelineConfig.json
您可以使用如下所示的單一 ARM 範本,為邊緣上的 Azure 監視器管線部署所有必要元件。 使用您環境的特定值編輯參數檔案。 以下將描述範本的每個區段,包括您必須在使用之前修改的區段。
元件 |
類型 |
描述 |
Log Analytics 工作區 |
Microsoft.OperationalInsights/workspaces |
如果您使用現有的 Log Analytics 工作區,請移除此區段。 唯一所需的參數是工作區名稱。 系統將自動建立工作區的固定 ID,這是其他元件所需的識別碼。 |
資料收集端點 (DCE) |
Microsoft.Insights/dataCollectionEndpoints |
如果您使用現有的 DCE,請移除此區段。 唯一所需的參數是 DCE 名稱。 系統將自動建立 DCE 的記錄擷取 URL,這是其他元件所需的 URL。 |
邊緣管線延伸模組 |
Microsoft.KubernetesConfiguration/extensions |
唯一所需的參數是管線延伸模組名稱。 |
自訂位置 |
Microsoft.ExtendedLocation/customLocations |
用來建立自訂之已啟用 Azure Arc 的 Kubernetes 叢集的自訂位置 |
邊緣管線執行個體 |
Microsoft.monitor/pipelineGroups |
包含接聽程式、匯出工具及資料流程設定的邊緣管線執行個體。 部署範本之前,您必須先修改管線執行個體的屬性。 |
資料收集規則 (DCR) |
Microsoft.Insights/dataCollectionRules |
唯一所需的參數是 DCR 名稱,但您必須在部署範本之前修改 DCR 的屬性。 |
範本檔案
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"location": {
"type": "string"
},
"clusterId": {
"type": "string"
},
"clusterExtensionIds": {
"type": "array"
},
"customLocationName": {
"type": "string"
},
"cachePersistentVolume": {
"type": "string"
},
"cacheMaxStorageUsage": {
"type": "int"
},
"cacheRetentionPeriod": {
"type": "int"
},
"dceName": {
"type": "string"
},
"dcrName": {
"type": "string"
},
"logAnalyticsWorkspaceName": {
"type": "string"
},
"pipelineExtensionName": {
"type": "string"
},
"pipelineGroupName": {
"type": "string"
},
"tagsByResource": {
"type": "object",
"defaultValue": {}
}
},
"resources": [
{
"type": "Microsoft.OperationalInsights/workspaces",
"name": "[parameters('logAnalyticsWorkspaceName')]",
"location": "[parameters('location')]",
"apiVersion": "2017-03-15-preview",
"tags": "[ if(contains(parameters('tagsByResource'), 'Microsoft.OperationalInsights/workspaces'), parameters('tagsByResource')['Microsoft.OperationalInsights/workspaces'], json('{}')) ]",
"properties": {
"sku": {
"name": "pergb2018"
}
}
},
{
"type": "Microsoft.Insights/dataCollectionEndpoints",
"name": "[parameters('dceName')]",
"location": "[parameters('location')]",
"apiVersion": "2021-04-01",
"tags": "[ if(contains(parameters('tagsByResource'), 'Microsoft.Insights/dataCollectionEndpoints'), parameters('tagsByResource')['Microsoft.Insights/dataCollectionEndpoints'], json('{}')) ]",
"properties": {
"configurationAccess": {},
"logsIngestion": {},
"networkAcls": {
"publicNetworkAccess": "Enabled"
}
}
},
{
"type": "Microsoft.Insights/dataCollectionRules",
"name": "[parameters('dcrName')]",
"location": "[parameters('location')]",
"apiVersion": "2021-09-01-preview",
"dependsOn": [
"[resourceId('Microsoft.OperationalInsights/workspaces', 'DefaultWorkspace-westus2')]",
"[resourceId('Microsoft.Insights/dataCollectionEndpoints', 'Aep-mytestpl-ZZPXiU05tJ')]"
],
"tags": "[ if(contains(parameters('tagsByResource'), 'Microsoft.Insights/dataCollectionRules'), parameters('tagsByResource')['Microsoft.Insights/dataCollectionRules'], json('{}')) ]",
"properties": {
"dataCollectionEndpointId": "[resourceId('Microsoft.Insights/dataCollectionEndpoints', 'Aep-mytestpl-ZZPXiU05tJ')]",
"streamDeclarations": {
"Custom-OTLP": {
"columns": [
{
"name": "Body",
"type": "string"
},
{
"name": "TimeGenerated",
"type": "datetime"
},
{
"name": "SeverityText",
"type": "string"
}
]
},
"Custom-Syslog": {
"columns": [
{
"name": "Body",
"type": "string"
},
{
"name": "TimeGenerated",
"type": "datetime"
},
{
"name": "SeverityText",
"type": "string"
}
]
}
},
"dataSources": {},
"destinations": {
"logAnalytics": [
{
"name": "DefaultWorkspace-westus2",
"workspaceResourceId": "[resourceId('Microsoft.OperationalInsights/workspaces', 'DefaultWorkspace-westus2')]",
"workspaceId": "[reference(resourceId('Microsoft.OperationalInsights/workspaces', 'DefaultWorkspace-westus2'))].customerId"
}
]
},
"dataFlows": [
{
"streams": [
"Custom-OTLP"
],
"destinations": [
"localDest-DefaultWorkspace-westus2"
],
"transformKql": "source",
"outputStream": "Custom-OTelLogs_CL"
},
{
"streams": [
"Custom-Syslog"
],
"destinations": [
"DefaultWorkspace-westus2"
],
"transformKql": "source",
"outputStream": "Custom-Syslog_CL"
}
]
}
},
{
"type": "Microsoft.KubernetesConfiguration/extensions",
"apiVersion": "2022-11-01",
"name": "[parameters('pipelineExtensionName')]",
"scope": "[parameters('clusterId')]",
"tags": "[ if(contains(parameters('tagsByResource'), 'Microsoft.KubernetesConfiguration/extensions'), parameters('tagsByResource')['Microsoft.KubernetesConfiguration/extensions'], json('{}')) ]",
"identity": {
"type": "SystemAssigned"
},
"properties": {
"aksAssignedIdentity": {
"type": "SystemAssigned"
},
"autoUpgradeMinorVersion": false,
"extensionType": "microsoft.monitor.pipelinecontroller",
"releaseTrain": "preview",
"scope": {
"cluster": {
"releaseNamespace": "my-strato-ns"
}
},
"version": "0.37.3-privatepreview"
}
},
{
"type": "Microsoft.ExtendedLocation/customLocations",
"apiVersion": "2021-08-15",
"name": "[parameters('customLocationName')]",
"location": "[parameters('location')]",
"tags": "[ if(contains(parameters('tagsByResource'), 'Microsoft.ExtendedLocation/customLocations'), parameters('tagsByResource')['Microsoft.ExtendedLocation/customLocations'], json('{}')) ]",
"dependsOn": [
"[parameters('pipelineExtensionName')]"
],
"properties": {
"hostResourceId": "[parameters('clusterId')]",
"namespace": "[toLower(parameters('customLocationName'))]",
"clusterExtensionIds": "[parameters('clusterExtensionIds')]",
"hostType": "Kubernetes"
}
},
{
"type": "Microsoft.monitor/pipelineGroups",
"location": "[parameters('location')]",
"apiVersion": "2023-10-01-preview",
"name": "[parameters('pipelineGroupName')]",
"tags": "[ if(contains(parameters('tagsByResource'), 'Microsoft.monitor/pipelineGroups'), parameters('tagsByResource')['Microsoft.monitor/pipelineGroups'], json('{}')) ]",
"dependsOn": [
"[parameters('customLocationName')]",
"[resourceId('Microsoft.Insights/dataCollectionRules','Aep-mytestpl-ZZPXiU05tJ')]"
],
"extendedLocation": {
"name": "[resourceId('Microsoft.ExtendedLocation/customLocations', parameters('customLocationName'))]",
"type": "CustomLocation"
},
"properties": {
"receivers": [
{
"type": "OTLP",
"name": "receiver-OTLP-4317",
"otlp": {
"endpoint": "0.0.0.0:4317"
}
},
{
"type": "Syslog",
"name": "receiver-Syslog-514",
"syslog": {
"endpoint": "0.0.0.0:514"
}
}
],
"processors": [],
"exporters": [
{
"type": "AzureMonitorWorkspaceLogs",
"name": "exporter-lu7mbr90",
"azureMonitorWorkspaceLogs": {
"api": {
"dataCollectionEndpointUrl": "[reference(resourceId('Microsoft.Insights/dataCollectionEndpoints','Aep-mytestpl-ZZPXiU05tJ')).logsIngestion.endpoint]",
"stream": "Custom-DefaultAEPOTelLogs_CL-FqXSu6GfRF",
"dataCollectionRule": "[reference(resourceId('Microsoft.Insights/dataCollectionRules', 'Aep-mytestpl-ZZPXiU05tJ')).immutableId]",
"cache": {
"maxStorageUsage": "[parameters('cacheMaxStorageUsage')]",
"retentionPeriod": "[parameters('cacheRetentionPeriod')]"
},
"schema": {
"recordMap": [
{
"from": "body",
"to": "Body"
},
{
"from": "severity_text",
"to": "SeverityText"
},
{
"from": "time_unix_nano",
"to": "TimeGenerated"
}
]
}
}
}
}
],
"service": {
"pipelines": [
{
"name": "DefaultOTLPLogs",
"receivers": [
"receiver-OTLP"
],
"processors": [],
"exporters": [
"exporter-lu7mbr90"
]
}
],
"persistence": {
"persistentVolume": "[parameters('cachePersistentVolume')]"
}
}
}
}
],
"outputs": {}
}
範例參數檔案
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"location": {
"value": "eastus"
},
"clusterId": {
"value": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/my-resource-group/providers/Microsoft.Kubernetes/connectedClusters/my-arc-cluster"
},
"clusterExtensionIds": {
"value": ["/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/my-resource-group/providers/Microsoft.KubernetesConfiguration/extensions/my-pipeline-extension"]
},
"customLocationName": {
"value": "my-custom-location"
},
"dceName": {
"value": "my-dce"
},
"dcrName": {
"value": "my-dcr"
},
"logAnalyticsWorkspaceName": {
"value": "my-workspace"
},
"pipelineExtensionName": {
"value": "my-pipeline-extension"
},
"pipelineGroupName": {
"value": "my-pipeline-group"
},
"tagsByResource": {
"value": {}
}
}
}