Distribuire le risorse di osservabilità e configurare i log

L'osservabilità delle operazioni di Azure IoT offre visibilità su ogni livello della configurazione e offre informazioni dettagliate sul comportamento effettivo dei problemi, aumentando così l'efficacia della progettazione dell'affidabilità del sito. Le operazioni di Azure IoT offrono osservabilità tramite dashboard Grafana personalizzati ospitati in Azure, basati sul servizio gestito di Monitoraggio di Azure per Prometheus e Container Insights.

Questo articolo illustra come distribuire le risorse di osservabilità delle operazioni IoT di Azure, configurare Prometheus e Grafana gestito di Azure e abilitare il monitoraggio completo per il cluster Azure Arc. È possibile distribuire tutte le risorse di osservabilità usando uno script automatizzato o seguire i passaggi manuali per un'installazione personalizzata.

Prerequisiti

Gli esempi interfaccia della riga di comando di Azure in questo articolo usano variabili di ambiente così puoi impostare ogni valore una volta e poi copiare e incollare i comandi as-is. Se stai usando l'ambiente Operazioni di Azure IoT Codespaces dal quickstart, queste variabili sono già impostate per te e puoi saltare questo passaggio. Altrimenti, imposta le seguenti variabili di ambiente nella tua shell prima di eseguire i comandi.

I seguenti script impostano le variabili di ambiente più comunemente utilizzate:

Variabile di ambiente Description
SUBSCRIPTION_ID L'ID dell'abbonamento che contiene la tua istanza Operazioni di Azure IoT.
RESOURCE_GROUP Il nome del gruppo di risorse che contiene la tua istanza Operazioni di Azure IoT.
AIO_INSTANCE_NAME Il nome della tua istanza Operazioni di Azure IoT. Per elencare le tue istanze, esegui az iot ops list -o table.
CLUSTER_NAME Il nome del cluster Kubernetes abilitato Azure Arc che ospita la tua istanza.
LOCATION La regione Azure da utilizzare per nuove risorse, ad esempio eastus.
SUBSCRIPTION_ID=<subscription-id>
RESOURCE_GROUP=<resource-group-name>
AIO_INSTANCE_NAME=<instance-name>
CLUSTER_NAME=<cluster-name>
LOCATION=<region>

Devi solo impostare le variabili utilizzate in questo articolo. Questo articolo potrebbe utilizzare variabili ambientali aggiuntive per i nomi delle risorse che scegli. L'articolo spiega come posizionarli dove vengono introdotti.

Eseguire la distribuzione con lo script automatizzato

Per configurare tutte le risorse di osservabilità in un singolo passaggio, usare lo script di deploy-observability-resources.sh automatizzato. Lo script automatizza i passaggi descritti in questo articolo, dalla creazione di risorse di Azure alla configurazione della configurazione dell'osservabilità. È possibile eseguire lo script più volte in modo sicuro. Ignora le risorse già esistenti e aggiorna le risorse che richiedono modifiche.

  1. Scaricare lo script:

    curl -fsSL -o deploy-observability-resources.sh \
      https://raw.githubusercontent.com/Azure/azure-iot-operations/main/scripts/observability/deploy-observability-resources.sh
    chmod +x deploy-observability-resources.sh
    
  2. Impostare le variabili di ambiente necessarie ed eseguire lo script:

    export RESOURCE_GROUP=<RESOURCE_GROUP>
    export CLUSTER_NAME=<CLUSTER_NAME>
    export INSTANCE_NAME=<INSTANCE_NAME>
    export WORKSPACE_NAME=<WORKSPACE_NAME>
    export GRAFANA_NAME=<GRAFANA_NAME>
    export LOGS_WORKSPACE_NAME=<LOGS_WORKSPACE_NAME>
    export LOCATION=<LOCATION>
    
    ./deploy-observability-resources.sh
    

    Impostare LOCATION sull'area di Azure per il provisioning delle nuove risorse. Se tutte le risorse esistono già, LOCATION è facoltativo.

    Variabile Description
    RESOURCE_GROUP Gruppo di risorse di Azure per le risorse di monitoraggio e operazioni di Azure IoT.
    CLUSTER_NAME Nome del cluster Kubernetes abilitato per Arc in cui vengono distribuite le operazioni di Azure IoT.
    INSTANCE_NAME Nome dell'istanza di Operazioni IoT di Azure da configurare.
    WORKSPACE_NAME Nome dell'area di lavoro di Monitoraggio di Azure (creata se non esiste).
    GRAFANA_NAME Nome per l'istanza di Grafana gestita di Azure (creata se non esiste).
    LOGS_WORKSPACE_NAME Nome per l'area di lavoro Log Analytics (creata se non esiste).
    LOCATION Area di Azure per le nuove risorse. Facoltativo se tutte le risorse esistono già.

Al termine dello script, continuare a Distribuire dashboard in Grafana per importare i dashboard curati.

Note

Se è necessario un maggiore controllo sui singoli passaggi, ad esempio per personalizzare la configurazione dell'agente di raccolta OpenTelemetry o riutilizzare le risorse di monitoraggio esistenti, seguire i passaggi manuali nel resto di questo articolo anziché usare lo script.

Creare risorse in Azure

  1. Registrare i provider con l’abbonamento in cui si trova il cluster.

    Note

    Eseguire questo passaggio una sola volta per ogni sottoscrizione. Per registrare i provider di risorse, è necessaria l'autorizzazione per eseguire l'operazione /register/action , inclusa nei ruoli Collaboratore e Proprietario della sottoscrizione. Per ulteriori informazioni, vedere i fornitori di risorse e i tipi di 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. Installare le estensioni della CLI di Azure per la raccolta delle metriche sui cluster abilitati per Azure Arc e Grafana con gestione Azure.

    az extension add --upgrade --name k8s-extension
    az extension add --upgrade --name amg
    
  3. Creare un'area di lavoro di Monitoraggio di Azure per abilitare la raccolta delle metriche per il cluster Kubernetes abilitato per Azure Arc:

    AZURE_MONITOR_WORKSPACE_ID=$(az monitor account create --name $WORKSPACE_NAME --resource-group $RESOURCE_GROUP --location $LOCATION --query id -o tsv)
    

    Il comando salva l'ID dello spazio di lavoro di Monitoraggio di Azure in AZURE_MONITOR_WORKSPACE_ID. L'ID viene usato quando si abilita la raccolta di metriche nella sezione successiva.

  4. Creare un'istanza di Grafana gestita di Azure per visualizzare le metriche di Prometheus:

    GRAFANA_ID=$(az grafana create --name $GRAFANA_NAME --resource-group $RESOURCE_GROUP --query id -o tsv)
    

    Il comando salva l'ID Grafana in GRAFANA_ID. L'ID viene usato quando si abilita la raccolta di metriche nella sezione successiva.

  5. Creare un'area di lavoro Log Analytics per Container Insights:

    LOG_ANALYTICS_WORKSPACE_ID=$(az monitor log-analytics workspace create -g $RESOURCE_GROUP -n $LOGS_WORKSPACE_NAME --query id -o tsv)
    

    Il comando salva l'ID dello spazio di lavoro Log Analytics in LOG_ANALYTICS_WORKSPACE_ID. Usi l'ID quando abiliti la raccolta dei log nella sezione successiva.

Abilitare la raccolta delle metriche per il cluster

Aggiornare il cluster Azure Arc per raccogliere le metriche e inviarle all'area di lavoro di Monitoraggio di Azure creata. È anche possibile collegare questa area di lavoro all'istanza di 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

Abilitare i log di Container Insights per la raccolta dei log:

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

Dopo aver completato questi passaggi, Monitoraggio di Azure e Grafana sono configurati e collegati al cluster per l'osservabilità e la raccolta delle metriche.

Distribuire l'agente di raccolta OpenTelemetry

Definire e distribuire un agente di raccolta OpenTelemetry (OTel) nel cluster Kubernetes abilitato per Arc.

  1. Creare un file denominato otel-collector-values.yaml e incollarvi il codice seguente per definire un agente di raccolta OpenTelemetry:

    mode: deployment
    fullnameOverride: aio-otel-collector
    image:
      repository: otel/opentelemetry-collector
      tag: 0.143.0
    
    config:
      processors:
        memory_limiter:
          limit_percentage: 80
          spike_limit_percentage: 10
          check_interval: 60s
    
      receivers:
        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
    
        telemetry:
          metrics:
            level: none
    
        pipelines:
          metrics:
            receivers:
              - otlp
            exporters:
              - prometheus
    
    resources:
      limits:
        cpu: "100m"
        memory: "512Mi"
    
    ports:
      metrics:
        enabled: true
        containerPort: 8889
        servicePort: 8889
        protocol: TCP
    
  2. Nel file otel-collector-values.yaml, prendere nota dei valori seguenti usati nel comando az iot ops create quando si distribuisce Operazioni di Azure IoT nel cluster:

    • fullnameOverride
    • grpc.endpoint
    • check_interval
  3. Salva e chiudi il file.

  4. Distribuire l'agente di raccolta eseguendo i comandi seguenti:

    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
    

Configurare la raccolta delle metriche di Prometheus

Configurare la raccolta di metriche di Prometheus nel cluster.

  1. Creare un file denominato ama-metrics-prometheus-config.yaml e incollare la configurazione seguente:

    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. Applicare il file di configurazione eseguendo il comando seguente:

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

Impostare la configurazione dell'osservabilità

È possibile impostare la configurazione osservabilità della distribuzione di Operazioni IoT di Azure in qualsiasi momento. Dopo aver configurato le risorse di osservabilità, è possibile aggiornare la configurazione dell'osservabilità eseguendo il az iot ops upgrade comando con il --ops-config parametro per specificare i nuovi valori di configurazione:

az iot ops upgrade --resource-group $RESOURCE_GROUP --name $AIO_INSTANCE_NAME --ops-config observability.metrics.openTelemetryCollectorAddress=aio-otel-collector.azure-iot-operations.svc.cluster.local:4317 observability.metrics.exportInternalSeconds=60
Parametro Value Description
--ops-config observability.metrics.openTelemetryCollectorAddress=<FULLNAMEOVERRIDE>.azure-iot-operations.svc.cluster.local:<GRPC_ENDPOINT> Specificare l'indirizzo dell'agente di raccolta OpenTelemetry (OTel) configurato nel file daemon-collector-values.yaml.

Le istruzioni in questo articolo usano i valori fullnameOverride=aio-otel-collector di esempio e grpc.endpoint=4317.
--ops-config observability.metrics.exportInternalSeconds=<CHECK_INTERVAL> Specificare il check_interval valore configurato nel file otel-collector-values.yaml.

Le istruzioni in questo articolo usano il valore check_interval=60di esempio .

Note

Nelle versioni di anteprima il comando az iot ops upgrade non funziona per l'aggiornamento a una versione di anteprima, ma funziona per configurare Operazioni di Azure IoT per l'osservabilità.

Distribuire dashboard in Grafana

Operazioni di Azure IoT offre un dashboard di esempio, progettato per offrire molte delle visualizzazioni necessarie per comprendere l'integrità e le prestazioni della distribuzione di Operazioni di Azure IoT.

Completare i passaggi seguenti per installare i dashboard di Grafana curati per le operazioni IoT di Azure:

  1. Clonare o scaricare il repository explore-iot-operations per ottenere il file JSON del dashboard Grafana di esempio in locale: https://github.com/Azure-Samples/explore-iot-operations.

  2. Accedere alla console di Grafana. È possibile accedere alla console tramite il portale di Azure o usare il comando az grafana show per recuperare l'URL.

    az grafana show --name $GRAFANA_NAME --resource-group $RESOURCE_GROUP --query url -o tsv
    
  3. Nella pagina di destinazione di Grafana, selezionare il riquadro Crea il tuo primo dashboard.

  4. Selezionare Importa dashboard.

  5. Passare alla directory del dashboard di esempio nella copia locale del repository Operazioni di Azure IoT, campioni explore-iot-operations >> osservabilità > grafana-dashboard e quindi selezionare il file del dashboard aio-observability.json.

  6. Quando l'applicazione richiede, selezionare l'origine dati Prometheus gestita.

  7. Seleziona Importa

Note

Nel file aio-observability.json accertarsi di configurare sia le origini dati Prometheus che quelle di Monitoraggio di Azure e impostare la variabile subscriptionId sull'ID della sottoscrizione di Azure per le query di log.

Passaggi successivi