Устранение неполадок устройства IoT Edge

Применяется к:IoT Edge 1.6 с галочкой IoT Edge 1.6

Внимание

IoT Edge 1.6 LTS — поддерживаемый релиз. Поддержка IoT Edge 1.5 LTS заканчивается 10 ноября 2026 года; IoT Edge 1.4 LTS завершил срок службы 12 ноября 2024 года. Если вы используете более ранний выпуск, ознакомьтесь с Update IoT Edge.

Если в среде возникают проблемы, связанные с Azure IoT Edge, используйте эту статью в качестве руководства по устранению неполадок и диагностике.

Выполните команду Check

Первым шагом при устранении неполадок IoT Edge должно быть использование команды check. Он запускает коллекцию тестов конфигурации и подключения для распространенных проблем. Команда check доступна в release 1.0.7 и более поздних версиях.

Примечание.

Средство устранения неполадок не может выполнять проверки подключения, если устройство IoT Edge находится за прокси-сервером.

check Выполните следующую команду или включите --help флаг, чтобы просмотреть полный список параметров:

sudo iotedge check

Средство устранения неполадок выполняет множество проверок, которые сортируются по следующим трем категориям:

  • Configuration checks — средство проверяет сведения, которые могут препятствовать подключению устройств IoT Edge к облаку. Сюда входят проблемы с файлом конфигурации и подсистемой контейнеров.
  • Connection checks — средство проверяет, может ли среда выполнения IoT Edge обращаться к портам на хост-устройстве. Он также проверяет, что все компоненты IoT Edge могут подключаться к Центру Интернета вещей. Этот набор проверок возвращает ошибки, если устройство IoT Edge находится за прокси-сервером.
  • Проверка готовности к рабочей среде — средство ищет рекомендуемые рекомендации по рабочей среде. Он проверяет состояние сертификатов центра сертификации устройств (ЦС) и конфигурацию файла журнала модуля.

Средство проверки IoT Edge использует контейнер для выполнения диагностики. Образ mcr.microsoft.com/azureiotedge-diagnostics:latestконтейнера доступен через реестр артефактов Майкрософт (MAR). Если вам нужно выполнить проверку на устройстве без прямого доступа к Интернету, устройства должны получить доступ к образу контейнера.

В сценарии с вложенными IoT Edge устройствами вы можете получить доступ к образу диагностики на нижестоящих устройствах, настраивая перенаправление запросов на изображение через родительские устройства.

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

Сведения о каждом из проверок диагностики, которые выполняются в этом средстве, включая действия при получении ошибки или предупреждения, см. в разделе Встроенные функции устранения неполадок.

Сбор сведений об отладке с помощью команды "Пакет поддержки"

Когда необходимо собрать журналы с устройства IoT Edge, наиболее удобным способом является использование команды support-bundle. По умолчанию эта команда собирает журналы модулей, диспетчера безопасности IoT Edge, обработчика контейнеров, выходные данные JSON iotedge check и другие полезные сведения об отладке. Она сжимает их в единый файл для облегчения совместного использования. Команда support-bundle доступна в release 1.0.9 и более поздних версиях.

Выполните команду support-bundle с флагом --since, чтобы указать, за какой период вы хотите получить логи. Например, 6h получает журналы за последние шесть часов, 6d получает журналы за последние шесть дней и 6m получает журналы за последние шесть минут. --help Включите флаг, чтобы просмотреть полный список параметров.

sudo iotedge support-bundle --since 6h

По умолчанию support-bundle команда создает ZIP-файл с именем support_bundle.zip в каталоге, где выполняется команда. --output Используйте флаг, чтобы указать другой путь или имя файла для выходных данных.

Дополнительные сведения о команде см. в справке:

iotedge support-bundle --help

Можно также использовать встроенный вызов прямого метода UploadSupportBundle для отправки выходных данных команды пакета поддержки в Хранилище BLOB-объектов Azure.

Предупреждение

Выходные данные команды support-bundle могут содержать имена узлов, имена устройств, имена модулей и информацию, зарегистрированную вашими модулями. Имейте в виду этот аспект, если вы делитесь данными на общедоступном форуме.

Проверка метрик, собранных в рабочей среде

Модули среды выполнения IoT Edge создают метрики для мониторинга и понимания работоспособности IoT Edge устройств. Добавьте модуль сборщика метрик в развертывания для обработки сбора этих метрик и отправки их в облако для упрощения мониторинга.

Дополнительные сведения см. в статье Сбор и транспортировка метрик.

Проверьте версию IoT Edge

Если вы используете более раннюю версию IoT Edge, обновление может устранить проблему. Средство iotedge check проверяет, является ли демон безопасности IoT Edge последней версией, но не проверяет версии модулей хаба и агента IoT Edge. Чтобы проверить версию модулей среды выполнения на устройстве, используйте команды iotedge logs edgeAgent и iotedge logs edgeHub. Номер версии отображается в журналах при запуске модуля.

Инструкции по обновлению устройства см. в разделе Update IoT Edge.

Проверка установки IoT Edge на устройствах

Вы можете проверить установку IoT Edge на устройствах, отслеживая модульный двойник `edgeAgent`.

Чтобы получить последний двойник модуля edgeAgent, выполните следующую команду из Azure Cloud Shell:

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

Эта команда выводит все сообщаемые свойства edgeAgent. Ниже приведены некоторые полезные действия для мониторинга состояния устройства:

  • состояние среды выполнения
  • время запуска среды выполнения
  • время последнего выхода из среды выполнения
  • счетчик перезапусков среды выполнения

Проверьте состояние диспетчера безопасности IoT Edge и его журналов

Диспетчер безопасности IoT Edge обрабатывает такие операции, как инициализация системы IoT Edge при запуске и подготовке устройств. Если IoT Edge не запускается, журналы диспетчера безопасности могут предоставлять полезные сведения.

  • Просмотрите состояние системных служб IoT Edge:

    sudo iotedge system status
    
  • Просмотрите журналы системных служб IoT Edge:

    sudo iotedge system logs -- -f
    
  • Включите журналы уровня отладки для просмотра более подробных журналов системных служб IoT Edge:

    1. Включите журналы уровня отладки.

      sudo iotedge system set-log-level debug
      sudo iotedge system restart
      
    2. После отладки вернитесь к стандартным журналам информационного уровня.

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

Проверка журналов контейнеров на наличие ошибок

После запуска управляющей программы безопасности IoT Edge проверьте журналы контейнеров, чтобы найти проблемы. Начните с развернутых контейнеров, а затем проверьте контейнеры, составляющие среду выполнения IoT Edge: edgeAgent и edgeHub. Журналы агента IoT Edge обычно предоставляют сведения о жизненном цикле каждого контейнера. Журналы центра IoT Edge предоставляют сведения о обмене сообщениями и маршрутизации.

Журналы контейнеров можно получить из нескольких мест:

  • На устройстве IoT Edge выполните следующую команду, чтобы просмотреть журналы:

    iotedge logs <container name>
    
  • На портале Azure используйте встроенное средство устранения неполадок. Дополнительные сведения см. в разделе Устранение неполадок устройств IoT Edge в портале Azure.

  • Используйте прямой метод UploadModuleLogs для отправки журналов модуля в Хранилище BLOB-объектов Azure.

Очистка журналов контейнеров

По умолчанию подсистема контейнеров Moby не устанавливает ограничения размера журнала контейнеров. Со временем обширные журналы могут заполнить устройство, в результате чего устройство исчерпает место на диске. Если большие журналы контейнеров влияют на производительность устройства IoT Edge, используйте следующую команду, чтобы принудительно удалить контейнер и связанные с ним журналы.

Если вы по-прежнему устраняете неполадки, дождитесь завершения проверки журналов контейнеров, чтобы выполнить этот шаг.

Предупреждение

При принудительном удалении edgeHub контейнера с неотправленными сообщениями и без настройки хостового хранилища неотправленные сообщения будут потеряны.

docker rm --force <container name>

Дополнительные сведения о текущем обслуживании журналов и рабочих сценариях см. в разделе "Настройка драйвера ведения журнала по умолчанию".

Просмотр сообщений, передаваемых через центр IoT Edge

Вы можете просматривать сообщения, передаваемые через центр IoT Edge, и собирать аналитические сведения из подробных журналов из контейнеров среды выполнения. Чтобы включить подробные журналы для этих контейнеров, задайте значение переменной среды RuntimeLogLevel в манифесте развертывания.

Чтобы просмотреть сообщения, передаваемые через центр IoT Edge, задайте для переменной среды RuntimeLogLevel значение debug для модуля EdgeHub.

Модули edgeHub и edgeAgent имеют эту переменную среды журнала среды выполнения с заданным значением по infoумолчанию. Для этой переменной среды можно задавать следующие значения:

  • смертельный
  • ошибка
  • предупреждение
  • инфо
  • отладка
  • многословный

Вы также можете проверить сообщения, отправляемые между Центр Интернета вещей и устройствами Интернета вещей. Просмотрите эти сообщения с помощью расширения Центр Интернета вещей Azure для Visual Studio Code. Для получения дополнительной информации см. Handy tool when you develop with Azure IoT.

Перезапуск контейнеров

После изучения журналов и сообщений можно попытаться перезапустить контейнеры.

На устройстве IoT Edge используйте следующие команды для перезапуска модулей:

iotedge restart <container name>

Перезапустите контейнеры среды выполнения IoT Edge:

iotedge restart edgeAgent && iotedge restart edgeHub

Вы также можете удаленно перезапустить модули с портала Azure. Дополнительные сведения см. в разделе Устранение неполадок устройств IoT Edge в портале Azure.

Проверьте правила конфигурации брандмауэра и портов

Azure IoT Edge поддерживает обмен данными с локального сервера в облако Azure с помощью поддерживаемых протоколов Центр Интернета вещей. Дополнительные сведения см. в разделе "Выбор протокола связи с устройством". Для повышения безопасности всегда настраивайте каналы связи между Azure IoT Edge и Центр Интернета вещей Azure в качестве исходящего трафика. Эта конфигурация, основанная на шаблоне обмена данными со службой, сводит к минимуму область атаки для вредоносной сущности. Входящая связь требуется только для определенных сценариев, когда Центр Интернета вещей Azure нужно отправлять сообщения на устройство Azure IoT Edge. Сообщения из облака в устройство защищены с помощью защищенных каналов TLS и могут быть защищены с помощью сертификатов X.509 и модулей устройств TPM. Диспетчер безопасности Azure IoT Edge управляет тем, как эту связь можно установить. Дополнительные сведения см. в диспетчере безопасности Azure IoT Edge.

Хотя IoT Edge обеспечивает расширенную конфигурацию для защиты среды выполнения Azure IoT Edge и развернутых модулей, она по-прежнему зависит от базовой конфигурации компьютера и сети. Убедитесь, что для безопасного пограничного взаимодействия с облаком настроены правильные правила сети и брандмауэра. Используйте следующую таблицу в качестве руководства при настройке правил брандмауэра для базовых серверов, где размещена среда выполнения Azure IoT Edge:

Протокол Порт Входящие Исходящий Руководство
Протокол передачи телеметрических сообщений MQTT 8883 ЗАБЛОКИРОВАННЫЕ (по умолчанию) ЗАБЛОКИРОВАННЫЕ (по умолчанию)
  • Настройте исходящие подключения на открытые при использовании MQTT в качестве протокола связи.
  • IoT Edge не поддерживает порт 1883 для MQTT.
  • Входящие подключения должны быть заблокированы.
AMQP 5671 ЗАБЛОКИРОВАННЫЕ (по умолчанию) ОТКРЫТЫЙ (по умолчанию)
  • Протокол связи по умолчанию для IoT Edge.
  • Необходимо настроить значение Open, если Azure IoT Edge не настроены для других поддерживаемых протоколов или AMQP является требуемым протоколом связи.
  • IoT Edge не поддерживает порт 5672 для AMQP.
  • Блокировать этот порт, если Azure IoT Edge использует другой поддерживаемый протокол Центр Интернета вещей.
  • Входящие подключения должны быть заблокированы.
HTTPS 443 ЗАБЛОКИРОВАННЫЕ (по умолчанию) ОТКРЫТЫЙ (по умолчанию)
  • Настройте исходящие подключения на порт 443 для назначения IoT Edge. Эта конфигурация требуется при использовании сценариев, выполняемых вручную, или службы подготовки устройств Azure IoT (DPS).
  • Входящее подключение должно быть открыто только для определенных сценариев:
    • Если у вас есть прозрачный шлюз с подчиненными устройствами, которые могут отправлять запросы методов. В этом случае порт 443 не должен быть открыт для внешних сетей для подключения к Центр Интернета вещей или предоставления служб Центр Интернета вещей через Azure IoT Edge. Таким образом, правило для входящего трафика может разрешать открытие только входящего подключения из внутренней сети.
    • Для сценариев передачи данных клиент-устройство (C2D).
  • IoT Edge не поддерживает порт 80 для HTTP.
  • Если протоколы, отличные от HTTP (например, AMQP или MQTT), не могут быть настроены в организации; Сообщения можно отправлять через WebSockets. Порт 443 используется для связи WebSocket в этом случае.

Последний вариант: остановка и повторное создание всех контейнеров

Иногда системе может потребоваться значительное специальное изменение для работы с существующими ограничениями сети или операционной системы. Например, системе может потребоваться другой монтаж диска данных и настройки прокси. Если вы попытаетесь выполнить все предыдущие шаги и по-прежнему получаете сбои контейнера, системные кэши Docker или сохраненные параметры сети могут быть не обновлены с последней перенастройкой. В этом случае используйте docker prune для получения чистого начала с нуля.

Следующая команда останавливает систему IoT Edge (а также все контейнеры) и использует параметры all и volume для docker prune, чтобы удалить все контейнеры и тома. Просмотрите предупреждение, которое выдает команда, и подтвердите, используя y, когда будете готовы.

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]

Запустите систему снова. Чтобы обеспечить безопасность, примените любую оставшуюся конфигурацию и запустите систему с одной командой.

sudo iotedge config apply

Подождите несколько минут и проверьте еще раз.

sudo iotedge list

Следующие шаги

Вы думаете, что вы нашли ошибку на платформе IoT Edge? Отправьте запрос, чтобы команда могла продолжать улучшать платформу.

Если у вас есть другие вопросы, создайте запрос в службу поддержки для получения справки.