Solución de problemas del dispositivo IoT Edge

Se aplica a:Marca de verificación de IoT Edge 1.5 IoT Edge 1.5 marca de verificación de IoT Edge 1.4 IoT Edge 1.4

Importante

IoT Edge 1.5 LTS e IoT Edge 1.4 LTS son versiones compatibles. IoT Edge 1.4 LTS finaliza el ciclo de vida el 12 de noviembre de 2024. Si está usando una versión anterior, consulte Actualización de IoT Edge.

Si experimenta problemas al ejecutar Azure IoT Edge en el entorno, use este artículo como guía para solucionar problemas y de diagnóstico.

Ejecución del comando "check"

El primer paso a la hora de solucionar problemas de IoT Edge debe ser usar el comando check, que ejecuta una serie de pruebas de configuración y conectividad para problemas comunes. El comando check está disponible en la versión 1.0.7 y posteriores.

Nota:

La herramienta de solución de problemas no puede ejecutar comprobaciones de conectividad si el dispositivo IoT Edge está detrás de un servidor proxy.

Puede ejecutar el comando check como se indica a continuación, o bien incluir la marca --help para ver una lista completa de opciones:

sudo iotedge check

La herramienta de solución de problemas ejecuta muchas comprobaciones que se clasifican en estas tres categorías:

  • Las comprobaciones de seguridad examinan detalles que podrían evitar que los dispositivos de IoT Edge se conectaran a la nube, incluidos problemas con el archivo de configuración y el motor del contenedor.
  • Las comprobaciones de conexión comprueban que el entorno en tiempo de ejecución de IoT Edge pueda acceder a los puertos en el dispositivo de host y que todos los componentes de IoT Edge puedan conectarse a IoT Hub. Este conjunto de comprobaciones devuelve errores si el dispositivo IoT Edge está detrás de un proxy.
  • Las comprobaciones de preparación para producción buscan procedimientos recomendados de producción, como el estado de los certificados de la entidad de certificación (CA) del dispositivo y la configuración del archivo de registro de módulo.

La herramienta de comprobación de IoT Edge usa un contenedor para ejecutar sus diagnósticos. La imagen de contenedor, mcr.microsoft.com/azureiotedge-diagnostics:latest, está disponible a través del Registro de contenedor de Microsoft. Si necesita ejecutar una comprobación en un dispositivo sin acceso directo a Internet, los dispositivos deberán tener acceso a la imagen de contenedor.

En un escenario mediante dispositivos IoT Edge anidados, puede obtener acceso a la imagen de diagnóstico en dispositivos de bajada mediante el enrutamiento de la imagen a través de los dispositivos primarios.

sudo iotedge check --diagnostics-image-name <parent_device_fqdn_or_ip>:<port_for_api_proxy_module>/azureiotedge-diagnostics:1.2

Para información sobre cada una de las comprobaciones de diagnóstico que ejecuta esta herramienta, como qué hacer si se recibe un error o una advertencia, consulte Comprobaciones de solución de problemas de IoT Edge.

Recopilación de información de depuración con el comando "support-bundle"

Cuando necesite recopilar registros de un dispositivo IoT Edge, la manera más cómoda es usar el comando support-bundle. Este comando recopila de forma predeterminada los registros del módulo, del administrador de seguridad de IoT Edge y del motor de contenedor, la salida JSON iotedge check y otra información de depuración de utilidad. y, luego, lo comprime todo en un solo archivo para poder compartirlo fácilmente. El comando support-bundle está disponible en la versión 1.0.9 y posteriores.

Ejecute el comando support-bundle con la marca --since para especificar hasta qué momento en el pasado deben remontarse los registros. Por ejemplo, con 6h, se obtendrán registros de las últimas seis horas, con 6d de los últimos seis días y con 6m de los últimos seis minutos, etc. Incluya la marca --help para ver una lista completa de opciones.

sudo iotedge support-bundle --since 6h

De manera predeterminada, el comando support-bundle crea un archivo ZIP denominado support_bundle.zip en el directorio donde se llama al comando. Use la marca --output para especificar una ruta de acceso o un nombre de archivo diferentes para la salida.

Para obtener más información sobre el comando, vea la información de ayuda.

iotedge support-bundle --help

También puede usar la llamada de método directo integrada UploadSupportBundle para cargar la salida del comando de conjunto de soporte técnico en Azure Blob Storage.

Advertencia

La salida del comando support-bundle puede contener nombres de hosts, de dispositivos y de módulos, información registrada por los módulos, etc. Tenga esto en cuenta si comparte la salida en un foro público.

Revisión de las métricas recopiladas del entorno de ejecución

Los módulos del entorno de ejecución de Azure IoT Edge generan métricas que le ayudarán a supervisar y comprender el estado de los dispositivos IoT Edge. Agregue el módulo metrics-collector a las implementaciones para controlar la recopilación de estas métricas y su envío a la nube para facilitar la supervisión.

Para más información, consulte Recopilación y transporte de métricas.

Comprobación de la versión de IoT Edge

Si está ejecutando una versión anterior de IoT Edge, la actualización puede resolver el problema. La herramienta iotedge check comprueba que el demonio de seguridad de IoT Edge es la versión más reciente, pero no comprueba las versiones de los módulos de agente y centro de IoT Edge. Para comprobar la versión de los módulos del entorno de ejecución en el dispositivo, use los comandos iotedge logs edgeAgent y iotedge logs edgeHub. El número de versión se declara en los registros cuando se inicia el módulo.

Para obtener instrucciones sobre cómo actualizar el dispositivo, consulte Actualización del demonio de seguridad y el entorno de ejecución de IoT Edge.

Comprobación de la instalación de IoT Edge en los dispositivos

Puede comprobar la instalación de IoT Edge en los dispositivos mediante la supervisión del módulo gemelo edgeAgent.

Para obtener el módulo gemelo edgeAgent más reciente, ejecute el siguiente comando desde Azure Cloud Shell:

az iot hub module-twin show --device-id <edge_device_id> --module-id '$edgeAgent' --hub-name <iot_hub_name>

Este comando genera todas las propiedades notificadas de edgeAgent. Aquí hay algunos elementos útiles para supervisar el estado del dispositivo:

  • estado del entorno de ejecución
  • hora de inicio del entorno de ejecución
  • última hora de salida del entorno de ejecución
  • número de reinicios del entorno de ejecución

Comprobación del estado del administrador de seguridad de IoT Edge y sus registros

El administrador de seguridad de IoT Edge es responsable de operaciones como la inicialización del sistema de IoT Edge en los dispositivos de inicio y aprovisionamiento. Si IoT Edge no se inicia, los registros del administrador de seguridad pueden proporcionar información útil.

  • Vea el estado de los servicios del sistema de IoT Edge:

    sudo iotedge system status
    
  • Vea los registros de los servicios del sistema de IoT Edge:

    sudo iotedge system logs -- -f
    
  • Habilite los registros de nivel de depuración para ver registros más detallados de los servicios del sistema de IoT Edge:

    1. Habilite los registros de nivel de depuración.

      sudo iotedge system set-log-level debug
      sudo iotedge system restart
      
    2. Vuelva a los registros de nivel de información predeterminados después de la depuración.

      sudo iotedge system set-log-level info
      sudo iotedge system restart
      

Comprobación de los registros del contenedor para detectar problemas

Cuando el demonio de seguridad de IoT Edge se esté ejecutando, examine los registros de los contenedores para detectar problemas. Empiece por los contenedores implementados y, luego, examine los contenedores que componen el runtime de IoT Edge: edgeAgent y edgeHub. Los registros del agente de IoT Edge normalmente proporcionan información sobre el ciclo de vida de cada contenedor. Los registros del centro de IoT Edge proporcionan información sobre mensajería y enrutamiento.

Puede recuperar los registros de contenedor desde varios lugares:

Limpieza de registros de contenedor

De manera predeterminada, el motor de contenedor de Moby no establece límites de tamaño de registro de contenedor. Con el tiempo, los registros extensos pueden provocar que el dispositivo se rellene con registros y se agote el espacio en disco. Si los registros de contenedor grandes afectan al rendimiento de un dispositivo IoT Edge, use el siguiente comando para forzar la eliminación del contenedor junto con sus registros relacionados.

Si sigue en la solución de problemas, espere hasta que hayan inspeccionado los registros de contenedor para completar este paso.

Advertencia

Si fuerza la eliminación del contenedor edgeHub mientras este tiene un trabajo pendiente de mensajes no entregados y no tiene configurado ningún almacenamiento de host, se perderán los mensajes sin entregar.

docker rm --force <container name>

Para escenarios de mantenimiento y producción de registros continuos, configure el controlador de registro predeterminado.

Visualización de mensajes que se envían a través del centro de IoT Edge

Puede ver los mensajes que se envían a través del centro de IoT Edge y recopilar la información que se encuentra en los registros detallados procedentes de los contenedores del runtime. Para activar los registros detallados en estos contenedores, establezca la variable de entorno RuntimeLogLevel en el manifiesto de implementación.

Para ver los mensajes que pasan a través del centro de IoT Edge, establezca la variable de entorno RuntimeLogLevel en debug para el módulo edgeHub.

Los módulos edgeHub y edgeAgent tienen esta variable de entorno del registro de runtime, con el valor predeterminado establecido en info. Esta variable de entorno puede tomar los siguientes valores:

  • fatal
  • error
  • general,
  • info
  • debug
  • detallado

También puede comprobar los mensajes que se envían entre IoT Hub y los dispositivos de IoT. Vea estos mensajes mediante la extensión de Azure IoT Hub para Visual Studio Code. Para más información, consulte Handy tool when you develop with Azure IoT (Herramienta práctica para desarrollar con Azure IoT).

Reinicio de los contenedores

Después de investigar los registros y mensajes en busca de información, puede intentar reiniciar los contenedores.

En el dispositivo IoT Edge, use los siguientes comandos para reiniciar los módulos:

iotedge restart <container name>

Reinicie los contenedores del entorno de ejecución de IoT Edge:

iotedge restart edgeAgent && iotedge restart edgeHub

También puede reiniciar los módulos de forma remota desde Azure Portal. Para más información, consulte Supervisión y solución de problemas de dispositivos IoT Edge desde Azure Portal.

Comprobación de las reglas de configuración de los puertos y el firewall

Azure IoT Edge permite la comunicación desde un servidor local a la nube de Azure mediante protocolos de IoT Hub compatibles. Para más información, consulte elección de un protocolo de comunicación. Para mejorar la seguridad, los canales de comunicación entre Azure IoT Edge y Azure IoT Hub siempre están configurados para que sea la salida. Esta configuración se basa en el patrón de comunicación asistida de servicios, que minimiza la superficie de ataque que una entidad malintencionada puede explorar. La comunicación de entrada solo es necesaria para escenarios específicos donde Azure IoT Hub necesita insertar mensajes en el dispositivo de Azure IoT Edge. Los mensajes de nube a dispositivo están protegidos mediante canales TLS seguros y pueden protegerse aún más mediante los certificados X.509 y los módulos de dispositivos TPM. El Administrador de seguridad de Azure IoT Edge rige cómo se puede establecer esta comunicación; consulte Administrador de seguridad de IoT Edge.

Aunque IoT Edge proporciona una configuración mejorada para proteger el entorno de ejecución de Azure IoT Edge y los módulos implementados, todavía depende de la configuración de red y la máquina subyacentes. Por lo tanto, es fundamental garantizar que existan reglas adecuadas de red y firewall configuradas para una comunicación segura entre Edge y la nube. La siguiente tabla se puede usar como guía al configurar reglas de firewall para los servidores subyacentes donde se hospeda el runtime de Azure IoT Edge:

Protocolo Puerto Entrante Saliente Guía
MQTT 8883 BLOQUEADO (valor predeterminado) BLOQUEADO (valor predeterminado)
  • Configure el valor de Saliente (de salida) para que se abra cuando se use MQTT como protocolo de comunicación.
  • 1883 para MQTT no es compatible con IoT Edge.
  • Se deben bloquear las conexiones entrantes (de entrada).
AMQP 5671 BLOQUEADO (valor predeterminado) ABIERTO (valor predeterminado)
  • Protocolo de comunicación predeterminado de IoT Edge.
  • Debe configurarse para que se abra si Azure IoT Edge no está configurado para otros protocolos compatibles o si AMQP es el protocolo de comunicación que se desea.
  • 5672 para AMQP no es compatible con IoT Edge.
  • Bloquee este puerto cuando Azure IoT Edge use un protocolo compatible de IoT Hub diferente.
  • Se deben bloquear las conexiones entrantes (de entrada).
HTTPS 443 BLOQUEADO (valor predeterminado) ABIERTO (valor predeterminado)
  • Configure el valor de las conexiones salientes (de salida) para que sea abierto en 443 para el aprovisionamiento de IoT Edge. Esta configuración es necesaria cuando se usen scripts manuales o Azure IoT Device Provisioning Service (DPS).
  • La conexión entrante solo debe tener el estado "Abierta" en escenarios específicos:
    • Si tiene una puerta de enlace transparente con dispositivos de bajada que pueden enviar solicitudes de método. En este caso, no es necesario que el puerto 443 esté abierto a redes externas para conectarse a IoTHub ni proporcionar servicios de IoTHub a través de Azure IoT Edge. Por lo tanto, la regla de entrada podría limitarse solo a las conexiones entrantes (de entrada) abiertas desde la red interna.
    • En el caso de escenarios de cliente a dispositivo (C2D).
  • 80 para HTTP no es compatible con IoT Edge.
  • Si no se pueden configurar los protocolos que no sean HTTP (por ejemplo, AMQP o MQTT) en la empresa; los mensajes pueden enviarse a través de WebSockets. En ese caso, el puerto 443 se utilizará para la comunicación de WebSocket.

Último recurso: detener y volver a crear todos los contenedores

A veces, un sistema puede requerir una modificación especial significativa para trabajar con restricciones de sistema operativo o redes existentes. Por ejemplo, un sistema podría requerir una configuración de proxy y montaje de disco de datos diferente. Si ha intentado todos los pasos anteriores y sigue recibiendo errores de contenedor, es posible que la configuración de red persistente o la caché del sistema de Docker no esté actualizada con la reconfiguración más reciente. En este caso, el último recurso es usar docker prune y empezar desde cero.

El comando siguiente detiene el sistema IoT Edge (y, por tanto, todos los contenedores), usa la opción "all" y "volume" para docker prune para quitar todos los contenedores y volúmenes. Revise la advertencia que el comando emite y confirme con y cuando esté listo.

sudo iotedge system stop
docker system prune --all --volumes
WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all volumes not used by at least one container
  - all images without at least one container associated to them
  - all build cache

Are you sure you want to continue? [y/N]

Vuelva a iniciar el sistema. Para hacerlo de forma segura, aplique cualquier posible configuración restante e inicie el sistema con un comando.

sudo iotedge config apply

Espere unos minutos y compruebe otra vez.

sudo iotedge list

Pasos siguientes

¿Cree que encontró un error en la plataforma de IoT Edge? Envíe un problema para que podamos seguir mejorando.

Si tiene más preguntas, cree una solicitud de soporte técnico para obtener ayuda.