Implantar recursos de observabilidade e configurar logs

A observabilidade das Operações do Azure IoT oferece visibilidade em todas as camadas da configuração e fornece insights sobre o comportamento real dos problemas, o que aumenta a eficácia da engenharia de confiabilidade de sites. As Operações do Azure IoT oferecem observabilidade por meio de painéis do Grafana personalizados e coletados, hospedados no Azure, da plataforma do serviço gerenciado do Azure Monitor para Prometheus e do Container Insights.

Este artigo mostra como implantar recursos de observabilidade das Operações do Azure IoT, configurar o Prometheus e o Grafana gerenciados pelo Azure e habilitar o monitoramento abrangente para o cluster do Azure Arc. Você pode implantar todos os recursos de observabilidade usando um script automatizado ou seguir as etapas manuais para uma configuração personalizada.

Pré-requisitos

Os CLI do Azure exemplos deste artigo usam variáveis de ambiente para que você possa definir cada valor uma vez e então copiar e colar os comandos as-is. Se você está usando o ambiente Operações do Azure IoT Codespaces do quickstart, essas variáveis já estão definidas para você e você pode pular essa etapa. Caso contrário, defina as seguintes variáveis de ambiente no seu shell antes de executar os comandos.

Os seguintes scripts definem as variáveis de ambiente mais comumente usadas:

Variável de ambiente Description
SUBSCRIPTION_ID O ID da assinatura que contém sua instância do Operações do Azure IoT.
RESOURCE_GROUP O nome do grupo de recursos que contém sua instância do Operações do Azure IoT.
AIO_INSTANCE_NAME O nome da sua instância do Operações do Azure IoT. Para listar suas instâncias, execute az iot ops list -o table.
CLUSTER_NAME O nome do cluster Kubernetes habilitado para Azure Arc que hospeda sua instância.
LOCATION A região do Azure a ser usada para novos recursos, por exemplo, eastus.
SUBSCRIPTION_ID=<subscription-id>
RESOURCE_GROUP=<resource-group-name>
AIO_INSTANCE_NAME=<instance-name>
CLUSTER_NAME=<cluster-name>
LOCATION=<region>

Você só precisa definir as variáveis que este artigo utiliza. Este artigo pode usar variáveis adicionais de ambiente para nomes de recursos que você escolher. O artigo explica como posicioná-los onde são apresentados.

Implantar com o script automatizado

Para configurar todos os recursos de observabilidade em uma única etapa, use o script automatizado deploy-observability-resources.sh. O script automatiza as etapas neste artigo, desde a criação de recursos do Azure até a configuração da observabilidade. Você pode executar o script várias vezes com segurança. Ele ignora os recursos que já existem e atualiza os recursos que precisam de alterações.

  1. Baixe o 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. Defina as variáveis de ambiente necessárias e execute o 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
    

    Defina LOCATION para a região do Azure para provisionar novos recursos. Se todos os recursos já existirem, LOCATION será opcional.

    Variable Description
    RESOURCE_GROUP Grupo de recursos do Azure para suas Operações de IoT do Azure e recursos de monitoramento.
    CLUSTER_NAME Nome do cluster Kubernetes habilitado para Arc onde as Operações de IoT do Azure são implantadas.
    INSTANCE_NAME Nome da instância de Operações de IoT do Azure a ser configurada.
    WORKSPACE_NAME Nome do workspace do Azure Monitor (será criado caso não exista).
    GRAFANA_NAME Nome da instância do Espaço Gerenciado do Azure para Grafana (criada se não existir).
    LOGS_WORKSPACE_NAME Nome do workspace do Log Analytics (criado caso ainda não exista).
    LOCATION Região do Azure para novos recursos. Opcional se todos os recursos já existirem.

Após a conclusão do script, continue em Implantar painéis no Grafana para importar os painéis selecionados.

Note

Se você precisar de mais controle sobre as etapas individuais, por exemplo, para personalizar a configuração do Coletor OpenTelemetry ou reutilizar recursos de monitoramento existentes, siga as etapas manuais no restante deste artigo em vez de usar o script.

Criar recursos no Azure

  1. Registre provedores com a assinatura em que o cluster está localizado.

    Note

    Execute essa etapa apenas uma vez por assinatura. Para registrar provedores de recursos, você precisa de permissão para executar a /register/action operação, que está incluída nas funções Colaborador e Proprietário da assinatura. Confira mais informações em Tipos e provedores de recursos do 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. Instale as extensões da CLI do Azure para coleta de Métricas para clusters habilitados para Azure Arc e Espaço Gerenciado do Azure para Grafana:

    az extension add --upgrade --name k8s-extension
    az extension add --upgrade --name amg
    
  3. Crie um workspace do Azure Monitor para habilitar a coleta de métricas para o cluster Kubernetes habilitado com o Azure Arc.

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

    O comando salva o ID do workspace do Azure Monitor em AZURE_MONITOR_WORKSPACE_ID. Use a ID ao habilitar a coleta de métricas na próxima seção.

  4. Crie uma instância do Espaço Gerenciado do Azure para Grafana para visualizar suas métricas do Prometheus:

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

    O comando salva o ID do Grafana em GRAFANA_ID. Use a ID ao habilitar a coleta de métricas na próxima seção.

  5. Crie um workspace do Log Analytics para o Container Insights:

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

    O comando salva o ID do espaço de trabalho Log Analytics em LOG_ANALYTICS_WORKSPACE_ID. Você usará o ID ao ativar a coleta de logs na próxima seção.

Habilitar a coleta de métricas para o cluster

Atualize o cluster do Azure Arc para coletar métricas e enviá-las para o workspace do Azure Monitor que você criou. Você também vincula esse workspace à instância do 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

Habilitar logs do Container Insights para coleta de logs:

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

Após concluir essas etapas, o Azure Monitor e o Grafana estarão configurados e vinculados ao cluster para observabilidade e coleta de métricas.

Implantar o coletor do OpenTelemetry

Defina e implante um Coletor OTel (OpenTelemetry) no cluster Kubernetes habilitado para Arc.

  1. Crie um arquivo chamado otel-collector-values.yaml e cole o seguinte código nele para definir um coletor do 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. No arquivo otel-collector-values.yaml, anote os seguintes valores que você usa no comando az iot ops create ao implantar as Operações do Azure IoT no cluster:

    • fullnameOverride
    • grpc.endpoint
    • check_interval
  3. Salve e feche o arquivo.

  4. Implante o coletor executando os seguintes comandos:

    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
    

Configurar a coleção de métricas do Prometheus

Configure a coleta de métricas do Prometheus em seu cluster.

  1. Crie um arquivo chamado ama-metrics-prometheus-config.yaml e cole a seguinte configuração:

    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. Aplique o arquivo de configuração executando o seguinte comando:

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

Configurar a configuração de observabilidade

Você pode definir a configuração de observabilidade da implantação das Operações do Azure IoT a qualquer momento. Depois que os recursos de observabilidade forem configurados, você poderá atualizar a configuração de observabilidade executando o az iot ops upgrade comando com o --ops-config parâmetro para especificar os novos valores de configuração:

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.exportIntervalSeconds=60
Parâmetro Valor Description
--ops-config observability.metrics.openTelemetryCollectorAddress=<FULLNAMEOVERRIDE>.azure-iot-operations.svc.cluster.local:<GRPC_ENDPOINT> Forneça o endereço do coletor OpenTelemetry (OTel) configurado no arquivo otel-collector-values.yaml.

As instruções neste artigo usam os valores fullnameOverride=aio-otel-collector de exemplo e grpc.endpoint=4317.
--ops-config observability.metrics.exportIntervalSeconds=<CHECK_INTERVAL> Forneça o check_interval valor que você configurou no otel-collector-values.yaml arquivo.

As instruções neste artigo usam o valor de exemplo check_interval=60.

Note

Em versões de visualização, o comando az iot ops upgrade não funciona para atualização para uma versão de visualização, mas funciona para configurar as Operações do Azure IoT para observabilidade.

Implantar painéis no Grafana

O Operações do Azure IoT fornece um painel de exemplo, projetado para fornecer muitas das visualizações necessárias para entender a integridade e o desempenho da implantação das Operações de IoT do Azure.

Conclua as seguintes etapas para instalar os painéis do Grafana curados do Operações do Azure IoT:

  1. Clone ou baixe o repositório explore-iot-operations para obter o arquivo JSON de exemplo do Painel Grafana localmente: https://github.com/Azure-Samples/explore-iot-operations.

  2. Entre no console do Grafana. Você pode acessar o console por meio do portal do Azure ou usar o comando az grafana show para recuperar a URL.

    az grafana show --name $GRAFANA_NAME --resource-group $RESOURCE_GROUP --query url -o tsv
    
  3. Na página de aterrissagem do Grafana, selecione o bloco Crie seu primeiro painel.

  4. Selecione Importar Painel.

  5. Navegue até o diretório do painel de amostra em sua cópia local do repositório de Operações IoT do Azure, explore-iot-operations > samples > observability > grafana-dashboard, e, em seguida, selecione o arquivo aio-observability.json.

  6. Quando o aplicativo for solicitado, selecione a fonte de dados do Prometheus Gerenciado.

  7. Selecione Importar.

Note

No arquivo aio-observability.json , configure as fontes de dados do Prometheus e do Azure Monitor e defina a subscriptionId variável para sua ID de assinatura do Azure para consultas de log.

Próximas Etapas