Solución de problemas de enrutamiento de mensajes
En este artículo se proporcionan instrucciones para la supervisión y solución de problemas comunes y la resolución de enrutamiento de mensajes de IoT Hub.
Supervisión del enrutamiento de mensajes
Se recomienda supervisar las métricas de IoT Hub relacionadas con el enrutamiento de mensajes y los puntos de conexión para proporcionarle una visión general de los mensajes enviados. También puede crear una configuración de diagnóstico para enviar operaciones para rutas en los registros de recursos de IoT Hub a registros de Azure Monitor, Event Hubs o Azure Storage para el procesamiento personalizado. Para obtener más información sobre el uso de métricas, registros de recursos y la configuración de diagnósticos, consulte Supervisión de IoT Hub. Para ver un tutorial, consulte Configuración y uso de métricas y registros de diagnóstico con una instancia de IoT Hub.
También se recomienda habilitar la ruta de reserva si quiere mantener los mensajes que no coinciden con la consulta en ninguna de las rutas. Estos mensajes se pueden conservar en el punto de conexión integrado durante el número de días de retención configurados.
Principales problemas
A continuación se muestran los problemas más comunes que se observan con el enrutamiento de mensajes. Para empezar a solucionar problemas, seleccione el problema para ver los pasos detallados.
- Mensajes de mis dispositivos no se enrutan según lo previsto
- Repentinamente, he dejado de recibir mensajes en el punto de conexión de Event Hubs integrado
Los mensajes de mis dispositivos no se están redirigiendo según lo esperado
Para solucionar este problema, analice la siguiente información.
Las métricas de enrutamiento para este punto de conexión
Todas las métricas de IoT Hub relacionadas con el enrutamiento incluyen el término enrutamiento. Puede combinar información de varias métricas para identificar la causa principal de los problemas. Por ejemplo, use la métrica Entrega de enrutamiento para identificar el número de mensajes que se entregaron a un punto de conexión o que se eliminaron por no coincidir con las consultas en ninguna de las rutas y porque la ruta de reserva estaba deshabilitada. Compruebe la métrica Latencia de enrutamiento para observar si la latencia de la entrega de mensajes es constante o va en aumento. Una latencia cada vez mayor puede indicar un problema con un punto de conexión específico y se recomienda comprobar el estado del punto de conexión. Estas métricas de enrutamiento también tienen dimensiones que proporcionan detalles sobre la métrica, como el tipo de punto de conexión, el nombre de punto de conexión específico y un motivo por el que el mensaje no se entregó.
Registros de recursos para cualquier problema operativo
Observe los registros de recursos de las rutas para obtener más información sobre las operaciones de enrutamiento y de punto de conexión o identificar los errores y el código de error correspondiente para comprender mejor el problema. Por ejemplo, el nombre de la operación RouteEvaluationError en el registro indica que no se pudo evaluar la ruta debido a un problema con el formato de mensaje. Use las sugerencias proporcionadas para los nombres de operaciones específicos para mitigar el problema. Cuando se registra un evento como un error, el registro también proporcionará más información sobre el motivo del error en la evaluación. Por ejemplo, si el nombre de la operación es EndpointUnhealthy, un código de error 403004 indica que el punto de conexión se ha quedado sin espacio.
Mantenimiento del punto de conexión
Use la API REST Get Endpoint Health para obtener el estado de mantenimiento de los puntos de conexión. Esta API también proporciona información sobre la última vez que se envió correctamente un mensaje al punto de conexión, el último error conocido, la última hora de error conocida y la última vez que se realizó un intento de envío para este punto de conexión. Use la posible mitigación que proporciona el último error conocido específico.
Repentinamente, he dejado de recibir mensajes en el punto de conexión integrado
Para solucionar este problema, analice la siguiente información.
¿Se ha creado una nueva ruta?
Una vez que se crea una ruta, los datos dejan de fluir al punto de conexión integrado, a menos que se cree una ruta a ese punto de conexión. Configure una ruta al punto de conexión de eventos para asegurarse de que los mensajes continúen fluyendo hasta el punto de conexión integrado si se agrega una nueva ruta.
¿Se ha deshabilitado la ruta de reserva?
La ruta de reserva envía todos los mensajes que no cumplen ninguna de las condiciones de la consulta en cualquiera de las rutas existentes al punto de conexión de Event Hubs integrado (mensajes y eventos), que es compatible con Event Hubs. Si el enrutamiento de mensajes está activado, puede habilitar la funcionalidad de ruta de reserva. Si no hay ninguna ruta al punto de conexión integrado y está habilitada una ruta de reserva, solo se enviarán al punto de conexión integrado los mensajes que no coinciden con las condiciones de la consulta sobre rutas. Además, si se eliminan todas las rutas existentes, se debe habilitar la ruta de reserva para recibir todos los datos en el punto de conexión integrado.
Puede habilitar o deshabilitar la ruta de reserva en Azure Portal mediante la hoja Enrutamiento de mensajes de IoT Hub. También puede usar Azure Resource Manager para FallbackRouteProperties para usar un punto de conexión personalizado para una ruta de reserva.
Últimos errores conocidos de los puntos de conexión de enrutamiento de IoT Hub
Obtener el estado del punto de conexión en la API de REST proporciona el estado de mantenimiento de los puntos de conexión y el último error conocido, para identificar el motivo por el que un punto de conexión no es correcto. En esta tabla se enumeran los errores más comunes.
Último error conocido | Descripción/cuándo se produce | Posible mitigación |
---|---|---|
Transitorio | Se produjo un error transitorio y IoT Hub volverá a intentar la operación. | Observe los registros de recursos de rutas. |
InternalError | Se produjo un error al entregar un mensaje a un punto de conexión. | Este error es una excepción interna, pero también observa que el enruta los registros de recursos. |
No autorizado | IoT Hub no está autorizado para enviar mensajes al punto de conexión especificado. | Compruebe que la cadena de conexión está actualizada para el punto de conexión. Si ha cambiado, considere la posibilidad de actualizar la instancia de IoT Hub. Si el punto de conexión usa identidad administrada, compruebe que la entidad de seguridad de IoT Hub tenga los permisos necesarios en el destino. |
Limitado | IoT Hub se está limitando al escribir mensajes en el punto de conexión. | Revise la limitación para el punto de conexión afectado. Modifique las configuraciones del punto de conexión para escalar verticalmente si es necesario. |
Tiempo de espera | Tiempo de espera de la operación. | Vuelva a intentar la operación. |
No encontrado | El recurso de destino no existe. | Asegúrese de que el recurso de destino existe. |
No se ha encontrado el contenedor | El contenedor de almacenamiento no existe. | Asegúrese de que el contenedor de almacenamiento existe. |
Contenedor deshabilitado | El contenedor de almacenamiento está deshabilitado. | Asegúrese de que el contenedor de almacenamiento está habilitado. |
MaxMessageSizeExceeded | El enrutamiento de mensajes tiene un límite de tamaño de mensaje de 256 Kb. El tamaño del mensaje que se enruta supera este límite. | Compruebe si el tamaño del mensaje se puede reducir con menos propiedades de la aplicación o menos enriquecidas. |
PartitioningAndDuplicateDetectionNotSupported | Es posible que Service Bus no tenga habilitada la detección de duplicados. | Deshabilite la detección de duplicados de Service Bus o considere la posibilidad de usar una entidad sin detección de duplicados. |
SessionfulEntityNotSupported | Es posible que Service Bus no tenga habilitadas las sesiones. | Deshabilite la sesión de Service Bus o considere la posibilidad de usar una entidad sin sesiones. |
NoMatchingSubscriptionsForMessage | No hay ninguna suscripción para escribir un mensaje en el tema de Service Bus. | Cree una suscripción para los mensajes de IoT Hub a los que se va a redirigir. |
EndpointExternallyDisabled | El punto de conexión no está en un estado activo, por lo que IoT Hub puede enviar mensajes a él. | Habilite el punto de conexión para volver al estado activo. |
DeviceMaximumQueueDepthExceeded | Se ha alcanzado el límite de tamaño de Service Bus. | Considere la posibilidad de quitar los mensajes de Event Hubs de destino para permitir que se ingieran nuevos mensajes en Event Hubs. |
Registros de recursos de rutas
A continuación, se muestran los nombres de las operaciones y los códigos de error registrados en los registros de recursos de rutas.
Nombres de operación
Nombre de la operación | Nivel | Descripción |
---|---|---|
UndefinedRouteEvaluation | Información | El mensaje no se puede evaluar con una condición dada. Por ejemplo, si una propiedad de la condición de consulta de ruta está ausente en el mensaje. Más información sobre la sintaxis de consulta de enrutamiento. |
RouteEvaluationError | Error | Se produjo un error al evaluar el mensaje debido a un problema con el formato de mensaje. Por ejemplo, este error se registrará si no se especifica la codificación de contenido o si el tipo de contenido no es válido en el mensaje. Se deben establecer en las propiedades del sistema. |
DroppedMessage | Error | El mensaje se ha quitado y no se ha enrutado. Esto puede deberse a motivos como que el mensaje no coincidía con ninguna consulta de enrutamiento o punto de conexión inactivo y no se pudo entregar el mensaje después de varios reintentos. Se recomienda obtener más detalles sobre el punto de conexión mediante la API REST get endpoint health. |
EndpointUnhealthy | Error | El punto de conexión no ha aceptado mensajes de IoT Hub e IoT Hub está intentando reenviar los mensajes. Se recomienda observar el último error conocido a través de la API REST get endpoint health. |
EndpointDead | Error | El punto de conexión no ha aceptado mensajes de IoT Hub durante más de una hora. Se recomienda observar el último error conocido a través de la API REST get endpoint health. |
EndpointHealthy | Información | El punto de conexión es correcto y recibe mensajes de IoT Hub. Este mensaje no se registra continuamente, sino que solo se registra cuando el punto de conexión vuelve a tener un estado correcto. Este mensaje significa que IoT Hub no pudo enviar mensajes al punto de conexión, pero el punto de conexión ahora es correcto. |
OrphanedMessage | Información | El mensaje no coincide con ninguna ruta. |
InvalidMessage | Error | El mensaje no es válido debido a la incompatibilidad con el punto de conexión. Se recomienda comprobar las configuraciones del punto de conexión. |
Las operaciones UndefinedRouteEvaluation, RouteEvaluationError y OrphanedMessage se limitan y se registran en un máximo de una vez por minuto por IoT Hub.
Códigos comunes de error
Código de error | Descripción |
---|---|
401002 | Acceso no autorizado de Iot Hub |
413001 | Mensaje demasiado grande |
403004 | Profundidad máxima de cola de dispositivo superada |
503008 | Vínculo de recepción limitado |
500000 | Error de servidor genérico |
401 | No autorizado |
503 | Servicio no disponible |
500001 | Error de servidor |
400103 | Codificación de contenido o tipo de contenido no válido |
404001 | Dispositivo no encontrado |
Pasos siguientes
Si necesita más ayuda, puede ponerse en contacto con los expertos de Azure en los foros de Q&A o Stack Overflow. Como alternativa, puede registrar un incidente de soporte técnico de Azure. Vaya al sitio de Soporte técnico de Azure y seleccione Obtener soporte.