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

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

알려진 오류 메시지

다음 표에서는 Container Insights를 사용할 때 발생할 수 있는 알려진 오류를 요약합니다.

오류 메시지 작업
오류 메시지 "선택한 필터에 대한 데이터 없음" 새로 만든 클러스터에 모니터링 데이터 흐름을 만드는 데는 약간의 시간이 걸릴 수 있습니다. 클러스터에 대한 데이터가 표시되도록 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이 애플리케이션에 대해 구성된 회신 URL과 일치하지 않습니다. '<애플리케이션 ID>'." 라이브 로그를 사용하도록 설정하면 이 오류 메시지가 표시될 수 있습니다. 솔루션은 컨테이너 인사이트를 사용하여 실시간으로 컨테이너 데이터 보기를 참조 하세요.

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

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

컨테이너 인사이트를 사용하도록 설정하거나 메트릭 수집을 지원하도록 클러스터를 업데이트하면 "개체 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 일일 한도를 참조 하세요.

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

Container Insights 에이전트 ReplicaSet Pod는 예약에 대한 작업자(또는 에이전트) 노드의 다음 노드 선택기에 종속됩니다.

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

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

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

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

비 AKS 클러스터가 Container Insights에 표시되지 않음

Container Insights에서 AKS가 아닌 클러스터를 보려면 이 인사이트를 지원하는 Log Analytics 작업 영역 및 Container Insights 솔루션 리소스 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 컨테이너 확장 설치 실패

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

이 문제의 해결 방법은 컨테이너 인사이트 에이전트의 기존 리소스(있는 경우)를 클린 것입니다. 그런 다음, Azure Monitor 컨테이너 확장을 사용하도록 설정합니다.

비 AKS 클러스터의 경우

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

    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로 보낼 지원 티켓을 만듭니다.

수신 중인 중복 경고

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

"Container Insights 기능에 대한 액세스를 제한하는 올바른 클러스터 권한이 없습니다. 올바른 권한을 얻으려면 클러스터 관리자에게 문의하세요."

컨테이너 인사이트는 역사적으로 사용자가 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 테이블을 쿼리할 때 이미지 및 이름 속성 값이 채워지지 않음

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

옵션 1

결과에 이러한 속성 값을 포함하도록 다른 테이블을 조인합니다.

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

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

//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 인사이트를 다시 구성하는 단계는 HCI용 AMA 에이전트 복구를 참조하세요.

다음 단계

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