ConfigMap을 사용하여 컨테이너 인사이트에서 데이터 수집 구성

이 문서에서는 ConfigMap을 사용하여 컨테이너 인사이트에서 데이터 수집을 구성하는 방법을 설명합니다. ConfigMaps는 구성 파일 또는 환경 변수와 같은 기밀이 아닌 데이터를 저장할 수 있는 Kubernetes 메커니즘입니다.

ConfigMap은 주로 클러스터의 컨테이너 로그 및 환경 변수의 데이터 수집을 구성하는 데 사용됩니다. stdout 및 stderr 로그를 개별적으로 구성하고 여러 줄 로깅을 사용하도록 설정할 수도 있습니다. ConfigMap을 사용하여 수행할 수 있는 특정 구성에는 다음이 포함됩니다.

  • stdout 및 stderr 로그에 대한 네임스페이스 필터링 사용/사용 안 함
  • 클러스터에 대한 환경 변수 컬렉션 사용/사용 안 함
  • 일반 Kube 이벤트에 대한 필터
  • 로그 스키마 선택
  • 여러 줄 로깅 사용/사용 안 함
  • 프록시 설정 무시

Important

컨테이너 인사이트에서 데이터 수집을 완전히 구성하려면 각 메서드가 다른 설정 집합의 구성을 허용하므로 클러스터에 대한 ConfigMap 및 DCR(데이터 수집 규칙)을 모두 편집해야 할 수 있습니다.

설정 목록과 DCR을 사용하여 데이터 수집을 구성하기 위한 프로세스에 대해서는 데이터 수집 규칙을 사용하여 컨테이너 인사이트에서 데이터 수집 구성을 참조하세요.

필수 조건

  • ConfigMap은 전역 목록으로, 컨테이너 인사이트용 에이전트에 하나의 ConfigMap만 적용할 수 있습니다. 다른 ConfigMap을 적용하면 이전 ConfigMap 컬렉션 설정이 재정의됩니다.
  • 컨테이너 워크로드에서의 stdout, stderr 및 환경 변수 수집이 지원되는 최소 에이전트 버전은 ciprod06142019 이상입니다. 에이전트 버전을 확인하려면 노드 탭에서 노드를 선택합니다. 속성 창에서 에이전트 이미지 태그 속성의 값을 확인합니다. 에이전트 버전 및 각 릴리스에 포함되는 내용에 대한 자세한 내용은 에이전트 릴리스 정보를 참조하세요.

ConfigMap 구성 및 배포

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

  1. 템플릿 ConfigMap YAML 파일을 다운로드하고 편집기에서 엽니다. ConfigMap 파일이 이미 있는 경우 해당 파일을 사용할 수 있습니다.

  2. 데이터 컬렉션 설정에 설명된 설정을 사용하여 사용자 지정으로 ConfigMap YAML 파일을 편집합니다

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

    kubectl apply -f <configmap_yaml_file.yaml>
    

    예시:

    kubectl apply -f container-azm-ms-agentconfig.yaml
    

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

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

데이터 컬렉션 설정

다음 표에서는 데이터 컬렉션을 제어하기 위해 구성할 수 있는 설정을 설명합니다.

설정 데이터 형식 설명
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입니다. 환경 변수 컬렉션을 전역적으로 사용하도록 설정한 경우 Dockerfile 설정을 사용하거나 env: 섹션 아래의 Pod용 구성 파일에서 환경 변수 AZMON_COLLECT_ENVFalse로 설정하여 특정 컨테이너에 대해 사용하지 않도록 설정할 수 있습니다. 환경 변수 컬렉션이 전역적으로 사용하지 않도록 설정된 경우 특정 컨테이너에 대한 컬렉션을 사용할 수 없습니다. 컨테이너 수준에서 적용할 수 있는 유일한 재정의는 컬렉션이 이미 전역적으로 사용하도록 설정된 경우 컬렉션을 사용하지 않도록 설정하는 것입니다.
[enrich_container_logs] enabled 부울 true
false
컨테이너 로그 보강을 제어하여 클러스터의 모든 컨테이너 로그에 대해 ContainerLogV2 또는 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여야 합니다.
[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입니다.

구성 확인

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

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

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

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

구성 변경 내용 적용과 관련한 오류도 검토할 수 있습니다. 다음 옵션을 사용하여 구성 변경의 추가 문제 해결을 수행할 수 있습니다.

  • 같은 kubectl logs 명령을 사용하여 에이전트 Pod 로그에서

  • 라이브 로그에서 라이브 로그에 다음 예제와 유사하게 오류가 표시됩니다.

    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
    
  • Log Analytics 작업 영역에 있는 KubeMonAgentEvents 테이블에서. 구성 오류에 대해서 데이터가 오류 심각도로 1시간마다 전송됩니다. 오류가 없는 경우 테이블의 항목에 있는 데이터는 오류를 보고하지 않는 정보 심각도입니다. Tags 속성은 오류가 발생한 Pod 및 컨테이너 ID에 대한 상세 정보와, 첫 번째 발생, 마지막 발생 및 지난 한 시간 동안의 횟수를 포함합니다.

스키마 버전 확인

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

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

다음 예제와 유사한 출력이 주석 schema-versions와 함께 나타납니다.

    Name:           ama-logs-fdf58
    Namespace:      kube-system
    Node:           aks-agentpool-95673144-0/10.240.0.4
    Start Time:     Mon, 10 Jun 2019 15:01:03 -0700
    Labels:         controller-revision-hash=589cc7785d
                    dsName=ama-logs-ds
                    pod-template-generation=1
    Annotations:    agentVersion=1.10.0.1
                  dockerProviderVersion=5.0.0-0
                    schema-versions=v1 

자주 묻는 질문

Helm을 통해 kube-system 네임스페이스의 컨테이너에 대해 로그 수집을 사용하도록 설정하려면 어떻게 하나요?

kube-system 네임스페이스에 포함된 컨테이너의 로그 수집은 기본적으로 사용하지 않도록 설정됩니다. Azure Monitor 에이전트에서 환경 변수를 설정하여 로그 수집을 사용하도록 설정할 수 있습니다. 컨테이너 인사이트 GitHub 페이지를 참조하세요.

다음 단계