Compartir a través de


Solución de problemas del dispositivo IoT Edge

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.

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

Ejecución del comando "check"

El primer paso al solucionar problemas IoT Edge debe usar el comando check. Ejecuta una colección de pruebas de configuración y conectividad para problemas comunes. El comando check está disponible en release 1.0.7 y versiones 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.

Ejecute el comando check de la siguiente manera o incluya la bandera --help para ver una lista completa de opciones:

sudo iotedge check

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

  • Comprobaciones de configuración - La herramienta examina los detalles que pueden impedir que los dispositivos IoT Edge se conecten a la nube. Incluye problemas con el archivo de configuración y el motor de contenedor.
  • Conexiones: la herramienta comprueba que el entorno de ejecución de IoT Edge puede acceder a los puertos en el dispositivo host. También comprueba que todos los componentes de IoT Edge pueden conectarse al centro de IoT. Este conjunto de comprobaciones devuelve errores si el dispositivo IoT Edge está detrás de un proxy.
  • Comprobaciones de preparación para la producción - La herramienta busca las mejores prácticas recomendadas para la producción. Comprueba el estado de los certificados de entidad de certificación (CA) del dispositivo y la configuración del archivo de registro del módulo.

La herramienta de comprobación 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 artefactos de Microsoft (MAR). Si necesita ejecutar una comprobación en un dispositivo sin acceso directo a Internet, los dispositivos necesitan acceso a la imagen de contenedor.

En un escenario que usa dispositivos IoT Edge anidados, puede obtener acceso a la imagen de diagnóstico en dispositivos descendentes mediante el enrutamiento de la extracción 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 obtener información sobre cada una de las comprobaciones de diagnóstico que se ejecuta esta herramienta, incluido qué hacer si recibe un error o una advertencia, consulte Funcionalidad de solución de problemas integrada.

Recopilación de información de depuración mediante el comando support-bundle

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

Ejecute el comando support-bundle con la opción --since para especificar cuánto tiempo del pasado desea obtener registros. Por ejemplo, 6h obtiene los registros de las últimas seis horas, 6d obtiene los registros de los últimos seis días y 6m obtiene los registros de los últimos seis minutos. Incluya la --help marca para ver una lista completa de opciones.

sudo iotedge support-bundle --since 6h

De forma predeterminada, el support-bundle comando crea un archivo ZIP denominado support_bundle.zip en el directorio donde se ejecuta el comando. Use la --output marca 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 su 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 support-bundle en Azure Blob Storage.

Advertencia

La salida del support-bundle comando puede contener nombres de host, dispositivos, nombres de módulo e información registrada por los módulos. Tenga en cuenta esta inclusión si comparte el resultado en un foro público.

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

Los módulos en tiempo de ejecución de 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 enviarlos a la nube para facilitar la supervisión.

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

Comprueba tu versión de IoT Edge

Si ejecuta una versión anterior de IoT Edge, la actualización podría 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 del hub de IoT Edge y del agente. Para comprobar la versión de los módulos en tiempo de ejecución en el dispositivo, use los comandos iotedge logs edgeAgent y iotedge logs edgeHub. El número de versión aparece en los registros cuando se inicia el módulo.

Para obtener instrucciones sobre cómo actualizar el dispositivo, consulte Update IoT Edge.

Comprobar la instalación de IoT Edge en los dispositivos

Puede comprobar la instalación de IoT Edge en los dispositivos supervisando el 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. Estos son algunos ú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

Compruebe el estado del administrador de seguridad de IoT Edge y sus registros.

El administrador de seguridad IoT Edge controla las operaciones como inicializar el sistema IoT Edge en el inicio y aprovisionar dispositivos. 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

Una vez iniciado el demonio de seguridad IoT Edge, compruebe los logs de los contenedores para detectar problemas. Comience con los contenedores implementados y compruebe los contenedores que componen el entorno de ejecución 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 la mensajería y el enrutamiento.

Puede obtener los registros de contenedor de 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 llenar el dispositivo y provocar que se agoten el espacio en disco. Si los registros grandes del contenedor afectan al rendimiento de su dispositivo de IoT Edge, utilice el siguiente comando para forzar la eliminación del contenedor y sus registros relacionados.

Si sigue solucionando problemas, espere hasta que inspeccione los registros de contenedor para realizar este paso.

Advertencia

Si se fuerza la eliminación del edgeHub contenedor mientras tiene una acumulación de mensajes no entregados y no se ha configurado ningún almacenamiento de host, los mensajes no entregados se perderán.

docker rm --force <container name>

Para obtener más información sobre los escenarios de mantenimiento y producción de registros en curso, consulte Configuración del controlador de registro predeterminado.

Visualización de los mensajes que pasan por el centro de IoT Edge

Puede ver los mensajes que pasan por el hub de IoT Edge y recopilar información de los registros detallados de los contenedores de ejecución. Para activar los registros detallados en estos contenedores, debe establecer la variable de entorno RuntimeLogLevel en el manifiesto de implementación.

Para ver los mensajes que pasan por el 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 de registro en tiempo de ejecución, con el valor predeterminado establecido infoen . Esta variable de entorno puede tomar los siguientes valores:

  • Letal
  • error
  • advertencia
  • info
  • debug
  • verbose

También puede comprobar los mensajes que se envían entre IoT Hub y dispositivos IoT. Vea estos mensajes mediante la extensión Azure IoT Hub para Visual Studio Code. Para obtener más información, consulte Herramienta útil al 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 módulos de forma remota desde el portal de Azure. Para obtener más información, consulte Solución de problemas de dispositivos IoT Edge en el portal de Azure.

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

Azure IoT Edge admite la comunicación desde un servidor local a Azure nube mediante protocolos de IoT Hub compatibles. Para obtener más información, consulte Elegir un protocolo de comunicación de dispositivos. Para mejorar la seguridad, configure siempre los canales de comunicación entre Azure IoT Edge y Azure IoT Hub como salientes. Esta configuración, basada en el patrón de comunicación asistida por servicio, minimiza la superficie expuesta a ataques para una entidad malintencionada. La comunicación entrante solo es necesaria en los escenarios específicos donde Azure IoT Hub necesita enviar mensajes al dispositivo Azure IoT Edge. Los mensajes de nube a dispositivo están protegidos mediante canales TLS seguros y se pueden proteger aún más mediante certificados X.509 y módulos de dispositivos TPM. El administrador de seguridad de Azure IoT Edge controla cómo se puede establecer esta comunicación. Para obtener más información, consulte Azure IoT Edge security manager.

Aunque IoT Edge proporciona una configuración mejorada para proteger el entorno en tiempo de ejecución de Azure IoT Edge y los módulos implementados, todavía depende de la configuración de red y de las máquinas subyacentes. Asegúrese de que las reglas de red y firewall adecuadas están configuradas para la comunicación segura de borde a nube. Use la tabla siguiente como guía al configurar reglas de firewall para los servidores subyacentes en los que se hospeda Azure IoT Edge runtime:

Protocolo Puerto Entrante Saliente Guía
protocolo MQTT 8883 BLOQUEADO (predeterminado) BLOQUEADO (predeterminado)
  • Configure el valor de Saliente (de salida) para que se abra cuando se use MQTT como protocolo de comunicación.
  • IoT Edge no admite el puerto 1883 para MQTT.
  • Se deben bloquear las conexiones entrantes (de entrada).
AMQP 5671 BLOQUEADO (predeterminado) ABIERTO (valor predeterminado)
  • Protocolo de comunicación predeterminado para IoT Edge.
  • Debe configurarse para que sea Open si Azure IoT Edge no está configurado para otros protocolos compatibles o AMQP es el protocolo de comunicación deseado.
  • IoT Edge no admite el puerto 5672 para AMQP.
  • Bloquee este puerto cuando Azure IoT Edge use un protocolo IoT Hub compatible diferente.
  • Se deben bloquear las conexiones entrantes (de entrada).
HTTPS 443 BLOQUEADO (predeterminado) ABIERTO (valor predeterminado)
  • Configurar Saliente (Outbound) para que esté abierto en el puerto 443 para el aprovisionamiento de IoT Edge. Esta configuración es necesaria cuando se usan scripts manuales o Azure IoT Device Provisioning Service (DPS).
  • La conexión entrante solo debe ser abierta para 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 IoT Hub ni proporcionar servicios IoT Hub 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).
  • IoT Edge no admite el puerto 80 para HTTP.
  • 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 prueba 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, use docker prune para obtener un inicio limpio desde cero.

El siguiente comando detiene el sistema IoT Edge (y, por tanto, todos los contenedores) y usa las opciones de all y volume para docker prune para quitar todos los contenedores y volúmenes. Revise la advertencia que emite el comando 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? Presentar un problema para que el equipo continúe mejorando la plataforma.

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