Compartir vía


Recopilar y transportar métricas

Se aplica a:IoT Edge 1.5 checkmark IoT Edge 1.5

Importante

IoT Edge 1.5 LTS es la versión compatible. IoT Edge 1.4 LTS alcanzó el final del ciclo de vida el 12 de noviembre de 2024. Si usa una versión anterior, consulte Update IoT Edge.

Puede supervisar de forma remota la flota de IoT Edge mediante la integración de métricas integradas y Azure Monitor. Para habilitar esta funcionalidad en el dispositivo, agregue el módulo metrics-collector a la implementación y configúrelo para recopilar y transportar métricas del módulo a Azure Monitor.

Para configurar la supervisión en el dispositivo IoT Edge, siga el tutorial para supervisar dispositivos IoT Edge. Obtendrá información sobre cómo agregar el módulo metrics-collector al dispositivo. En este artículo se proporciona información general sobre la arquitectura de supervisión y se explican las opciones para configurar métricas en el dispositivo.

Azure Monitor para IoT Edge(4:06)

Arquitectura

Captura de pantalla de la arquitectura de monitoreo de métricas con IoT Hub.

Nota: Descripción
1 Todos los módulos deben emitir métricas mediante el modelo de datos de Prometheus. Aunque las métricas integradas permiten una amplia visibilidad de la carga de trabajo de forma predeterminada, los módulos personalizados también pueden emitir métricas específicas del escenario para mejorar la solución de supervisión. Obtenga información sobre cómo instrumentar módulos personalizados mediante bibliotecas de código abierto en el artículo Incorporación de métricas personalizadas .
2️ El módulo metrics-collector es un módulo de IoT Edge proporcionado por Microsoft que recopila métricas del módulo de carga de trabajo y los transporta fuera del dispositivo. La recopilación de métricas usa un modelo de extracción. Puede configurar la frecuencia de recopilación, los puntos de conexión y los filtros para controlar la salida de los datos del módulo. Para obtener más información, consulte la sección Configuración del recopilador de métricas de este artículo.
3️ Tiene dos opciones para enviar métricas desde el módulo del recopilador de métricas a la nube. Option 1 envía las métricas a Log Analytics.1 Las métricas recopiladas se ingieren en el área de trabajo de Log Analytics especificada mediante una tabla nativa fija denominada InsightsMetrics. El esquema de esta tabla es compatible con el modelo de datos de métricas de Prometheus.

Esta opción requiere acceso a espacio de trabajo en el puerto de salida 443. El identificador y la clave del área de trabajo de Log Analytics deben especificarse como parte de la configuración del módulo. Para habilitar en redes restringidas, consulte la sección Habilitar en escenarios de acceso de red restringidos de este artículo.
4️ Cada entrada de métrica contiene el ResourceId que especifiques como parte de la configuración del módulo. Esta asociación vincula automáticamente la métrica con el recurso especificado (por ejemplo, IoT Hub). Como resultado, las plantillas del libro de IoT Edge mantenidas pueden recuperar métricas mediante la emisión de consultas en el recurso.

Este enfoque también permite que varios centros de IoT compartan de forma segura un único área de trabajo de Log Analytics como una base de datos de métricas.
5️ Option 2 envía las métricas a IoT Hub.1 Puede configurar el módulo recopilador. para enviar las métricas recopiladas como mensajes JSON codificados con UTF-8 device-to-cloud a través del módulo edgeHub. Esta opción desbloquea la supervisión de dispositivos IoT Edge bloqueados que solo permiten el acceso externo al punto de conexión de IoT Hub. También permite la supervisión de dispositivos secundarios de IoT Edge en una configuración anidada en la que los dispositivos secundarios solo pueden acceder a su dispositivo primario.
6️ Cuando las métricas se enrutan a IoT Hub, es necesario configurar un flujo de trabajo en la nube (una sola vez). El flujo de trabajo procesa los mensajes que llegan desde el módulo metrics-collector y los envía al área de trabajo de Log Analytics. El flujo de trabajo habilita la funcionalidad de visualizaciones curadas y alertas incluso para las métricas que llegan a través de esta ruta opcional. Para más información sobre cómo configurar este flujo de trabajo en la nube, consulte la sección Métricas de ruta de este artículo.

1 Actualmente, el uso de option 1 para transportar directamente las métricas a Log Analytics desde el dispositivo IoT Edge es la ruta de acceso más sencilla que requiere una configuración mínima. Se prefiere la primera opción a menos que su escenario específico exija el enfoque option 2 para que el dispositivo IoT Edge se comunique solo con IoT Hub.

Módulo del recopilador de métricas

Puede agregar un módulo metrics-collector proporcionado por Microsoft a una implementación de IoT Edge para recopilar métricas de módulo y enviarlos a Azure Monitor. El código del módulo se open source y está disponible en el repositorio IoT Edge GitHub.

El módulo metrics-collector se proporciona como una imagen de contenedor de Docker de varios arcos que admite Linux X64, ARM32, ARM64 y Windows X64 (versión 1809). Está disponible públicamente en el Registro de artefactos de Microsoft en mcr.microsoft.com/azureiotedge-metrics-collector.

Configuración del recopilador de datos

Configure el recopilador de métricas mediante variables de entorno. Como mínimo, debe especificar las variables marcadas como Requeridas en esta tabla.

Nombre de la variable de entorno Descripción
ResourceId Id. de recurso del centro de IoT con el que se comunica el dispositivo. Para más información, consulte Identificador de recurso.

Required

Valor predeterminado: ninguno.
UploadTarget Controla si las métricas se envían directamente a Azure Monitor a través de HTTPS o a IoT Hub como mensajes D2C. Para obtener más información, consulte Destino de carga.

Puede ser AzureMonitor o IoTMessage.

No es necesario

Valor predeterminado: AzureMonitor.
LogAnalyticsWorkspaceId ID del área de trabajo de Log Analytics.

Solo es necesario si UploadTarget es AzureMonitor

Valor predeterminado: ninguno.
LogAnalyticsSharedKey Clave del área de trabajo de Log Analytics.

Solo es necesario si UploadTarget es AzureMonitor

Valor predeterminado: ninguno.
ScrapeFrequencyInSecs Intervalo de tiempo periódico en segundos en el que recopilar y transportar métricas.

Ejemplo: 600.

No es necesario

Valor predeterminado: 300
MetricsEndpointsCSV Lista separada por comas de los puntos de conexión desde los cuales se recopilan métricas de Prometheus. Todos los puntos de conexión del módulo de los que se recopilan las métricas deben aparecer en esta lista.

Ejemplo: http://edgeAgent:9600/metrics, http://edgeHub:9600/metrics, http://MetricsSpewer:9417/metrics.

No es necesario

Valor predeterminado: http://edgeHub:9600/metrics, http://edgeAgent:9600/metrics.
AllowedMetrics Lista de métricas que se recopilarán; se omitirán todas las demás métricas. Se establece en una cadena vacía que se vaya a deshabilitar. Para obtener más información, vea Permitir y bloquear listas.

Ejemplo: metricToScrape{quantile=0.99}[endpoint=http://MetricsSpewer:9417/metrics]

No es necesario

Valor predeterminado: vacío.
BlockedMetrics Lista de métricas que se omitirán. Invalida AllowedMetrics, por lo que no se notifica una métrica si se incluye en ambas listas. Para obtener más información, vea Permitir y bloquear listas.

Ejemplo: metricToIgnore{quantile=0.5}[endpoint=http://VeryNoisyModule:9001/metrics], docker_container_disk_write_bytes

No es necesario

Valor predeterminado: vacío.
CompressForUpload Controla si se debe usar la compresión al cargar las métricas. Se aplica a todos los destinos de carga.

Ejemplo: true.

No es necesario

Valor predeterminado: true.
AzureDomain Especifica el dominio de Azure de nivel superior que se va a usar al ingerir métricas directamente en Log Analytics.

Ejemplo: azure.us

No es necesario

Valor predeterminado: azure.com

Id. de recurso

El módulo metrics-collector necesita el identificador Azure Resource Manager del centro de IoT al que pertenece el dispositivo IoT Edge. Escriba este identificador como el valor de la variable de entorno ResourceID .

El identificador de recurso usa el formato siguiente: /subscriptions/<subscription id>/resourceGroups/<resource group name>/providers/Microsoft.Devices/IoTHubs/<iot hub name>. Puede encontrar el identificador de recurso en la página Properties del centro de IoT en el portal de Azure.

Captura de pantalla que muestra cómo recuperar tu identificador de recurso de las propiedades del IoT Hub.

O bien, puede usar el comando az resource show para obtener el identificador:

az resource show -g <resource group> -n <hub name> --resource-type "Microsoft.Devices/IoTHubs"

Destino de carga

La opción de configuración UploadTarget controla si las métricas se envían directamente a Azure Monitor o a IoT Hub.

Si establece UploadTarget en IoTMessage, el módulo publica las métricas como mensajes de IoT. El punto de conexión /messages/modules/<metrics collector module name>/outputs/metricOutput emite estos mensajes como JSON con codificación UTF8. Por ejemplo, si el módulo recopilador de métricas de IoT Edge se denomina IoTEdgeMetricsCollector, el punto de conexión es /messages/modules/IoTEdgeMetricsCollector/outputs/metricOutput. El formato es el siguiente:

[{
    "TimeGeneratedUtc": "<time generated>",
    "Name": "<prometheus metric name>",
    "Value": <decimal value>,
    "Label": {
        "<label name>": "<label value>"
    }
}, {
    "TimeGeneratedUtc": "2020-07-28T20:00:43.2770247Z",
    "Name": "docker_container_disk_write_bytes",
    "Value": 0.0,
    "Label": {
        "name": "AzureMonitorForIotEdgeModule"
    }
}]

Listas de permitidos y bloqueados

Las AllowedMetrics opciones de configuración y BlockedMetrics aceptan listas separadas por espacios o comas de selectores de métricas. Una métrica coincidirá con la lista y se incluirá o excluirá si coincide con una o varias métricas de cualquiera de esas listas.

Los selectores de métricas usan un formato similar a un subconjunto del lenguaje de consulta PromQL.

metricToSelect{quantile=0.5,otherLabel=~Re[ge]*|x}[http://VeryNoisyModule:9001/metrics]

Los selectores de métricas constan de tres partes:

Nombre de la métrica (metricToSelect).

  • Puede usar caracteres comodín * (cualquier número de caracteres) y ? (cualquier carácter individual) en nombres de métricas. Por ejemplo, *CPU coincide con maxCPU y minCPU, pero no con CPUMaximum. ???CPU coincide con maxCPU y minCPU, pero no con maximumCPU.
  • Este componente es necesario en un selector de métricas.

Selectores basados en etiquetas ({quantile=0.5,otherLabel=~Re[ge]*|x}).

  • Incluya varios valores de métricas entre corchetes. Asimismo, los valores deben estar separados por comas.
  • Una métrica coincidirá si al menos todas las etiquetas del selector están presentes y también coinciden.
  • Igual que sucede con PromQL, se permiten los siguientes operadores de coincidencia.
    • =: coincide con etiquetas exactamente iguales a la cadena proporcionada (distingue mayúsculas de minúsculas).
    • !=: coincide con etiquetas que no son exactamente iguales a la cadena proporcionada.
    • =~: coincide con las etiquetas de una expresión regular proporcionada. Por ejemplo: label=~CPU|Mem|[0-9]*.
    • !~: coincide con las etiquetas que no se ajustan a una expresión regular proporcionada.
    • La expresión regular está totalmente delimitada (los valores ^ y $ se agregan automáticamente al inicio y al final de cada expresión regular)
    • Este componente es opcional en un selector de métricas.

Selector de puntos de conexión ([http://VeryNoisyModule:9001/metrics]).

  • La dirección URL debe coincidir exactamente con una dirección URL enumerada en MetricsEndpointsCSV.
  • Este componente es opcional en un selector de métricas.

Una métrica debe coincidir con todas las partes de un selector determinado para que se seleccione. Debe coincidir con el nombre y tener todas las mismas etiquetas con valores coincidentes y proceder del punto de conexión especificado. Por ejemplo, mem{quantile=0.5,otherLabel=foobar}[http://VeryNoisyModule:9001/metrics] no coincide con el selector mem{quantile=0.5,otherLabel=~foo|bar}[http://VeryNoisyModule:9001/metrics]. Use varios selectores para crear un comportamiento similar a OR en lugar de un comportamiento similar a AND.

Por ejemplo, para permitir la métrica mem personalizada con cualquier etiqueta de un módulo module1 , pero solo permitir la misma métrica de module2 con la etiqueta agg=p99, agregue el siguiente selector a AllowedMetrics:

mem{}[http://module1:9001/metrics] mem{agg="p99"}[http://module2:9001/metrics]

O bien, para permitir las métricas personalizadas mem y cpu con cualquier etiqueta o punto de conexión, agregue lo siguiente a AllowedMetrics:

mem cpu

Habilitación en escenarios de acceso de red restringido

Si envía métricas directamente al área de trabajo de Log Analytics, permita el acceso saliente a las siguientes direcciones URL:

  • https://<LOG_ANALYTICS_WORKSPACE_ID>.ods.opinsights.azure.com/*
  • https://<LOG_ANALYTICS_WORKSPACE_ID>.oms.opinsights.azure.com/*

Consideraciones del proxy

El módulo metrics-collector se escribe en .NET Core. Use las mismas instrucciones que para los módulos del sistema para permitir la comunicación a través de un servidor proxy.

La recopilación de métricas de los módulos locales usa el http protocolo . Excluya la comunicación local para que no pase por el servidor proxy estableciendo la variable de entorno NO_PROXY. Establezca el valor NO_PROXY en una lista separada por comas de nombres de host que se deben excluir. Use nombres de módulo para los nombres de host. Por ejemplo: edgeHub,edgeAgent,myCustomModule.

Métricas de ruta

A veces, debe ingerir métricas a través de IoT Hub en lugar de enviarlos directamente a Log Analytics. Por ejemplo, al monitorizar dispositivos IoT Edge en una configuración anidada donde los dispositivos secundarios solo tienen acceso al hub de IoT Edge de su dispositivo principal. Otro ejemplo consiste en implementar un dispositivo IoT Edge con acceso de red saliente solo a IoT Hub.

Para habilitar la supervisión en este escenario, configure el módulo metrics-collector para enviar métricas como mensajes de dispositivo a nube (D2C) a través del módulo edgeHub. Active la funcionalidad estableciendo la variable de entorno UploadTargetIoTMessage en la configuración del recopilador.

Sugerencia

Recuerde agregar una ruta de EdgeHub para entregar mensajes de métricas desde el módulo recopilador a IoT Hub. La ruta tiene este aspecto: FROM /messages/modules/replace-with-collector-module-name/* INTO $upstream.

Esta opción requiere una configuración adicional, una configuración de flujo de trabajo en la nube, para entregar mensajes de métricas que llegan a IoT Hub al área de trabajo de Log Analytics. Sin esta configuración, las demás partes de la integración, como las visualizaciones seleccionadas y las alertas , no funcionan.

Nota:

Tenga en cuenta los costos adicionales con esta opción. Los mensajes de métricas se descuentan de la cuota de mensajes de IoT Hub. También se le cobrará por los recursos de ingesta y flujo de trabajo en la nube de Log Analytics.

Flujo de trabajo en la nube de ejemplo

Un flujo de trabajo en la nube que entrega mensajes de métricas de IoT Hub a Log Analytics está disponible como parte del ejemplo de registro y supervisión de IoT Edge. Puede implementar el ejemplo en los recursos en la nube existentes o usarlo como referencia de implementación de producción.

Pasos siguientes

Explore los tipos de visualizaciones curadas que proporciona Azure Monitor.