Solución de problemas del dispositivo IoT Edge
Se aplica a: IoT Edge 1.1
Importante
IoT Edge 1.1: la fecha de finalización del soporte técnico fue el 13 de diciembre de 2022. Consulte la página del ciclo de vida de productos de Microsoft para obtener información sobre cómo se admite este producto, servicio, tecnología o API. Para más información sobre cómo actualizar a la versión más reciente de IoT Edge, 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:
En Linux:
sudo iotedge check
En Windows:
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.
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.
En Linux:
sudo iotedge support-bundle --since 6h
En Windows:
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 la versión del demonio de seguridad de IoT Edge es la más reciente, pero no comprueba las versiones de los módulos del concentrador y del agente 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 generará 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.
En Linux:
Vea el estado del administrador de seguridad de IoT Edge:
sudo systemctl status iotedge
Vea los registros del administrador de seguridad de IoT Edge:
sudo journalctl -u iotedge -f
Vea los registros más detallados del administrador de seguridad de IoT Edge:
Edite la configuración del demonio de IoT Edge:
sudo systemctl edit iotedge.service
Actualice las líneas siguientes:
[Service] Environment=IOTEDGE_LOG=debug
Reinicie el demonio de seguridad de IoT Edge:
sudo systemctl cat iotedge.service sudo systemctl daemon-reload sudo systemctl restart iotedge
En Windows:
Vea el estado del administrador de seguridad de IoT Edge:
Get-Service iotedge
Vea los registros del administrador de seguridad de IoT Edge:
. {Invoke-WebRequest -useb aka.ms/iotedge-win} | Invoke-Expression; Get-IoTEdgeLog
Vea solamente los últimos cinco minutos de los registros del administrador de seguridad de IoT Edge:
. {Invoke-WebRequest -useb aka.ms/iotedge-win} | Invoke-Expression; Get-IoTEdgeLog -StartTime ([datetime]::Now.AddMinutes(-5))
Vea los registros más detallados del administrador de seguridad de IoT Edge:
Agregue una variable de entorno del sistema
[Environment]::SetEnvironmentVariable("IOTEDGE_LOG", "debug", [EnvironmentVariableTarget]::Machine)
Reinicie el demonio de seguridad de IoT Edge:
Restart-Service iotedge
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:
En el dispositivo IoT Edge, ejecute el siguiente comando para ver los registros:
iotedge logs <container name>
En Azure Portal, use la herramienta de solución de problemas integrada. Supervisión y solución de problemas de dispositivos IoT Edge desde Azure Portal
Use el método directo UploadModuleLogs para cargar los registros de un módulo en Azure Blob Storage.
Limpieza de registros de contenedor
De forma predeterminada el motor del contenedor Moby no establece límites de tamaño de registro de contenedor. Con el tiempo, puede que el dispositivo se llene con registros y se quede sin 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 RuntimeLogLevel
en el archivo de configuración yaml. Para abrir el archivo:
En Linux:
sudo nano /etc/iotedge/config.yaml
En Windows:
notepad C:\ProgramData\iotedge\config.yaml
De forma predeterminada, el elemento agent
tendrá un aspecto similar al del ejemplo siguiente:
agent:
name: edgeAgent
type: docker
env: {}
config:
image: mcr.microsoft.com/azureiotedge-agent:1.1
auth: {}
Reemplace env: {}
por:
env:
RuntimeLogLevel: debug
Advertencia
Los archivos de YAML no pueden contener tabulaciones como sangría. Utilice en su lugar dos espacios. Los elementos de nivel superior no pueden tener espacios en blanco iniciales.
Guarde el archivo y reinicie el administrador de seguridad de IoT Edge.
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; vea 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 permite una mejor configuración para proteger el entorno de ejecución de Azure IoT Edge y los módulos implementados, todavía depende de la configuración de la máquina y la red 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) |
|
AMQP | 5671 | BLOQUEADO (valor predeterminado) | ABIERTO (valor predeterminado) |
|
HTTPS | 443 | BLOQUEADO (valor predeterminado) | ABIERTO (valor predeterminado) |
|
Ú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 probado todos los pasos anteriores y sigue recibiendo errores de contenedor, es posible que en algún lugar la caché del sistema docker o la configuración de red persistente no estén actualizados 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 "todos" y "volumen" para que docker prune
quite 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.