다음을 통해 공유


컨테이너 인사이트 문제 해결

컨테이너 인사이트를 사용하여 AKS(Azure Kubernetes Service) 클러스터의 모니터링을 구성할 때 데이터 수집 또는 보고 상태를 방해하는 문제가 발생할 수 있습니다. 이 문서에서는 몇 가지 일반적인 문제와 문제 해결 단계에 대해 설명합니다.

알려진 오류 메시지

다음 표에는 컨테이너 인사이트를 사용할 때 발생할 수 있는 알려진 오류가 요약되어 있습니다.

오류 메시지 작업
오류 메시지 "선택한 필터에 대한 데이터 없음" 새로 만든 클러스터에 모니터링 데이터 흐름을 만드는 데는 약간의 시간이 걸릴 수 있습니다. 클러스터에 대한 데이터가 표시될 때까지 10~15분 정도 기다려 주세요.

데이터가 여전히 표시되지 않으면 Log Analytics 작업 영역이 disableLocalAuth = true에 대해 구성되었는지 확인합니다. 그렇다면 disableLocalAuth = false로 다시 업데이트합니다.

az resource show --ids "/subscriptions/[Your subscription ID]/resourcegroups/[Your resource group]/providers/microsoft.operationalinsights/workspaces/[Your workspace name]"

az resource update --ids "/subscriptions/[Your subscription ID]/resourcegroups/[Your resource group]/providers/microsoft.operationalinsights/workspaces/[Your workspace name]" --api-version "2021-06-01" --set properties.features.disableLocalAuth=False
오류 메시지 "데이터 검색 오류" AKS 클러스터가 상태 및 성능 모니터링을 설정하는 동안 클러스터와 Log Analytics 작업 영역 간에 연결이 설정됩니다. Log Analytics 작업 영역은 클러스터에 대한 모든 모니터링 데이터를 저장하는 데 사용됩니다. 이 오류는 Log Analytics 작업 영역이 삭제된 경우 발생할 수 있습니다. 작업 영역이 삭제되었는지 확인합니다. 그렇다면 컨테이너 인사이트로 클러스터 모니터링을 다시 사용하도록 설정합니다. 그런 다음 기존 작업 영역을 지정하거나 새 작업 영역을 만듭니다. 다시 사용하도록 설정하려면 클러스터에 대한 모니터링을 사용하지 않도록 설정하고 컨테이너 인사이트를 다시 사용하도록 설정합니다.
az aks cli를 통해 컨테이너 인사이트를 추가한 후 "데이터 검색 오류" 발생 az aks cli를 사용하여 모니터링을 사용하도록 설정하면 컨테이너 인사이트가 제대로 배포되지 않을 수 있습니다. 솔루션이 배포되었는지 확인합니다. 확인하려면 Log Analytics 작업 영역으로 이동하고 왼쪽 창에서 레거시 솔루션을 선택하여 솔루션을 사용할 수 있는지 확인합니다. 이 문제를 해결하려면 솔루션을 다시 배포합니다. 컨테이너 인사이트 사용의 지침을 따릅니다.
오류 메시지 "구독 등록 누락" "Microsoft.OperationsManagement에 대한 구독 등록 누락" 오류가 표시되면 Microsoft.OperationsManagement 리소스 공급자를 작업 영역이 정의된 구독에 등록하여 해결할 수 있습니다. 단계에 대해서는 리소스 공급자 등록 오류 해결을 참조하세요.
오류 메시지 "요청에 지정된 회신 URL이 '<application ID>' 애플리케이션에 대해 구성된 회신 URL과 일치하지 않습니다." 라이브 로그를 사용하도록 설정하면 이 오류 메시지가 표시될 수 있습니다. 솔루션에 대해서는 컨테이너 인사이트를 사용하여 컨테이너 데이터를 실시간으로 보기를 참조하세요.

문제 진단을 돕기 위해 문제 해결 스크립트를 제공했습니다.

온보딩 또는 업데이트 작업 중 권한 부여 오류

컨테이너 인사이트를 사용하도록 설정하거나 메트릭 수집을 지원하도록 클러스터를 업데이트할 때 "개체 ID가 <user's objectId>인 클라이언트 <user's Identity>에 범위에 대해 작업 Microsoft.Authorization/roleAssignments/write를 수행할 권한이 없습니다"와 같은 오류가 표시될 수 있습니다.

온보딩 또는 업데이트 프로세스 중에 클러스터 리소스에서 모니터링 메트릭 게시자 역할 할당을 시도합니다. 컨테이너 인사이트를 사용하도록 설정하는 프로세스를 시작하거나 메트릭을 수집하도록 업데이트하는 프로세스를 시작하는 사용자는 AKS 클러스터 리소스 범위에 대한 Microsoft.Authorization/roleAssignments/write 권한에 액세스할 수 있어야 합니다. 소유자 및 사용자 액세스 관리자 기본 제공 역할의 구성원만이 이 사용 권한에 대한 액세스 권한을 부여 받습니다. 보안 정책에서 세분화된 수준의 권한을 할당해야 하는 경우 Azure 사용자 지정 역할을 참조하고 필요한 사용자에게 권한을 할당합니다.

Azure Portal에서 이 역할을 수동으로 부여할 수도 있습니다. 게시자 역할을 모니터링 메트릭 범위에 할당합니다. 자세한 단계는 Azure Portal을 사용하여 Azure 역할 할당을 참조하세요.

컨테이너 인사이트가 사용하도록 설정되었지만 정보를 보고하지 않음

상태 정보를 볼 수 없거나 로그 쿼리에서 결과가 반환되지 않는 경우 문제를 진단하려면:

  1. 다음 명령을 실행하여 에이전트의 상태를 확인합니다.

    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
    
  2. Windows Server 노드가 있는 경우 다음 명령을 실행하여 에이전트의 상태를 확인합니다.

    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
    
  3. 다음 명령을 사용하여 배포 상태를 확인합니다.

    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
    
  4. Pod의 상태를 확인하여 kubectl get pods --namespace=kube-system 명령을 통해 실행 중인지 확인합니다.

    출력은 ama-logs의 상태가 Running인 다음 예와 유사해야 합니다.

    User@aksuser:~$ kubectl get pods --namespace=kube-system
    NAME                                READY     STATUS    RESTARTS   AGE
    aks-ssh-139866255-5n7k5             1/1       Running   0          8d
    azure-vote-back-4149398501-7skz0    1/1       Running   0          22d
    azure-vote-front-3826909965-30n62   1/1       Running   0          22d
    ama-logs-484hw                      1/1       Running   0          1d
    ama-logs-fkq7g                      1/1       Running   0          1d
    ama-logs-windows-6drwq              1/1       Running   0          1d
    
  5. Pod가 실행 중 상태이지만 Log Analytics에 데이터가 없거나 데이터가 하루 중 특정 시간에만 전송되는 것처럼 보이는 경우 일일 한도가 충족된 것을 나타낼 수 있습니다. 이 제한이 매일 충족되면 데이터가 Log Analytics 작업 영역으로 더 이상 수집되지 않고 다시 설정 시간에 다시 설정됩니다. 자세한 내용은 Log Analytics 일일 한도를 참조하세요.

  6. Terraform을 사용하여 컨테이너 인사이트가 사용하도록 설정되고 msi_auth_for_monitoring_enabledtrue로 설정된 경우 DCR 및 DCRA 리소스도 배포되어 로그 컬렉션을 사용하도록 설정하는지 확인합니다. 자세한 단계는 컨테이너 인사이트 사용을 참조하세요.

컨테이너 인사이트 에이전트 ReplicaSet Pod는 비 AKS 클러스터에서 예약되지 않습니다.

컨테이너 인사이트 에이전트 ReplicaSet Pod는 일정에 대해 작업자(또는 에이전트) 노드의 다음 노드 선택기에 종속됩니다.

nodeSelector:
  beta.kubernetes.io/os: Linux
  kubernetes.io/role: agent

작업자 노드에 연결된 노드 레이블이 없으면 에이전트 ReplicaSet Pod가 예약되지 않습니다. 레이블을 부착하는 방법에 대한 지침은 Kubernetes 레이블 선택기 할당을 참조하세요.

Azure가 아닌 클러스터에 있는 노드 및 컨테이너의 CPU 또는 메모리는 성능 차트에 표시되지 않습니다.

컨테이너 인사이트 에이전트 Pod는 노드 에이전트의 cAdvisor 엔드포인트를 사용하여 성능 메트릭을 수집합니다. 성능 메트릭을 수집하기 위해 클러스터의 모든 노드에서 cAdvisor secure port: 10250 또는 cAdvisor unsecure port: 10255를 열수 있도록 노드의 컨테이너화된 에이전트가 구성되어 있는지 확인합니다. 자세한 내용은 하이브리드 Kubernetes 클러스터의 필수 조건을 참조하세요 .

비 AKS 클러스터가 컨테이너 인사이트에 표시되지 않음

컨테이너 인사이트에서 비 AKS 클러스터를 보려면 이 인사이트를 지원하는 Log Analytics 작업 영역과 컨테이너 인사이트 솔루션 리소스 ContainerInsights(작업 영역)에 대한 읽기 권한이 필요합니다.

메트릭이 수집되지 않습니다.

  1. 다음 CLI 명령을 사용하여 모니터링 메트릭 게시자 역할 할당이 존재하는지 확인합니다.

    az role assignment list --assignee "SP/UserassignedMSI for Azure Monitor Agent" --scope "/subscriptions/<subid>/resourcegroups/<RG>/providers/Microsoft.ContainerService/managedClusters/<clustername>" --role "Monitoring Metrics Publisher"
    

    MSI가 있는 클러스터의 경우 Azure Monitor 에이전트에 대해 사용자가 할당한 클라이언트 ID는 모니터링을 사용하거나 사용하지 않도록 설정할 때마다 변경되므로 현재 MSI 클라이언트 ID에 역할 할당이 있어야 합니다.

  2. Microsoft Entra Pod ID를 사용하도록 설정하고 MSI를 사용하는 클러스터의 경우:

    • 다음 명령을 사용하여 필수 레이블 kubernetes.azure.com/managedby: aks가 Azure Monitor 에이전트 Pod에 있는지 확인합니다.

      kubectl get pods --show-labels -n kube-system | grep ama-logs

    • https://github.com/Azure/aad-pod-identity#1-deploy-aad-pod-identity에서 지원되는 메서드 중 하나를 사용하여 Pod ID를 사용하도록 설정한 경우 예외가 사용하도록 설정되는지 확인합니다.

      다음 명령을 실행하여 확인합니다.

      kubectl get AzurePodIdentityException -A -o yaml

      다음 예와 유사한 출력이 표시되어야 합니다.

      apiVersion: "aadpodidentity.k8s.io/v1"
      kind: AzurePodIdentityException
      metadata:
      name: mic-exception
      namespace: default
      spec:
      podLabels:
      app: mic
      component: mic
      ---
      apiVersion: "aadpodidentity.k8s.io/v1"
      kind: AzurePodIdentityException
      metadata:
      name: aks-addon-exception
      namespace: kube-system
      spec:
      podLabels:
      kubernetes.azure.com/managedby: aks
      

Azure Arc 지원 Kubernetes 클러스터에서 Azure Monitor 컨테이너 확장 설치 실패

"매니페스트에 이미 존재하는 리소스가 포함되어 있습니다" 오류는 컨테이너 인사이트 에이전트의 리소스가 이미 Azure Arc 지원 Kubernetes 클러스터에 있음을 나타냅니다. 이 오류는 컨테이너 인사이트 에이전트가 이미 설치되었음을 나타냅니다. Azure Arc를 통해 연결된 AKS 클러스터인 경우 azuremonitor-containers Helm 차트 또는 모니터링 추가 기능을 통해 설치됩니다.

이 문제에 대한 솔루션은 컨테이너 인사이트 에이전트의 기존 리소스가 있는 경우 이를 정리하는 것입니다. 그런 다음 Azure Monitor 컨테이너 확장을 사용하도록 설정합니다.

비 AKS 클러스터의 경우

  1. Azure Arc에 연결된 K8s 클러스터에 대해 다음 명령을 실행하여 azmon-containers-release-1 Helm 차트 릴리스가 있는지 여부를 확인합니다.

    helm list -A

  2. 이전 명령의 출력에 azmon-containers-release-1이 있다고 표시되면 Helm 차트 릴리스를 삭제합니다.

    helm del azmon-containers-release-1

AKS 클러스터의 경우

  1. 다음 명령을 실행하고 Azure Monitor 에이전트 추가 기능 프로필을 찾아 AKS 모니터링 추가 기능이 사용하도록 설정되었는지 확인합니다.

    az  account set -s <clusterSubscriptionId>
    az aks show -g <clusterResourceGroup> -n <clusterName>
    
  2. 출력에 Log Analytics 작업 영역 리소스 ID가 있는 Azure Monitor 에이전트 추가 기능 프로필 구성이 포함된 경우 이 정보는 AKS 모니터링 추가 기능이 사용하도록 설정되어 있는 상태이며 이는 사용하지 않도록 설정해야 합니다.

    az aks disable-addons -a monitoring -g <clusterResourceGroup> -n <clusterName>

이전 단계로 Azure Monitor 컨테이너 확장 설치 문제가 해결되지 않은 경우 추가 조사를 위해 Microsoft에 보낼 지원 티켓을 만듭니다.

중복 경고 수신 중

컨테이너 인사이트 권장 경고를 사용하지 않도록 설정하지 않고 Prometheus 경고 규칙을 사용하도록 설정했을 수 있습니다. 컨테이너 인사이트 권장 경고에서 Prometheus 권장 경고 규칙(미리 보기)으로 마이그레이션을 참조하세요.

"컨테이너 인사이트 기능에 대한 액세스를 제한하는 올바른 클러스터 권한이 없습니다. 올바른 권한을 가져오려면 클러스터 관리자에게 문의하세요."라는 정보 배너가 표시됩니다.

컨테이너 인사이트는 역사적으로 사용자가 Log Analytics 작업 영역의 액세스 권한을 기반으로 Azure Portal 환경에 액세스할 수 있도록 허용했습니다. 이제 Azure Portal 환경에 대한 액세스를 제공하기 위해 클러스터 수준 권한을 확인합니다. 이 권한을 할당하려면 클러스터 관리자가 필요할 수 있습니다.

기본 읽기 전용 클러스터 수준 액세스의 경우 다음 형식의 클러스터에 대해 모니터링 읽기 권한자 역할을 할당합니다.

  • Kubernetes RBAC(역할 기반 액세스 제어) 권한 부여가 사용하도록 설정되지 않은 AKS
  • Microsoft Entra SAML 기반 Single Sign-On으로 사용하도록 설정된 AKS
  • Kubernetes RBAC 권한 부여를 사용하도록 설정된 AKS
  • 클러스터 역할 바인딩 clusterMonitoringUser로 구성된 AKS
  • Azure Arc 지원 Kubernetes 클러스터

AKS에 대한 역할을 할당하는 방법에 대한 자세한 내용은 사용자 또는 그룹에 역할 권한 할당을 참조하고 역할 할당에 대한 자세한 내용은 AKS(Azure Kubernetes Service)에 대한 액세스 및 ID 옵션을 참조하세요.

ContainerLog 테이블을 쿼리하면 채워지는 Image 및 Name 속성 값이 표시되지 않습니다.

ciprod12042019 버전 이상의 에이전트에서는 수집된 로그 데이터에서 발생하는 비용을 최소화하기 위해 기본적으로 이 두 가지 속성이 모든 로그 줄에 대해 채워지지 않습니다. 이러한 속성이 값과 함께 포함된 테이블을 쿼리할 수 있는 두 가지 옵션이 있습니다.

옵션 1

다른 테이블을 조인하여 이러한 속성 값을 결과에 포함시킵니다.

ContainerID 속성에 조인하여 ContainerInventory 테이블의 ImageImageTag 속성을 포함하도록 쿼리를 수정합니다. ContainerID 속성에 조인하여 KubepodInventory 테이블의 ContainerName 필드에서 Name 속성(이전에는 ContainerLog 테이블에 표시됨)을 포함할 수 있습니다. 이 옵션을 선택하는 것이 좋습니다.

다음 예제는 조인을 사용하여 이러한 필드 값을 가져오는 방법을 설명하는 자세한 쿼리 샘플입니다.

//Let's say we're querying an hour's worth of logs
let startTime = ago(1h);
let endTime = now();
//Below gets the latest Image & ImageTag for every containerID, during the time window
let ContainerInv = ContainerInventory | where TimeGenerated >= startTime and TimeGenerated < endTime | summarize arg_max(TimeGenerated, *)  by ContainerID, Image, ImageTag | project-away TimeGenerated | project ContainerID1=ContainerID, Image1=Image ,ImageTag1=ImageTag;
//Below gets the latest Name for every containerID, during the time window
let KubePodInv  = KubePodInventory | where ContainerID != "" | where TimeGenerated >= startTime | where TimeGenerated < endTime | summarize arg_max(TimeGenerated, *)  by ContainerID2 = ContainerID, Name1=ContainerName | project ContainerID2 , Name1;
//Now join the above 2 to get a 'jointed table' that has name, image & imagetag. Outer left is safer in case there are no kubepod records or if they're latent
let ContainerData = ContainerInv | join kind=leftouter (KubePodInv) on $left.ContainerID1 == $right.ContainerID2;
//Now join ContainerLog table with the 'jointed table' above and project-away redundant fields/columns and rename columns that were rewritten
//Outer left is safer so you don't lose logs even if we can't find container metadata for loglines (due to latency, time skew between data types, etc.)
ContainerLog
| where TimeGenerated >= startTime and TimeGenerated < endTime
| join kind= leftouter (
  ContainerData
) on $left.ContainerID == $right.ContainerID2 | project-away ContainerID1, ContainerID2, Name, Image, ImageTag | project-rename Name = Name1, Image=Image1, ImageTag=ImageTag1

옵션 2

모든 컨테이너 로그 줄에 대해 이러한 속성에 대한 컬렉션을 다시 사용하도록 설정합니다.

수반되는 쿼리 변경으로 인해 첫 번째 옵션이 편리하지 않은 경우 이러한 필드를 다시 수집할 수 있습니다. 데이터 수집 구성 설정에 설명된 대로 에이전트 구성 맵에서 log_collection_settings.enrich_container_logs 설정을 사용하도록 설정합니다.

참고 항목

노드가 50개 이상인 대형 클러스터에는 두 번째 옵션을 사용하지 않는 것이 좋습니다. 이 보강을 수행하기 위해 클러스터의 모든 노드에서 API 서버 호출을 생성합니다. 또한 이 옵션은 수집된 모든 로그 줄에 대한 데이터 크기를 늘립니다.

온보딩 후 클러스터를 업그레이드할 수 없음

시나리오는 다음과 같습니다. Azure Kubernetes Service 클러스터에 대해 컨테이너 인사이트를 사용하도록 설정했습니다. 그런 다음, 클러스터가 해당 데이터를 보내는 Log Analytics 작업 영역을 삭제했습니다. 이제 클러스터를 업그레이드하려고 하면 실패합니다. 이 문제를 해결하려면 모니터링을 사용하지 않도록 설정한 다음, 구독의 다른 유효한 작업 영역을 참조하여 사용하도록 다시 설정해야 합니다. 클러스터 업그레이드를 다시 수행하려고 하면 성공적으로 처리되고 완료됩니다.

Azure Stack HCI 클러스터에서 로그를 수집하지 않음

2023년 11월 이전에 클러스터를 등록했거나 HCI Insights를 구성한 경우 Arc for Servers Insights, VM Insights, Container Insights, 클라우드용 Defender 또는 Microsoft Sentinel과 같은 HCI의 Azure Monitor 에이전트를 사용하는 기능이 로그 및 이벤트 데이터를 제대로 수집하지 못할 수 있습니다. 에이전트 및 HCI Insights를 다시 구성하는 단계는 HCI용 AMA 에이전트 복구를 참조하세요.

다음 단계

AKS 클러스터 노드 및 Pod에 대한 상태 메트릭을 캡처하기 위해 모니터링을 사용하도록 설정하면 Azure Portal에서 이러한 상태 메트릭을 사용할 수 있습니다. 컨테이너 인사이트 사용 방법을 알아보려면 Azure Kubernetes Service 상태 보기를 참조하세요.