Container Insights에서 로그 수집 구성

이 문서에서는 온보딩된 Kubernetes 클러스터에 대해 Container Insights에서 데이터 수집을 구성하는 방법을 설명합니다. 클러스터에서 Container Insights를 사용하도록 설정하기 위한 지침은 Kubernetes 클러스터에 대해 모니터링 사용을 참조하세요.

구성 방법

Container Insights에서 수집되는 데이터를 구성하고 필터링하는 데 사용하는 두 가지 방법이 있습니다. 설정에 따라 두 방법 중에서 선택하거나 둘 중 한 가지 방법만 사용해야 할 수 있습니다. 두 가지 방법은 다음 섹션의 자세한 정보와 함께 아래 표에 설명되어 있습니다.

메서드 설명
DCR(데이터 수집 규칙) 데이터 수집 규칙Azure Monitor 파이프라인을 사용하여 데이터 수집을 지원하는 지침 집합입니다. Container Insights를 사용하도록 설정하면 DCR이 만들어지고 Azure Portal 또는 다른 방법을 사용하여 이 DCR의 설정을 수정할 수 있습니다.
ConfigMap ConfigMap은 구성 파일 또는 환경 변수와 같은 기밀이 아닌 데이터를 저장할 수 있는 Kubernetes 메커니즘입니다. Container Insights는 수집해야 하는 데이터를 정의하는 특정 설정을 사용하여 각 클러스터에서 ConfigMap을 찾습니다.

DCR을 사용하여 데이터 컬렉션 구성

Container Insights에서 만들어지는 DCR의 이름은 MSCI-<클러스터 지역>-<클러스터 이름>입니다. 구독의 다른 사용자와 함께 이 DCR을 확인하고, Azure Monitor에서 DCR(데이터 수집 규칙) 만들기 및 편집에 설명된 방법을 사용하여 편집할 수 있습니다. 특정 사용자 지정에 대해 DCR을 직접 수정할 수 있지만 아래에 설명된 방법을 사용하여 가장 필요한 구성을 수행할 수 있습니다. 고급 구성을 위해 DCR을 직접 편집하는 방법은 Container Insights의 데이터 변환을 참조하세요.

Important

AKS 클러스터는 시스템이 할당한 관리 ID 또는 사용자가 할당한 관리 ID를 사용해야 합니다. 클러스터가 서비스 주체를 사용하는 경우 클러스터를 업데이트하여 시스템이 할당한 관리 ID 또는 사용자가 할당한 관리 ID를 사용해야 합니다.

Azure Portal을 사용하여 DCR 구성

Azure Portal을 사용하여 Container Insights에서 데이터 수집을 위해 미리 설정된 여러 구성 중에서 선택할 수 있습니다. 이러한 구성에는 특정 우선 순위에 따라 다양한 테이블 집합과 수집 빈도가 포함됩니다. 필요한 데이터만 수집하도록 설정을 사용자 지정할 수도 있습니다. Container Insights를 사용하도록 설정한 후 Azure Portal을 사용하여 기존 클러스터에서 구성을 사용자 지정하거나 클러스터에서 Container Insights를 사용하도록 설정할 때 이 구성을 수행할 수 있습니다.

  1. Azure Portal에서 클러스터를 선택합니다.

  2. 메뉴의 모니터링 섹션에서 인사이트 옵션을 선택합니다.

  3. 클러스터에서 컨테이너 인사이트를 이미 사용하도록 설정한 경우 모니터링 설정 단추를 선택합니다. 그렇지 않은 경우 Azure Monitor 구성을 선택하고, 모니터링 활성화에 대한 자세한 내용은 Azure Monitor를 사용하여 Kubernetes 클러스터에서 모니터링 사용을 참조하세요.

    모니터 설정 단추가 있는 AKS 클러스터의 스크린샷.

  4. AKS 및 Arc 지원 Kubernetes의 경우 클러스터를 아직 관리 ID 인증으로 마이그레이션하지 않았으면 관리 ID 사용을 선택합니다.

  5. 비용 사전 설정 중 하나를 선택합니다.

    온보딩 옵션을 보여 주는 스크린샷.

    비용 사전 설정 수집 빈도 네임스페이스 필터 Syslog 수집 수집된 데이터
    Standard 1분 없음 사용 안 함 모든 표준 컨테이너 인사이트 테이블
    비용 최적화 5분 kube-system, Gatekeeper-system, azure-arc 제외 사용 안 함 모든 표준 컨테이너 인사이트 테이블
    syslog 1분 없음 기본값으로 사용 설정됨 모든 표준 컨테이너 인사이트 테이블
    로그 및 이벤트 1분 없음 사용 안 함 ContainerLog/ContainerLogV2
    KubeEvents
    KubePodInventory
  6. 설정을 사용자 지정하려면 수집 설정 편집을 클릭합니다.

    컬렉션 설정 옵션을 보여 주는 스크린샷.

    속성 설명
    수집 빈도 에이전트가 데이터를 수집하는 빈도를 결정합니다. 유효한 값은 1m 간격으로 1m~30m입니다. 기본값은 1m입니다.
    네임스페이스 필터링 꺼짐: 모든 네임스페이스에서 데이터를 수집합니다.
    Include: 네임스페이스 필드의 값에서만 데이터를 수집합니다.
    Exclude: 네임스페이스 필드의 값을 제외한 모든 네임스페이스에서 데이터를 수집합니다.

    namespaceFilteringMode에 따라 인벤토리 및 성능 데이터를 수집하기 위한 쉼표로 구분된 Kubernetes 네임스페이스의 배열입니다. 예를 들어, Include 설정을 사용하는 namespaces = ["kube-system", "default"]는 이 두 네임스페이스만 수집합니다. Exclude 설정을 사용하면 에이전트는 kube-systemdefault를 제외한 다른 모든 네임스페이스에서 데이터를 수집합니다.
    수집된 데이터 수집할 Container Insights 테이블을 정의합니다. 각 그룹화에 대한 설명은 아래를 참조하세요.
    ContainerLogV2 사용 ContainerLogV2 스키마를 사용하도록 설정하는 부울 플래그입니다. true로 설정하면 stdout/stderr 로그가 ContainerLogV2 테이블에 수집됩니다. 그렇지 않으면 ConfigMap에 달리 지정되지 않는 한 컨테이너 로그가 ContainerLog 테이블에 수집됩니다. 개별 스트림을 지정할 때 ContainerLog 또는 ContainerLogV2에 해당하는 테이블을 포함해야 합니다.
    Syslog 수집 사용 클러스터에서 Syslog 컬렉션을 사용하도록 설정합니다.

    수집된 데이터 옵션을 선택하면 클러스터에 대해 채워진 테이블을 선택할 수 있습니다. 테이블은 가장 일반적인 시나리오별로 그룹화됩니다. 개별 테이블을 지정하려면 다른 방법을 사용하여 DCR을 수정해야 합니다.

    수집된 데이터 옵션을 보여 주는 스크린샷.

    그룹화 테이블 주의
    모두(기본값) 모든 표준 컨테이너 인사이트 테이블 기본 컨테이너 인사이트 시각화를 사용하도록 설정하는 데 필요합니다.
    성능 Perf, InsightsMetrics
    로그 및 이벤트 ContainerLog 또는 ContainerLogV2, KubeEvents, KubePodInventory 관리 Prometheus 메트릭을 사용하도록 설정한 경우 권장됩니다.
    워크로드, 배포 및 HPA InsightsMetrics, KubePodInventory, KubeEvents, ContainerInventory, ContainerNodeInventory, KubeNodeInventory, KubeServices
    지속성 볼륨 InsightsMetrics, KubePVInventory
  7. 구성을 클릭하여 설정을 저장합니다.

DCR에 대해 적용되는 테이블 및 메트릭

수집 빈도네임스페이스 필터링에 대한 설정이 모든 Container Insights 데이터에 적용되는 것은 아닙니다. 다음 표에는 컨테이너 인사이트에서 사용하는 Log Analytics 작업 영역의 테이블과 각 테이블에 적용되는 설정을 나열되어 있습니다.

테이블 이름 간격 네임스페이스 설명
ContainerInventory
ContainerNodeInventory 아니요 Kubernetes 노드는 네임스페이스 범위 리소스가 아니므로 네임스페이스에 대한 데이터 수집 설정은 적용할 수 없습니다.
KubeNodeInventory 아니요 네임스페이스에 대한 데이터 수집 설정이 적용되지 않습니다. Kubernetes 노드는 네임스페이스 범위 리소스가 아닙니다.
KubePodInventory
KubePVInventory
KubeServices
KubeEvents 간격에 대한 데이터 수집 설정은 Kubernetes 이벤트에 적용되지 않습니다.
성능 Kubernetes 노드는 네임스페이스 범위 개체가 아니기 때문에 네임스페이스에 대한 데이터 수집 설정은 Kubernetes 노드 관련 메트릭에 적용할 수 없습니다.
InsightsMetrics 데이터 수집 설정은 container.azm.ms/kubestate, container.azm.ms/pv 및 container.azm.ms/gpu 네임스페이스를 수집하는 메트릭에만 적용됩니다.
메트릭 네임스페이스 간격 네임스페이스 설명
Insights.container/nodes 아니요 노드가 네임스페이스 범위 리소스가 아닙니다.
Insights.container/nodes
Insights.container/containers
Insights.container/persistentvolumes

DCR의 스트림 값

CLI 또는 ARM을 사용하여 수집할 테이블을 지정할 때 Log Analytics 작업 영역의 특정 테이블에 해당하는 스트림 이름을 지정합니다. 다음 표에는 각 테이블의 스트림 이름이 나열되어 있습니다.

참고 항목

데이터 수집 규칙 구조에 익숙한 경우 이 테이블의 스트림 이름은 DCR의 dataFlows 섹션에서 지정됩니다.

스트림 컨테이너 인사이트 테이블
Microsoft-ContainerInventory 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 성능

1 동일한 DCR에서 Microsoft-ContainerLogV2 및 Microsoft-ContainerLogV2-HighScale을 둘 다 사용하면 안 됩니다. 이 경우 중복 데이터가 발생합니다.

여러 클러스터와 DCR 공유

Kubernetes 클러스터에서 Container Insights를 사용하도록 설정하면 해당 클러스터에 대해 새 DCR이 만들어지고 각 클러스터에 대한 DCR을 별도로 수정할 수 있습니다. 사용자 지정 모니터링 구성이 있는 여러 클러스터가 있는 경우 여러 클러스터와 단일 DCR을 공유할 수 있습니다. 그런 다음, 연결된 모든 클러스터에 대해 자동으로 구현되는 단일 DCR을 변경할 수 있습니다.

DCR은 DCRA(데이터 수집 규칙 연결)을 사용하여 클러스터와 연결됩니다. 미리 보기 DCR 환경을 사용하여 각 클러스터에 대한 기존 DCR 연결을 보고 제거합니다. 그런 다음, 이 기능을 사용하여 여러 클러스터에 대한 단일 DCR에 연결을 추가할 수 있습니다.

ConfigMap을 사용하여 데이터 컬렉션 구성

ConfigMap은 구성 파일 또는 환경 변수와 같은 기밀이 아닌 데이터를 저장할 수 있는 Kubernetes 메커니즘입니다. Container Insights는 수집해야 하는 데이터를 정의하는 특정 설정을 사용하여 각 클러스터에서 ConfigMap을 찾습니다.

Important

ConfigMap은 전역 목록으로, 컨테이너 인사이트용 에이전트에 하나의 ConfigMap만 적용할 수 있습니다. 다른 ConfigMap을 적용하면 이전 ConfigMap 컬렉션 설정이 재정의됩니다.

필수 조건

  • 컨테이너 워크로드에서의 stdout, stderr 및 환경 변수 수집이 지원되는 최소 에이전트 버전은 ciprod06142019 이상입니다.

ConfigMap 구성 및 배포

ConfigMap 구성 파일을 구성하고 클러스터에 배포하려면 다음 절차를 사용합니다.

  1. Container Insights용 ConfigMap이 아직 없는 경우 템플릿 ConfigMap YAML 파일을 다운로드한 후 편집기에서 엽니다.

  2. 사용자 지정 항목을 사용하여 ConfigMap YAML 파일을 편집합니다. 이 템플릿에는 설명이 포함된 모든 유효한 설정이 포함됩니다. 설정을 사용하려면 주석 문자(#)를 제거하고 해당 값을 설정합니다.

  3. 다음 kubectl 명령을 실행하여 ConfigMap을 만듭니다.

    kubectl config set-context <cluster-name>
    kubectl apply -f <configmap_yaml_file.yaml>
    
    # Example: 
    kubectl config set-context my-cluster
    kubectl apply -f container-azm-ms-agentconfig.yaml
    

    구성 변경을 적용하려면 몇 분 정도 걸릴 수 있습니다. 그런 다음, 클러스터의 모든 Azure Monitor 에이전트 Pod가 다시 시작됩니다. 다시 시작은 모든 Azure Monitor 에이전트 Pod에 대한 롤링 다시 시작이므로 모든 Pod가 동시에 다시 시작되는 것은 아닙니다. 다시 시작이 완료되면 다음 결과와 유사한 메시지가 수신됩니다.

    configmap "container-azm-ms-agentconfig" created`.
    

구성 확인

구성이 클러스터에 성공적으로 적용되었는지 확인하려면 다음 명령을 사용하여 에이전트 Pod에서 로그를 검토합니다.

kubectl logs ama-logs-fdf58 -n kube-system -c ama-logs

Azure Monitor Agent Pod에 구성 오류가 있는 경우 출력에 다음 예제와 유사한 오류가 표시됩니다.

***************Start Config Processing******************** 
config::unsupported/missing config schema version - 'v21' , using defaults

다음 옵션을 사용하여 구성 변경 문제를 추가로 해결할 수 있습니다.

  • 에이전트 Pod에서 동일한 kubectl logs 명령을 사용합니다.

  • 라이브 로그에서 다음과 유사한 오류를 검토합니다.

    config::error::Exception while parsing config map for log collection/env variable settings: \nparse error on value \"$\" ($end), using defaults, please check config map for errors
    
  • 데이터는 구성 오류에 대한 오류 심각도와 함께 1시간에 1번씩 Log Analytics 작업 영역의 KubeMonAgentEvents 테이블로 전송됩니다. 오류가 없는 경우 테이블의 항목에 있는 데이터는 오류를 보고하지 않는 정보 심각도입니다. Tags 열에는 오류가 발생한 Pod 및 컨테이너 ID에 대한 상세 정보와 지난 1시간 동안의 첫 번째 발생, 마지막 발생 및 횟수가 포함됩니다.

스키마 버전 확인

지원되는 구성 스키마 버전은 Azure Monitor 에이전트 Pod에서 Pod 주석(schema-versions) 형태로 사용할 수 있습니다. 다음 kubectl 명령을 사용하여 확인할 수 있습니다.

kubectl describe pod ama-logs-fdf58 -n=kube-system.

ConfigMap 설정

다음 표에서는 ConfigMap을 사용하여 데이터 컬렉션을 제어하도록 구성할 수 있는 설정을 설명합니다.

설정 데이터 형식 설명
schema-version 문자열(대/소문자 구분) v1 이 ConfigMap을 구문 분석할 때 에이전트에서 사용됩니다. 현재 지원되는 스키마 버전은 v1입니다. 이 값 수정은 지원되지 않으며 ConfigMap이 평가될 때 거부됩니다.
config-version 문자열 원본 제어 시스템/리포지토리에서 이 구성 파일의 버전을 추적할 수 있습니다. 허용되는 최대 문자 수는 10이고 다른 모든 문자는 잘립니다.
[log_collection_settings]
[stdout]
enabled
부울 true
false
stdout 컨테이너 로그 컬렉션의 사용 여부를 제어합니다. true로 설정하고 stdout 로그 수집에 대해 네임스페이스가 제외되지 않으면 클러스터의 모든 Pod 및 노드에 있는 모든 컨테이너에서 stdout 로그가 수집됩니다. ConfigMap에서 지정하지 않은 경우 기본값은 true입니다.
[stdout]
exclude_namespaces
문자열 쉼표로 구분된 배열 stdout 로그가 수집되지 않을 Kubernetes 네임스페이스의 배열입니다. 이 설정은 enabledtrue로 설정된 경우에만 유효합니다. ConfigMap에서 지정하지 않은 경우 기본값은
["kube-system","gatekeeper-system"].
[stderr]
enabled
부울 true
false
stderr 컨테이너 로그 컬렉션의 사용 여부를 제어합니다. true로 설정하고 stderr 로그 수집에 대해 네임스페이스가 제외되지 않으면 클러스터의 모든 Pod 및 노드에 있는 모든 컨테이너에서 stderr 로그가 수집됩니다. ConfigMap에서 지정하지 않은 경우 기본값은 true입니다.
[stderr]
exclude_namespaces
문자열 쉼표로 구분된 배열 stderr 로그가 수집되지 않을 Kubernetes 네임스페이스의 배열입니다. 이 설정은 enabledtrue로 설정된 경우에만 유효합니다. ConfigMap에서 지정하지 않은 경우 기본값은
["kube-system","gatekeeper-system"].
[env_var]
enabled
부울 true
false
클러스터의 모든 Pod 및 노드에서 환경 변수 컬렉션을 제어합니다. ConfigMap에서 지정하지 않은 경우 기본값은 true입니다.
[enrich_container_logs]
enabled
부울 true
false
컨테이너 로그 보강을 제어하여 클러스터의 모든 컨테이너 로그에 대해 ContainerLog 테이블에 기록된 모든 로그 레코드에 대해 NameImage 속성 값을 채웁니다. ConfigMap에서 지정하지 않은 경우 기본값은 false입니다.
[collect_all_kube_events]
enabled
부울 true
false
모든 형식의 Kube 이벤트가 수집되는지 여부를 제어합니다. 기본적으로 Normal 유형의 Kube 이벤트는 수집되지 않습니다. 이 설정이 true이면 Normal 이벤트를 더 이상 필터링하지 않고 모든 이벤트를 수집합니다. ConfigMap에서 지정하지 않은 경우 기본값은 false입니다.
[schema]
containerlog_schema_version
문자열(대/소문자 구분) v2
v1
로그 수집 형식을 설정합니다. 인 경우 v2ContainerLogV2 테이블이 사용됩니다. 인 경우 v1ContainerLog 테이블이 사용됩니다(이 테이블은 더 이상 사용되지 않음). Azure CLI 버전 2.54.0 이상에서 컨테이너 인사이트를 사용하도록 설정하는 클러스터의 경우 기본 설정은 v2입니다. 자세한 내용은 컨테이너 인사이트 로그 스키마를 참조하세요.
[enable_multiline_logs]
enabled
부울 true
false
여러 줄 컨테이너 로그의 사용 여부를 제어합니다. 자세한 내용은 컨테이너 인사이트의 여러 줄 로깅을 참조하세요. ConfigMap에서 지정하지 않은 경우 기본값은 false입니다. 이렇게 하려면 schema 설정이 v2여야 합니다.
[metadata_collection]
enabled
Boolean true
false
ContainerLogV2 테이블의 KubernetesMetadata 열에서 메타데이터가 수집되는지 여부를 제어합니다.
[metadata_collection]
include_fields
문자열 쉼표로 구분된 배열 포함할 메타데이터 필드 목록입니다. 이 설정을 사용하지 않으면 모든 필드가 수집됩니다. 유효한 값은 ["podLabels","podAnnotations","podUid","image","imageID","imageRepo","imageTag"]입니다.
[metric_collection_settings]
[collect_kube_system_pv_metrics]
enabled
부울 true
false
PV(영구 볼륨) 사용 현황 메트릭을 Kube 시스템 네임스페이스에서 수집할 수 있습니다. 기본적으로 kube 시스템 네임스페이스에서 영구 볼륨 클레임이 있는 영구 볼륨에 대한 사용 현황 메트릭은 수집되지 않습니다. 이 설정을 true로 설정하면 모든 네임스페이스에 대한 PV 사용 현황 메트릭이 수집됩니다. ConfigMap에서 지정하지 않은 경우 기본값은 false입니다.
[agent_settings]
[proxy_config]
ignore_proxy_settings
부울 true
false
true이면 프록시 설정이 무시됩니다. AKS와 Arc 지원 Kubernetes 환경 모두에서 클러스터가 정방향 프록시로 구성되면 프록시 설정이 자동으로 적용되고 에이전트에 사용됩니다. AMPLS + 프록시와 같은 특정 구성의 경우 프록시 구성을 무시할 수 있습니다. ConfigMap에서 지정하지 않은 경우 기본값은 false입니다.

다음 단계