Azure Kubernetes Application Network에서 데이터 평면 및 컨트롤 플레인 로그 모니터링(미리 보기)

중요합니다

AKS 미리 보기 기능은 셀프 서비스에서 사용할 수 있습니다(옵트인 방식). 미리 보기는 "있는 그대로" 및 "사용 가능한 상태로" 제공되며 서비스 수준 계약 및 제한적 보증에서 제외됩니다. AKS 미리 보기의 일부는 고객 지원팀에서 최선을 다해 지원합니다. 따라서 이러한 기능은 프로덕션 용도로 사용할 수 없습니다. 자세한 내용은 다음 지원 문서를 참조하세요.

Azure Kubernetes Application Network는 모니터링 및 문제 해결 요구 사항에 따라 구성할 수 있는 두 가지 유형의 로깅, 즉 데이터 평면 로그 및 컨트롤 플레인 로그를 제공합니다.

  • 데이터 평면 로그: 애플리케이션 워크로드, applink-system 네임스페이스 구성 요소 및 Envoy 프록시 액세스 로그의 로그를 포함합니다.
  • 컨트롤 플레인 로그: Azure Kubernetes Application Network 컨트롤 플레인 구성 요소의 Istiod 로그를 포함합니다.

Azure Kubernetes Application Network 로깅은 기본적으로 사용하지 않도록 설정됩니다. 이 문서에서는 두 가지 유형의 로깅을 모두 사용하도록 설정하고 Azure Monitor에서 보는 방법을 설명합니다.

환경 변수 설정

  • 다음 명령을 사용하여 선택한 워크플로에 대한 환경 변수를 설정합니다.

    # Set if specifying an existing or creating a new Log Analytics workspace
    export LAW_NAME=<log-analytics-workspace-name>
    
    # Set for resource group, location, and AKS cluster name
    export AKS_RG=<aks-resource-group>
    export LOCATION=<location>
    export CLUSTER_NAME=<aks-cluster-name>
    
    # Set for Azure Kubernetes Application Network member resource group, name, and member name
    export APPNET_RG=<appnet-resource-group>
    export APPNET_NAME=<appnet-name>
    export APPNET_MEMBER_NAME=<appnet-member-name>
    

데이터 평면 로그 사용

데이터 평면 로그에는 워크로드/애플리케이션 및 applink-system 워크로드(Ztunnel 및 Istio CNI)의 로그가 포함됩니다. Azure Container Insights 추가 기능은 문제 해결을 위해 로그를 사용하도록 설정하고 보는 기본 방법입니다.

데이터 평면 로그를 사용하도록 설정하는 경우 기존 Log Analytics 작업 영역을 지정하거나, 리소스 그룹에 대한 기본 작업 영역을 사용하거나, 새 작업 영역을 만들 수 있습니다.

새 Log Analytics 작업 영역 만들기

  • 새 Log Analytics 작업 영역을 만드는 경우 다음 az monitor log-analytics workspace create 명령을 사용합니다.

    az monitor log-analytics workspace create \
        --resource-group $AKS_RG \
        --workspace-name $LAW_NAME \
        --location $LOCATION
    

AKS 클러스터에서 Container Insights 추가 기능 사용

  • 명령을 사용하여 Azure Kubernetes Application Network 멤버 클러스터에 대해 Container Insights 추가 기능을 사용하도록 az aks enable-addons 설정합니다(선택적으로 작업 영역 ID를 생략).

     az aks enable-addons \
      --addon monitoring \
      --name $CLUSTER_NAME \
      --resource-group $AKS_RG \
      --workspace-resource-id /subscriptions/$SUBSCRIPTION/resourcegroups/$AKS_RG/providers/microsoft.operationalinsights/workspaces/$LAW_NAME
    

로그 보기

  • Log Analytics 작업 영역으로 이동하고 다음 쿼리를 실행하여 로그를 봅니다.

    ContainerLogV2
    | where PodNamespace == "applink-system"
    

Envoy 접속 로그

경우에 따라 애플리케이션/워크로드에 대한 트래픽이 생성될 때 Envoy 액세스 로그를 검사해야 할 수 있습니다. Envoy 액세스 로그를 사용하도록 설정하려면 원격 분석 API를 사용하여 설정할 수 있습니다.

  1. 아래 YAML에서 Envoy 액세스 로깅을 사용하도록 설정할 네임스페이스를 지정합니다. 메시 전역의 Envoy 액세스 로그의 경우 메타데이터에서 네임스페이스를 제거합니다.

    cat <<EOF | kubectl apply -n default -f -
    apiVersion: telemetry.istio.io/v1
    kind: Telemetry
    metadata:
      name: mesh-logging-default
      namespace: default
    spec:
      accessLogging:
      - providers:
        - name: envoy
    EOF
    

    Envoy 액세스 로그는 Container Insights 추가 기능이 설정된 Log Analytics 작업 영역에서 사용할 수 있습니다.

  2. Log Analytics 작업 영역으로 이동하고 다음 쿼리를 실행하여 Envoy 액세스 로그를 봅니다.

    ContainerLogV2
    | where TimeGenerated > ago(45m)
    | where PodName contains "gateway"
    | take 10
    

컨트롤 플레인 로그 활성화

컨트롤 플레인 로그를 사용하도록 설정하려면 진단 설정을 만들고 Log Analytics 작업 영역으로 로그를 보냅니다.

  1. 다음 명령을 사용하여 진단 설정 이름에 대한 환경 변수를 설정합니다.

    export DS_NAME=<diagnostic-settings-name>
    
  2. Azure Kubernetes Application Network 멤버 리소스에 대한 진단 설정을 만들고 명령을 사용하여 az monitor diagnostic-settings create Log Analytics 작업 영역을 대상으로 지정합니다.

    az monitor diagnostic-settings create \
    --resource /subscriptions/$SUBSCRIPTION/resourceGroups/$APPNET_RG/providers/Microsoft.AppLink/appLinks/$APPNET_NAME/appLinkMembers/$APPNET_MEMBER_NAME \
    --workspace /subscriptions/$SUBSCRIPTION/resourcegroups/$AKS_RG/providers/microsoft.operationalinsights/workspaces/$LAW_NAME \
    --logs "[{category:istiod,enabled:true}]" \
    --name $DS_NAME
    
  3. 사용하도록 설정되면 Log Analytics 작업 영역으로 이동하여 다음 쿼리를 실행합니다.

    메모

    $appnet_member_resourceId 는 다음과 같은 형식 /subscriptions/$subscription/resourceGroups/$appnet_rg/providers/microsoft.applink/applinks/$appnet_name/applinkmembers/$appnet_member_name이어야 합니다.

    MeshControlPlane
    | where TimeGenerated > ago(1h)
    | where _ResourceId == $appnet_member_resourceId // appnet member resourceId
    

로그 테이블 및 스키마

다음 표에는 Log Analytics 작업 영역의 Azure Kubernetes Application Network 로그가 포함되어 있습니다.

로그 테이블 설명
ContainerLogV2 애플리케이션/워크로드 로그 포함
MeshControlPlane Istiod 로그 포함

스키마

스키마를 ContainerLogV2 찾으려면 ContainerLogV2 열을 참조하세요.

MeshControlPlane 는 다음 스키마가 있는 사용자 지정 테이블입니다.

# 열 이름 유형
0 테넌트아이디 문자열
1 타임제너레이티드 datetime
2 카테고리 문자열
3 수준 문자열
4 Message 문자열
5 컨테이너 문자열
6 PodName 문자열
7 소스 시스템 문자열
8 유형 문자열
9 _리소스아이디 문자열

샘플 쿼리

AKS 클러스터 리소스 ID로 로그 필터링

  • 다음 쿼리를 사용하여 ContainerLogV2 테이블의 AKS 관리형 클러스터 리소스 ID를 기반으로 로그를 필터링합니다.

    ContainerLogV2
    | where TimeGenerated > ago(45m)
    | where _ResourceId == $aks_cluster_resource_id // managed cluster resourceId
    

Azure Kubernetes Application Network 멤버 리소스 ID로 로그 필터링

  • 다음 쿼리를 사용하여 컨트롤 플레인 로그에 대한 MeshControlPlane 테이블의 Azure Kubernetes Application Network 멤버 리소스 ID를 기반으로 로그를 필터링합니다.

    MeshControlPlane
    | where TimeGenerated > ago(45m)
    | where Level == "ERROR"
    | where _ResourceId == $appnet_member_resourceId // appnet member resourceId
    

    다음 스크린샷은 Azure Monitor 로그의 Application Network Istiod 오류 예제를 보여 줍니다.

    Azure Monitor 로그의 애플리케이션 네트워크 Istiod 오류 예제 스크린샷

Azure Kubernetes Application Network 관찰 및 모니터링에 대한 자세한 내용은 다음 문서를 참조하세요.