다음을 통해 공유


관찰성 리소스 배포 및 로그 설정

가시성은 Azure IoT 작업 구성의 모든 계층에 대한 표시 여부를 제공합니다. 문제의 실제 동작에 대한 인사이트를 제공하여 사이트 안정성 엔지니어링의 효율성을 높입니다. Azure IoT 작업은 Azure에서 호스트되는 사용자 지정 큐레이팅된 Grafana 대시보드를 통해 가시성성을 제공합니다. 이러한 대시보드는 Azure Monitor Prometheus용 관리 서비스 및 Container Insights를 통해 제공됩니다. 이 가이드에서는 Azure Managed Prometheus 및 Grafana를 설정하고 Azure Arc 클러스터에 대한 모니터링을 사용하도록 설정하는 방법을 보여 줍니다.

클러스터에 Azure IoT 작업을 배포하기 전에 이 문서의 단계를 완료합니다.

필수 조건

  • Arc 지원 Kubernetes 클러스터.
  • 클러스터 머신에 설치된 Azure CLI입니다. 지침은 Azure CLI를 설치하는 방법을 참조하세요.
  • 클러스터 머신에 설치된 Helm입니다. 지침은 Helm 설치를 참조 하세요.
  • 클러스터 머신에 설치된 Kubectl입니다. 자세한 내용은 Kubernetes 도구 설치를 참조 하세요.

Azure에서 리소스 만들기

  1. 클러스터가 있는 구독에 공급자를 등록합니다.

    참고 항목

    이 단계는 구독당 한 번만 실행하면 됩니다. 리소스 공급자를 등록하려면 구독 기여자 및 소유자 역할에 포함된 /register/action 작업을 수행할 수 있는 권한이 필요합니다. 자세한 내용은 Azure 리소스 공급자 및 형식을 참조하세요.

    az account set -s <SUBSCRIPTION_ID>
    az provider register --namespace Microsoft.AlertsManagement
    az provider register --namespace Microsoft.Monitor
    az provider register --namespace Microsoft.Dashboard
    az provider register --namespace Microsoft.Insights
    az provider register --namespace Microsoft.OperationalInsights
    
  2. Azure Arc 지원 클러스터 및 Azure Managed Grafana에 대한 메트릭 컬렉션용 Azure CLI 확장을 설치합니다.

    az extension add --name k8s-extension
    az extension add --name amg
    
  3. Azure Monitor 작업 영역을 만들어 Azure Arc 지원 Kubernetes 클러스터에 대한 메트릭 수집을 사용하도록 설정합니다.

    az monitor account create --name <WORKSPACE_NAME> --resource-group <RESOURCE_GROUP> --location <LOCATION> --query id -o tsv
    

    이 명령의 출력에서 Azure Monitor 작업 영역 ID를 저장합니다. 다음 섹션에서 메트릭 컬렉션을 사용하도록 설정할 때 ID를 사용합니다.

  4. Prometheus 메트릭을 시각화하는 Azure Managed Grafana 인스턴스를 만듭니다.

    az grafana create --name <GRAFANA_NAME> --resource-group <RESOURCE_GROUP> --query id -o tsv
    

    이 명령의 출력에서 Grafana ID를 저장합니다. 다음 섹션에서 메트릭 컬렉션을 사용하도록 설정할 때 ID를 사용합니다.

  5. Container Insights에 대한 Log Analytics 작업 영역을 만듭니다.

    az monitor log-analytics workspace create -g <RESOURCE_GROUP> -n <LOGS_WORKSPACE_NAME> --query id -o tsv
    

    이 명령의 출력에서 Log Analytics 작업 영역 ID를 저장합니다. 다음 섹션에서 메트릭 컬렉션을 사용하도록 설정할 때 ID를 사용합니다.

클러스터에 대한 메트릭 컬렉션 사용

메트릭을 수집하고 이전에 만든 Azure Monitor 작업 영역으로 보내도록 Azure Arc 클러스터를 업데이트합니다. 또한 이 작업 영역을 Grafana 인스턴스와 연결합니다.

az k8s-extension create --name azuremonitor-metrics --cluster-name <CLUSTER_NAME> --resource-group <RESOURCE_GROUP> --cluster-type connectedClusters --extension-type Microsoft.AzureMonitor.Containers.Metrics --configuration-settings azure-monitor-workspace-resource-id=<AZURE_MONITOR_WORKSPACE_ID> grafana-resource-id=<GRAFANA_ID>

로그 컬렉션에 대해 Container Insights 로그를 사용하도록 설정합니다.

az k8s-extension create --name azuremonitor-containers --cluster-name <CLUSTER_NAME> --resource-group <RESOURCE_GROUP> --cluster-type connectedClusters --extension-type Microsoft.AzureMonitor.Containers --configuration-settings logAnalyticsWorkspaceResourceID=<LOG_ANALYTICS_WORKSPACE_ID>

이러한 단계가 완료되면 Azure Monitor와 Grafana를 모두 설정하고 클러스터에 연결하여 관찰 가능성 및 메트릭 수집을 수행합니다.

OpenTelemetry 수집기 배포

Arc 지원 Kubernetes 클러스터에 OTel(OpenTelemetry) 수집 기를 정의하고 배포합니다.

  1. 호출 otel-collector-values.yaml 된 파일을 만들고 다음 코드를 붙여넣어 OpenTelemetry 수집기를 정의합니다.

    mode: deployment
    fullnameOverride: aio-otel-collector
    image:
      repository: otel/opentelemetry-collector
      tag: 0.107.0
    config:
      processors:
        memory_limiter:
          limit_percentage: 80
          spike_limit_percentage: 10
          check_interval: '60s'
      receivers:
        jaeger: null
        prometheus: null
        zipkin: null
        otlp:
          protocols:
            grpc:
              endpoint: ':4317'
            http:
              endpoint: ':4318'
      exporters:
        prometheus:
          endpoint: ':8889'
          resource_to_telemetry_conversion:
            enabled: true
          add_metric_suffixes: false
      service:
        extensions:
          - health_check
        pipelines:
          metrics:
            receivers:
              - otlp
            exporters:
              - prometheus
          logs: null
          traces: null
        telemetry: null
      extensions:
        memory_ballast:
          size_mib: 0
    resources:
      limits:
        cpu: '100m'
        memory: '512Mi'
    ports:
      metrics:
        enabled: true
        containerPort: 8889
        servicePort: 8889
        protocol: 'TCP'
      jaeger-compact:
        enabled: false
      jaeger-grpc:
        enabled: false
      jaeger-thrift:
        enabled: false
      zipkin:
        enabled: false
    
  2. otel-collector-values.yaml 파일에서 클러스터에 Azure IoT Operations를 az iot ops create 배포할 때 명령에서 사용하는 다음 값을 기록해 둡니다.

    • fullnameOverride
    • grpc.endpoint
    • check_interval
  3. 파일을 저장 후 닫습니다.

  4. 다음 명령을 실행하여 수집기를 배포합니다.

    kubectl get namespace azure-iot-operations || kubectl create namespace azure-iot-operations
    helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
    
    helm repo update
    helm upgrade --install aio-observability open-telemetry/opentelemetry-collector -f otel-collector-values.yaml --namespace azure-iot-operations
    

Prometheus 메트릭 컬렉션 구성

클러스터에서 Prometheus 메트릭 컬렉션을 구성합니다.

  1. 명명된 ama-metrics-prometheus-config.yaml 파일을 만들고 다음 구성을 붙여넣습니다.

    apiVersion: v1
    data:
      prometheus-config: |2-
        scrape_configs:
          - job_name: otel
            scrape_interval: 1m
            static_configs:
              - targets:
                - aio-otel-collector.azure-iot-operations.svc.cluster.local:8889
          - job_name: aio-annotated-pod-metrics
            kubernetes_sd_configs:
              - role: pod
            relabel_configs:
              - action: drop
                regex: true
                source_labels:
                  - __meta_kubernetes_pod_container_init
              - action: keep
                regex: true
                source_labels:
                  - __meta_kubernetes_pod_annotation_prometheus_io_scrape
              - action: replace
                regex: ([^:]+)(?::\\d+)?;(\\d+)
                replacement: $1:$2
                source_labels:
                  - __address__
                  - __meta_kubernetes_pod_annotation_prometheus_io_port
                target_label: __address__
              - action: replace
                source_labels:
                  - __meta_kubernetes_namespace
                target_label: kubernetes_namespace
              - action: keep
                regex: 'azure-iot-operations'
                source_labels:
                  - kubernetes_namespace
            scrape_interval: 1m
    kind: ConfigMap
    metadata:
      name: ama-metrics-prometheus-config
      namespace: kube-system
    
  2. 다음 명령을 실행하여 구성 파일을 적용합니다.

    kubectl apply -f ama-metrics-prometheus-config.yaml
    

Grafana에 대시보드 배포

Azure IoT Operations는 Azure IoT Operations 배포의 상태 및 성능을 이해하는 데 필요한 많은 시각화를 제공하도록 설계된 샘플 대시보드를 제공합니다.

다음 단계를 완료하여 Azure IoT 작업 큐레이팅된 Grafana 대시보드를 설치합니다.

  1. azure-iot-operations 리포지토리를 복제하거나 다운로드하여 샘플 Grafana 대시보드 json 파일을 로컬로 https://github.com/Azure/azure-iot-operations가져옵니다.

  2. Grafana 콘솔에 로그인합니다. Azure Portal을 통해 콘솔에 액세스하거나 명령을 사용하여 URL을 az grafana show 검색할 수 있습니다.

    az grafana show --name <GRAFANA_NAME> --resource-group <RESOURCE_GROUP> --query url -o tsv
    
  3. Grafana 애플리케이션에서 아이콘을 + 선택합니다.

  4. 대시보드 가져오기를 선택합니다.

  5. Azure IoT Operations 리포지토리의 로컬 복사본에 있는 샘플 대시보드 디렉터리, azure-iot-operations>샘플>grafana-dashboard로 이동한 다음, 대시보드 파일을 선택합니다.aio.sample.json

  6. 애플리케이션이 프롬프트를 표시하면 관리되는 Prometheus 데이터 원본을 선택합니다.

  7. 가져오기를 선택합니다.