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

Применимо к:IoT Edge 1.4 галочка IoT Edge 1.4

Если при запуске 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
  • warning
  • сведения
  • debug
  • 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), не могут быть настроены на предприятии; сообщения можно отправлять через WebSocket. В этом случае для подключения по 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? Отправьте запрос, чтобы мы как можно скорее устранили неисправность.

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