Azure Monitor의 Kubernetes 모니터링에 설명된 대로 Azure Monitor의 여러 기능이 함께 작동하여 AKS(Azure Kubernetes Service) 클러스터의 전체 모니터링을 제공합니다. 이 문서에서는 AKS 클러스터에 대해 다음 기능을 사용하도록 설정하는 방법을 설명합니다.
- 프로메테우스 지표
- Managed Grafana
- 컨테이너 로그 기록
- 컨트롤 플레인 로그
필수 조건
- 온보딩하려면 클러스터에 대한 기여자 이상의 액세스 권한이 필요합니다.
- 모니터링을 사용하도록 설정한 후 데이터를 보려면 모니터링 읽기 권한자 또는 모니터링 기여자 권한이 필요합니다.
작업 영역 만들기
다음 표에서는 이 문서에서 사용하도록 설정된 Azure Monitor 기능을 지원하는 데 필요한 작업 영역을 설명합니다. 각 형식의 기존 작업 영역이 아직 없는 경우 온보딩 프로세스의 일부로 만들 수 있습니다. 만들 작업 영역 수와 배치해야 하는 위치에 대한 지침은 Log Analytics 작업 영역 아키텍처 디자인을 참조하세요.
| 기능 | 작업 영역 | 메모 |
|---|---|---|
| 관리되는 Prometheus | Azure Monitor 작업 영역 | 온보딩할 때 기존 Azure Monitor 작업 영역을 지정하지 않으면 리소스 그룹에 대한 기본 작업 영역이 사용됩니다. 기본 작업 영역이 클러스터 지역에 아직 없는 경우 DefaultAzureMonitorWorkspace-<mapped_region> 형식의 이름을 가진 작업 영역이 DefaultRG-<cluster_region>이라는 리소스 그룹에 만들어집니다.Contributor 권한은 추가 기능에서 데이터를 Azure Monitor 작업 영역에 보낼 수 있도록 하는 데 충분합니다. Azure Monitor 작업 영역을 연결하여 Azure Managed Grafana에서 메트릭을 보려면 Owner 수준 권한이 필요합니다. 온보딩 단계를 실행하는 사용자가 Azure Monitor 작업 영역에서 Azure Managed Grafana 시스템 ID Monitoring Reader 역할을 제공하여 메트릭을 쿼리할 수 있어야 하므로 이 권한이 필요합니다. |
| 컨테이너 로깅 컨트롤 플레인 로그 |
Log Analytics 작업 영역 | 동일한 Microsoft Entra 테넌트에서 다른 Azure 구독의 Log Analytics 작업 영역에 클러스터를 연결할 수 있지만 Azure CLI 또는 Azure Resource Manager 템플릿을 사용해야 합니다. 현재 이 구성은 Azure Portal에서 수행할 수 없습니다. 기존 클러스터를 다른 구독의 Log Analytics 작업 영역에 연결하는 경우 Microsoft.ContainerService 리소스 공급자는 Log Analytics 작업 영역을 사용하여 구독에 등록되어야 합니다. 자세한 내용은 리소스 공급자 등록을 참조하세요. 기존 Log Analytics 작업 영역을 지정하지 않으면 리소스 그룹에 대한 기본 작업 영역이 사용됩니다. 기본 작업 영역이 클러스터 지역에 아직 없는 경우 DefaultWorkspace-<GUID>-<Region> 형식의 이름으로 만들어집니다.기본 작업 영역에 사용할 수 있는 지원되는 매핑 쌍 목록은 Container Insights에서 지원되는 지역 매핑을 참조하세요. 네트워크 보안 경계를 사용하여 작업 영역을 구성하는 방법에 대한 지침은 네트워크 보안 경계를 사용하여 Azure Monitor 구성 을 참조하세요. |
| Managed Grafana | Azure Managed Grafana 작업 영역 | Grafana 작업 영역을 Azure Monitor 작업 영역에 연결하여 클러스터에서 수집된 Prometheus 메트릭을 Grafana 대시보드에서 사용할 수 있도록 합니다. |
Prometheus 지표 및 컨테이너 로깅 사용
클러스터에서 Prometheus 및 컨테이너 로깅을 사용하도록 설정하면 컨테이너화된 버전의 Azure Monitor 에이전트 가 클러스터에 설치됩니다. 새 클러스터 또는 기존 클러스터에서 이러한 기능을 동시에 구성하거나 각 기능을 개별적으로 사용하도록 설정할 수 있습니다.
Prometheus 메트릭 스크래핑을 사용하도록 설정하는 동시에 클러스터에 대해 Managed Grafana를 사용하도록 설정합니다. Azure Monitor 작업 영역과 Azure Managed Grafana 작업 영역을 연결하는 옵션은 Grafana 작업 영역 연결을 참조하세요.
필수 조건
- 클러스터는 관리 ID 인증을 사용해야 합니다.
- 다음 리소스 공급자는 클러스터 및 Azure Monitor 작업 영역의 구독에 등록해야 합니다.
- Microsoft.ContainerService
- Microsoft.Insights
- Microsoft.AlertsManagement (마이크로소프트 알림 관리)
- Microsoft.Monitor
- Grafana 작업 영역 구독에 다음 리소스 공급자를 등록해야 합니다.
- Microsoft 대시보드 (Microsoft.Dashboard)
필수 조건
- 관리 ID 인증은 CLI 버전 2.49.0 이상에서 기본값입니다.
- aks-preview 확장은 명령을 사용하여
az extension remove --name aks-preview해야 합니다.
프로메테우스 지표
-enable-azure-monitor-metrics 새 클러스터를 만들거나 기존 클러스터를 업데이트하여 Prometheus 메트릭을 긁어내는 메트릭 추가 기능을 설치할지에 따라 az aks create 또는 az aks update와 함께 옵션을 사용합니다.
Azure Monitor의 기본 Prometheus 메트릭 구성에 설명된 구성을 사용합니다. 이 구성을 수정하려면 Prometheus용 Azure Monitor 관리 서비스에서 Prometheus 메트릭의 스크래핑 사용자 지정을 참조하세요.
다음 예제를 참조하세요.
### Use default Azure Monitor workspace
az aks create/update --enable-azure-monitor-metrics --name <cluster-name> --resource-group <cluster-resource-group>
### Use existing Azure Monitor workspace
az aks create/update --enable-azure-monitor-metrics --name <cluster-name> --resource-group <cluster-resource-group> --azure-monitor-workspace-resource-id <workspace-name-resource-id>
### Use an existing Azure Monitor workspace and link with an existing Grafana workspace
az aks create/update --enable-azure-monitor-metrics --name <cluster-name> --resource-group <cluster-resource-group> --azure-monitor-workspace-resource-id <azure-monitor-workspace-name-resource-id> --grafana-resource-id <grafana-workspace-name-resource-id>
### Use optional parameters
az aks create/update --enable-azure-monitor-metrics --name <cluster-name> --resource-group <cluster-resource-group> --ksm-metric-labels-allow-list "namespaces=[k8s-label-1,k8s-label-n]" --ksm-metric-annotations-allow-list "pods=[k8s-annotation-1,k8s-annotation-n]"
예제
az aks create/update --enable-azure-monitor-metrics --name "my-cluster" --resource-group "my-resource-group" --azure-monitor-workspace-resource-id "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/my-resource-group/providers/microsoft.monitor/accounts/my-workspace"
선택적 매개 변수
위의 각 명령은 다음과 같은 선택적 매개 변수를 허용합니다. 매개 변수 이름은 각각 다르지만 사용은 동일합니다.
| 매개 변수 | 이름 및 설명 |
|---|---|
| 주석 키 | --ksm-metric-annotations-allow-list리소스의 kube_resource_annotations 메트릭에 사용된 Kubernetes 주석 키의 쉼표로 구분된 목록입니다. 예를 들어 kube_pod_annotations는 pods 리소스에 대한 주석 메트릭입니다. 기본적으로 이 메트릭에는 이름과 네임스페이스 레이블만 포함됩니다. 더 많은 주석을 포함하려면 복수형의 리소스 이름 목록과 이를 허용할 Kubernetes 주석 키를 제공합니다. 단일 *는 주석을 허용하기 위해 각 리소스에 제공할 수 있지만 이 경우 성능에 심각한 영향을 줍니다. 예: pods=[kubernetes.io/team,...],namespaces=[kubernetes.io/team],.... |
| 레이블 키 | --ksm-metric-labels-allow-list리소스의 kube_resource_labels metric kube_resource_labels 메트릭에 사용되는 추가 Kubernetes 레이블 키의 쉼표로 구분된 목록입니다. 예를 들어 kube_pod_labels는 pods 리소스에 대한 레이블 메트릭입니다. 기본적으로 이 메트릭에는 이름과 네임스페이스 레이블만 포함됩니다. 더 많은 레이블을 포함하려면 복수 형식의 리소스 이름 목록과 이를 허용할 Kubernetes 레이블 키를 제공합니다. 단일 *는 레이블을 허용하기 위해 각 리소스에 제공할 수 있지만 이 경우 성능에 심각한 영향을 줍니다. 예: pods=[app],namespaces=[k8s-label-1,k8s-label-n,...],.... |
| 기록 규칙 | --enable-windows-recording-rulesWindows 대시보드의 적절한 작동에 필요한 기록 규칙 그룹을 사용하도록 설정할 수 있습니다. |
컨테이너 로그
--addon monitoring 옵션을 사용하여 az aks create 명령어로 새 클러스터를 만들거나, az aks enable-addon 명령어를 사용하여 기존 클러스터를 업데이트하여 컨테이너 로그 수집을 사용할 수 있습니다. 로그 컬렉션 설정을 수정하려면 아래를 참조하세요.
다음 예제를 참조하세요.
### Use default Log Analytics workspace
az aks enable-addons --addon monitoring --name <cluster-name> --resource-group <cluster-resource-group-name>
### Use existing Log Analytics workspace
az aks enable-addons --addon monitoring --name <cluster-name> --resource-group <cluster-resource-group-name> --workspace-resource-id <workspace-resource-id>
### Use custom log configuration file
az aks enable-addons --addon monitoring --name <cluster-name> --resource-group <cluster-resource-group-name> --workspace-resource-id <workspace-resource-id> --data-collection-settings dataCollectionSettings.json
### Use legacy authentication
az aks enable-addons --addon monitoring --name <cluster-name> --resource-group <cluster-resource-group-name> --workspace-resource-id <workspace-resource-id> --enable-msi-auth-for-monitoring false
예제
az aks enable-addons --addon monitoring --name "my-cluster" --resource-group "my-resource-group" --workspace-resource-id "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/my-resource-group/providers/Microsoft.OperationalInsights/workspaces/my-workspace"
로그 구성 파일
클러스터에 대한 로그 수집 설정을 사용자 지정하려면 다음 형식을 사용하여 구성을 JSON 파일로 제공할 수 있습니다. 구성 파일을 제공하지 않으면 아래 표에서 식별된 기본 설정이 사용됩니다.
{
"interval": "1m",
"namespaceFilteringMode": "Include",
"namespaces": ["kube-system"],
"enableContainerLogV2": true,
"streams": ["Microsoft-Perf", "Microsoft-ContainerLogV2"]
}
구성의 각 설정은 다음 표에 설명되어 있습니다.
| 이름 | 설명 |
|---|---|
interval |
에이전트가 데이터를 수집하는 빈도를 결정합니다. 유효한 값은 1m 간격으로 1m - 30m입니다. 값이 허용되는 범위를 벗어나면 기본값은 1m입니다. 기본값: 1m. |
namespaceFilteringMode |
Include: 네임스페이스 필드의 값에서만 데이터를 수집합니다. Exclude: 네임스페이스 필드의 값을 제외한 모든 네임스페이스에서 데이터를 수집합니다. Off: 네임스페이스 선택을 무시하고 모든 네임스페이스에서 데이터를 수집합니다. 기본값: 끄기 |
namespaces |
namespaceFilteringMode에 따라 인벤토리 및 성능 데이터를 수집하기 위한 쉼표로 구분된 Kubernetes 네임스페이스의 배열입니다. 예를 들어, Include 설정을 사용하는 namespaces = ["kube-system", "default"]는 이 두 네임스페이스만 수집합니다. Exclude 설정을 사용하면 에이전트는 kube-system 및 default를 제외한 다른 모든 네임스페이스에서 데이터를 수집합니다. Off 설정을 사용하면 에이전트는 kube-system 및 default를 포함한 모든 네임스페이스에서 데이터를 수집합니다. 유효하지 않거나 인식할 수 없는 네임스페이스는 무시됩니다. 없음. |
enableContainerLogV2 |
ContainerLogV2 스키마를 사용하도록 설정하는 부울 플래그입니다. true로 설정하면 stdout/stderr 로그가 ContainerLogV2 테이블에 수집됩니다. 그렇지 않으면 ConfigMap에 달리 지정되지 않는 한 컨테이너 로그가 ContainerLog 테이블에 수집됩니다. 개별 스트림을 지정할 때 ContainerLog 또는 ContainerLogV2에 해당하는 테이블을 포함해야 합니다. 기본값: True |
streams |
테이블 스트림의 배열입니다. 유효한 스트림 및 해당 테이블의 목록은 Stream 값을 참조하세요. 기본값: ContainerLogV2, KubeEvents, KubePodInventory |
스트림 값
CLI 또는 ARM을 사용하여 수집할 테이블을 지정할 때 Log Analytics 작업 영역의 특정 테이블에 해당하는 스트림 이름을 지정합니다. 다음 표에는 각 테이블의 스트림 이름이 나열되어 있습니다.
| 스트림 | 컨테이너 인사이트 테이블 |
|---|---|
| 마이크로소프트-컨테이너인벤토리 | ContainerInventory |
| Microsoft-ContainerLog | ContainerLog |
| Microsoft-ContainerLogV2 | ContainerLogV2 |
| Microsoft-ContainerLogV2-HighScale | ContainerLogV2(높은 스케일링 모드)1 |
| Microsoft-ContainerNodeInventory | ContainerNodeInventory |
| Microsoft-InsightsMetrics | InsightsMetrics |
| Microsoft-KubeEvents | KubeEvents |
| Microsoft-KubeMonAgentEvents | KubeMonAgentEvents |
| Microsoft-KubeNodeInventory | KubeNodeInventory |
| Microsoft-KubePodInventory | KubePodInventory (쿠베 포드 인벤토리) |
| Microsoft-KubePVInventory | KubePVInventory |
| Microsoft-KubeServices | KubeServices |
| Microsoft-Perf | Perf |
1 Microsoft-ContainerLogV2 및 Microsoft-ContainerLogV2-HighScale를 함께 사용하지 마세요. 이 경우 중복 데이터가 발생합니다.
적용 가능한 테이블 및 메트릭
컬렉션 빈도 및 네임스페이스 필터링에 대한 설정은 모든 로그 데이터에 적용되지 않습니다. 다음 표에는 Log Analytics 작업 영역의 테이블과 각각에 적용되는 설정이 나와 있습니다.
| 테이블 이름 | 간격 | 네임스페이스 | 비고 |
|---|---|---|---|
| ContainerInventory | Yes | Yes | |
| ContainerNodeInventory | Yes | 아니오 | Kubernetes 노드는 네임스페이스 범위 리소스가 아니므로 네임스페이스에 대한 데이터 수집 설정은 적용할 수 없습니다. |
| KubeNodeInventory | Yes | 아니오 | 네임스페이스에 대한 데이터 수집 설정이 적용되지 않습니다. Kubernetes 노드는 네임스페이스 범위 리소스가 아닙니다. |
| KubePodInventory (쿠베 포드 인벤토리) | Yes | Yes | |
| KubePVInventory | Yes | Yes | |
| KubeServices | Yes | Yes | |
| KubeEvents | 아니오 | Yes | 간격에 대한 데이터 수집 설정은 Kubernetes 이벤트에 적용되지 않습니다. |
| Perf | Yes | Yes | Kubernetes 노드는 네임스페이스 범위 개체가 아니기 때문에 네임스페이스에 대한 데이터 수집 설정은 Kubernetes 노드 관련 메트릭에 적용할 수 없습니다. |
| InsightsMetrics | Yes | Yes | 데이터 수집 설정은 container.azm.ms/kubestate, container.azm.ms/pv 및 container.azm.ms/gpu 네임스페이스를 수집하는 메트릭에만 적용됩니다. |
참고
네임스페이스 필터링은 ama-logs 에이전트 레코드에 적용되지 않습니다. 따라서 kube-system 네임스페이스가 제외된 네임스페이스에 나열되더라도 ama-logs 에이전트 컨테이너에 연결된 레코드는 계속 수집됩니다.
| 메트릭 네임스페이스 | 간격 | 네임스페이스 | 비고 |
|---|---|---|---|
| Insights.container/nodes | Yes | 아니오 | 노드가 네임스페이스 범위 리소스가 아닙니다. |
| Insights.container/nodes | Yes | Yes | |
| Insights.container/containers | Yes | Yes | |
| Insights.container/persistentvolumes | Yes | Yes |
특수 시나리오
특정 시나리오에 대한 구성 요구 사항은 아래 참조를 확인하세요.
- 프라이빗 링크를 사용하는 경우 Azure Monitor에서 Kubernetes 모니터링에 대한 프라이빗 링크 사용을 참조하세요.
- 네트워크 보안 경계를 사용하여 컨테이너 로깅을 사용하도록 설정하려면 Log Analytics 작업 영역을 구성하도록 네트워크 보안 경계를 사용하여 Azure Monitor 구성 을 참조하세요.
- 높은 확장 모드를 사용하도록 설정하려면 모니터링 추가 기능에 대해 높은 확장 모드 사용의 온보딩 프로세스를 따릅니다.
Update ConfigMap에 설명된 대로 ConfigMap도 설정해야 하며, DCR 스트림을
Microsoft-ContainerLogV2에서Microsoft-ContainerLogV2-HighScale로 변경해야 합니다.
컨트롤 플레인 로그 활성화
컨트롤 플레인 로그는 Azure Monitor에서 리소스 로그 로 구현됩니다. 이러한 로그를 수집하려면 클러스터에 대한 진단 설정을 만듭니다. 컨테이너 로그와 동일한 Log Analytics 작업 영역으로 보냅니다.
az monitor diagnostic-settings create 명령을 사용하여 Azure CLI를 사용하여 진단 설정을 만듭니다. 해당 매개 변수에 대한 설명은 이 명령의 설명서를 참조하세요.
다음 예제에서는 모든 Kubernetes 범주를 Log Analytics 작업 영역으로 보내는 진단 설정을 만듭니다. 여기에는 Microsoft.ContainerService/fleets에 대해 지원되는 리소스 로그에 나열된 특정 테이블로 로그를 보내는 리소스별 모드가 포함됩니다.
az monitor diagnostic-settings create \
--name 'Collect control plane logs' \
--resource /subscriptions/<subscription ID>/resourceGroups/<resource group name>/providers/Microsoft.ContainerService/managedClusters/<cluster-name> \
--workspace /subscriptions/<subscription ID>/resourcegroups/<resource group name>/providers/microsoft.operationalinsights/workspaces/<log analytics workspace name> \
--logs '[{"category": "karpenter-events","enabled": true},{"category": "kube-audit","enabled": true},
{"category": "kube-apiserver","enabled": true},{"category": "kube-audit-admin","enabled": true},{"category": "kube-controller-manager","enabled": true},{"category": "kube-scheduler","enabled": true},{"category": "cluster-autoscaler","enabled": true},{"category": "cloud-controller-manager","enabled": true},{"category": "guard","enabled": true},{"category": "csi-azuredisk-controller","enabled": true},{"category": "csi-azurefile-controller","enabled": true},{"category": "csi-snapshot-controller","enabled": true},{"category": "fleet-member-agent","enabled": true},{"category": "fleet-member-net-controller-manager","enabled": true},{"category": "fleet-mcs-controller-manager","enabled": true}]'
--metrics '[{"category": "AllMetrics","enabled": true}]' \
--export-to-resource-specific true
배포 확인
kubectl 명령줄 도구를 사용하여 에이전트가 제대로 배포되었는지 확인합니다.
관리되는 Prometheus
DaemonSet가 Linux 노드 풀에 제대로 배포되었는지 확인
kubectl get ds ama-metrics-node --namespace=kube-system
Pod 수는 클러스터의 Linux 노드 수와 같아야 합니다. 출력은 다음 예와 유사해야 합니다.
User@aksuser:~$ kubectl get ds ama-metrics-node --namespace=kube-system
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
ama-metrics-node 1 1 1 1 1 <none> 10h
Windows 노드가 제대로 배포되었는지 확인
kubectl get ds ama-metrics-win-node --namespace=kube-system
Pod 수는 클러스터의 Windows 노드 수와 같아야 합니다. 출력은 다음 예와 유사해야 합니다.
User@aksuser:~$ kubectl get ds ama-metrics-node --namespace=kube-system
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
ama-metrics-win-node 3 3 3 3 3 <none> 10h
Prometheus에 대해 두 개의 ReplicaSet가 배포되었는지 확인
kubectl get rs --namespace=kube-system
출력은 다음 예와 유사해야 합니다.
User@aksuser:~$kubectl get rs --namespace=kube-system
NAME DESIRED CURRENT READY AGE
ama-metrics-5c974985b8 1 1 1 11h
ama-metrics-ksm-5fcf8dffcd 1 1 1 11h
컨테이너 로깅
DaemonSet가 Linux 노드 풀에 제대로 배포되었는지 확인
kubectl get ds ama-logs --namespace=kube-system
Pod 수는 클러스터의 Linux 노드 수와 같아야 합니다. 출력은 다음 예와 유사해야 합니다.
User@aksuser:~$ kubectl get ds ama-logs --namespace=kube-system
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
ama-logs 2 2 2 2 2 <none> 1d
Windows 노드가 제대로 배포되었는지 확인
kubectl get ds ama-logs-windows --namespace=kube-system
Pod 수는 클러스터의 Windows 노드 수와 같아야 합니다. 출력은 다음 예와 유사해야 합니다.
User@aksuser:~$ kubectl get ds ama-logs-windows --namespace=kube-system
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
ama-logs-windows 2 2 2 2 2 <none> 1d
컨테이너 로깅 솔루션 배포 확인
kubectl get deployment ama-logs-rs --namespace=kube-system
출력은 다음 예와 유사해야 합니다.
User@aksuser:~$ kubectl get deployment ama-logs-rs --namespace=kube-system
NAME READY UP-TO-DATE AVAILABLE AGE
ama-logs-rs 1/1 1 1 24d
CLI를 사용하여 구성 보기
aks show 명령을 사용하여 솔루션 사용 여부, Log Analytics 작업 영역 리소스 ID 및 클러스터에 대한 요약 정보를 확인합니다.
az aks show --resource-group <resourceGroupofAKSCluster> --name <nameofAksCluster>
이 명령은 솔루션에 대한 JSON 형식 정보를 반환합니다.
addonProfiles 섹션에는 다음 예제와 같이 omsagent에 대한 정보가 포함됩니다.
"addonProfiles": {
"omsagent": {
"config": {
"logAnalyticsWorkspaceResourceID": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/my-resource-group/providers/microsoft.operationalinsights/workspaces/my-workspace",
"useAADAuth": "true"
},
"enabled": true,
"identity": null
},
}
다음 단계
- 온보딩을 시도하는 동안 문제가 발생하는 경우 문제 해결 가이드를 검토하세요.
- Azure Portal의 Container insights에서 Kubernetes 모니터링 데이터를 분석하는 방법을 알아봅니다.