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

Область применения:IoT Edge 1.4 checkmark IoT Edge 1.4

Важно!

IoT Edge 1.4 является поддерживаемым выпуском. Если вы используете более ранний выпуск, см. статью Обновление IoT Edge.

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

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

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

Примечание.

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

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

sudo iotedge check

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

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

Средство проверки IoT Edge использует контейнер для выполнения диагностики. Образ контейнера mcr.microsoft.com/azureiotedge-diagnostics:latest доступен в Microsoft Container Registry. Если необходимо выполнить проверку на устройстве без прямого доступа к Интернету, устройствам потребуется доступ к образу контейнера.

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

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

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

Сбор отладочной информации с помощью команды support-bundle

Если необходимо собрать журналы из устройства IoT Edge, удобнее всего использовать команду support-bundle. По умолчанию эта команда собирает журналы модуля, диспетчера безопасности IoT Edge и подсистемы контейнеров, выходные данные JSON iotedge check и другие полезные сведения об отладке. Она сжимает их в единый файл для облегчения совместного использования. Команда support-bundle доступна в выпуске 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, чтобы передать выходные данные команды support-bundle в хранилище BLOB-объектов Azure.

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

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

Проверка метрик, собранных в среде выполнения

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

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

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

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

Инструкции по обновлению устройства см. в статье Обновление управляющей программы безопасности 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 проверьте журналы контейнеров на наличие ошибок. Начните с развернутых контейнеров, а затем просмотрите контейнеры, которые составляют среду выполнения edgeAgent и edgeHub. В журналах агента IoT Edge обычно содержатся сведения о жизненном цикле каждого контейнера. В журналах центра IoT Edge содержатся сведения об обмене сообщениями и маршрутизации.

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

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

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

Если вы еще не закончили устранение неполадок, перед выполнением этой операции завершите проверку журналов в контейнере.

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

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

docker rm --force <container name>

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

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

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

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

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

  • fatal
  • error
  • предупреждений (не рекомендуется)
  • info
  • отладка
  • verbose

Можно также проверить сообщения, передаваемые между центром Интернета вещей и устройствами IoT. Просмотрите эти сообщения с помощью расширения Центр Интернета вещей Azure для Visual Studio Code . Дополнительные сведения см. в записи блога об удобном средстве при разработке с помощью Центра Интернета вещей Azure.

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

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

На устройстве 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 IoT Edge. Сообщения из облака на устройство защищаются с помощью безопасных каналов TLS и могут иметь дополнительную защиту при использовании сертификатов X.509 и модулей устройства TPM. Сведения об установке этой связи с помощью диспетчера безопасности Azure IoT Edge см. в этой статье.

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

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

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

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

Следующая команда останавливает систему IoT Edge (и, следовательно, все контейнеры), использует параметр "все" и "том" для 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? Отправьте запрос, чтобы мы как можно скорее устранили неисправность.

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