Implementación de recursos de observabilidad y configuración de registros

La observabilidad de operaciones de IoT de Azure proporciona visibilidad sobre cada capa de la configuración y proporciona información sobre el comportamiento real de los problemas, lo que aumenta la eficacia de la ingeniería de confiabilidad del sitio. Operaciones de IoT de Azure ofrece observabilidad a través de paneles de Grafana curados y personalizados, alojados en Azure, respaldados por el servicio administrado Azure Monitor para Prometheus y Container Insights.

En este artículo se muestra cómo implementar recursos de observabilidad de operaciones de Azure IoT, configurar Azure Managed Prometheus y Grafana, y habilitar una supervisión completa para el clúster de Azure Arc. Puede implementar todos los recursos de observabilidad mediante un script automatizado o seguir los pasos manuales para una configuración personalizada.

Prerequisites

Los CLI de Azure ejemplos de este artículo usan variables de entorno para que puedas establecer cada valor una vez y luego copiar y pegar los comandos as-is. Si usas el entorno Operaciones de IoT de Azure Codespaces del quickstart, estas variables ya están configuradas para ti y puedes saltarte este paso. De lo contrario, configura las siguientes variables de entorno en tu shell antes de ejecutar los comandos.

Los siguientes scripts establecen las variables de entorno más usadas:

Variable del entorno Description
SUBSCRIPTION_ID El ID de la suscripción que contiene tu instancia de Operaciones de IoT de Azure.
RESOURCE_GROUP El nombre del grupo de recursos que contiene tu instancia de Operaciones de IoT de Azure.
AIO_INSTANCE_NAME El nombre de tu instancia de Operaciones de IoT de Azure. Para listar tus instancias, ejecuta az iot ops list -o table.
CLUSTER_NAME El nombre del clúster Kubernetes habilitado para Azure Arc que aloja tu instancia.
LOCATION La región de Azure que se usará para los nuevos recursos, por ejemplo eastus.
SUBSCRIPTION_ID=<subscription-id>
RESOURCE_GROUP=<resource-group-name>
AIO_INSTANCE_NAME=<instance-name>
CLUSTER_NAME=<cluster-name>
LOCATION=<region>

Solo necesitas establecer las variables que utiliza este artículo. Este artículo podría utilizar variables de entorno adicionales para los nombres de recursos que elijas. El artículo explica cómo situarlos donde se introducen.

Implementación con el script automatizado

Para configurar todos los recursos de observabilidad en un solo paso, use el script de deploy-observability-resources.sh automatizado. El script automatiza los pasos descritos en este artículo, desde la creación de recursos de Azure mediante la configuración de observabilidad. Puede ejecutar el script varias veces de forma segura. Omite los recursos que ya existen y actualiza los recursos que necesitan cambios.

  1. Descargue el 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. Establezca las variables de entorno necesarias y ejecute el 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
    

    Configure LOCATION en la región de Azure para el aprovisionamiento de nuevos recursos. Si ya existen todos los recursos, LOCATION es opcional.

    Variable Description
    RESOURCE_GROUP Grupo de recursos de Azure para los recursos de supervisión y operaciones de Azure IoT.
    CLUSTER_NAME Nombre del clúster de Kubernetes habilitado para Arc donde se implementa Operaciones de IoT de Azure.
    INSTANCE_NAME Nombre de la instancia de Operaciones de IoT de Azure que se va a configurar.
    WORKSPACE_NAME Nombre del área de trabajo de Azure Monitor (creada si no existe).
    GRAFANA_NAME Nombre de la instancia de Grafana administrada de Azure (creada si no existe).
    LOGS_WORKSPACE_NAME Nombre del área de trabajo de Log Analytics (creada si no existe).
    LOCATION Región de Azure para nuevos recursos. Opcional si ya existen todos los recursos.

Una vez completado el script, continúe con Implementar paneles en Grafana para importar los paneles mantenidos.

Note

Si necesita más control sobre los pasos individuales, por ejemplo, para personalizar la configuración del recopilador de OpenTelemetry o reutilizar los recursos de supervisión existentes, siga los pasos manuales del resto de este artículo en lugar de usar el script.

Creación de recursos en Azure

  1. Registre proveedores con la suscripción donde se encuentra el clúster.

    Note

    Ejecute este paso solo una vez por suscripción. Para registrar proveedores de recursos, necesita permiso para realizar la /register/action operación, que se incluye en los roles Colaborador y Propietario de la suscripción. Para obtener más información, consulte proveedores y tipos de recursos de 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 extensiones de la CLI de Azure para la recopilación de métricas para clústeres habilitados para Azure Arc y Azure Managed Grafana:

    az extension add --upgrade --name k8s-extension
    az extension add --upgrade --name amg
    
  3. Cree un área de trabajo de Azure Monitor para habilitar la recopilación de métricas para el clúster de Kubernetes habilitado para Azure Arc:

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

    El comando guarda el ID del espacio de trabajo de Azure Monitor en AZURE_MONITOR_WORKSPACE_ID. Use el identificador al habilitar la recopilación de métricas en la sección siguiente.

  4. Cree una instancia de Grafana administrada de Azure para visualizar las métricas de Prometheus:

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

    El comando guarda el ID de Grafana en GRAFANA_ID. Use el identificador al habilitar la recopilación de métricas en la sección siguiente.

  5. Cree un área de trabajo de Log Analytics para Container Insights:

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

    El comando guarda el ID del espacio de trabajo de Log Analytics en LOG_ANALYTICS_WORKSPACE_ID. Usas el ID cuando activas la recogida de registros en la siguiente sección.

Habilitación de la recopilación de métricas para el clúster

Actualice el clúster de Azure Arc para recopilar métricas y enviarlos al área de trabajo de Azure Monitor que creó. También vincula esta área de trabajo a la instancia 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

Habilite los logs de Container Insights para la recopilación de registros:

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

Después de completar estos pasos, tiene azure Monitor y Grafana configurados y vinculados al clúster para la observabilidad y la recopilación de métricas.

Implementación de Collector de OpenTelemetry

Defina e implemente un recopilador de OpenTelemetry (OTel) en el clúster de Kubernetes habilitado para Arc.

  1. Cree un archivo denominado otel-collector-values.yaml y pegue el código siguiente en él para definir un Collector de 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. En el archivo otel-collector-values.yaml, anote los siguientes valores que se usan en el comando az iot ops create al implementar Operaciones de IoT de Azure en el clúster:

    • fullnameOverride
    • grpc.endpoint
    • check_interval
  3. Guarde y cierre el archivo.

  4. Implemente el Collector mediante la ejecución de los siguientes 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
    

Configuración de la colección de métricas de Prometheus

Configure la recopilación de métricas de Prometheus en el clúster.

  1. Cree un archivo denominado ama-metrics-prometheus-config.yaml y pegue la siguiente configuración:

    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. Ejecute el siguiente comando para aplicar el archivo de configuración:

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

Configuración de la observabilidad

Puede establecer la configuración de observabilidad de la implementación de Operaciones de IoT de Azure en cualquier momento. Una vez configurados los recursos de observabilidad, puede actualizar la configuración de observabilidad ejecutando el comando con el az iot ops upgrade--ops-config parámetro para especificar los nuevos valores de configuración:

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 Value Description
--ops-config observability.metrics.openTelemetryCollectorAddress=<FULLNAMEOVERRIDE>.azure-iot-operations.svc.cluster.local:<GRPC_ENDPOINT> Proporcione la dirección del recopilador OpenTelemetry (OTel) que configuró en el archivo otel-collector-values.yaml.

Las instrucciones de este artículo usan los valores fullnameOverride=aio-otel-collector de ejemplo y grpc.endpoint=4317.
--ops-config observability.metrics.exportIntervalSeconds=<CHECK_INTERVAL> Proporciona el check_interval valor que configuraste en el otel-collector-values.yaml archivo.

Las instrucciones de este artículo usan el valor de ejemplo check_interval=60.

Note

En versiones preliminares, el comando az iot ops upgrade no funciona para actualizar a una versión preliminar, pero funciona para configurar las operaciones de IoT de Azure para la observabilidad.

Implementación de paneles en Grafana

Operaciones de IoT de Azure proporciona un panel de ejemplo, diseñado para proporcionarle muchas de las visualizaciones que necesita para comprender el estado y el rendimiento de la implementación de Operaciones de IoT de Azure.

Complete los pasos siguientes para instalar los paneles de Grafana mantenidos por Operaciones de Azure IoT:

  1. Clone o descargue el repositorio explore-iot-operations para obtener localmente el archivo JSON del panel de Grafana de ejemplo: https://github.com/Azure-Samples/explore-iot-operations.

  2. Inicie sesión en la consola de Grafana. Puede acceder a la consola a través de Azure Portal o usar el comando az grafana show para recuperar la dirección URL.

    az grafana show --name $GRAFANA_NAME --resource-group $RESOURCE_GROUP --query url -o tsv
    
  3. En la página de aterrizaje de Grafana, seleccione el icono Cree su primer panel.

  4. Seleccione Importar panel.

  5. Vaya al directorio del panel de ejemplo en la copia local del repositorio de Operaciones de IoT de Azure, explore-iot-operations > samples > observability > grafana-dashboard, y luego seleccione el archivo aio-observability.json.

  6. Cuando se lo solicite la aplicación, seleccione el origen de datos de Prometheus administrado.

  7. Seleccione Importar.

Note

En el archivo aio-observability.json, asegúrese de configurar los orígenes de datos Prometheus y Azure Monitor, y configure la variable subscriptionId con su identificador de suscripción de Azure para las consultas de registro.

Pasos siguientes