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

Применимо к: значок "Да" IoT Edge 1.1 Другие версии: IoT Edge 1.2

Применимо к: значок "Да" IoT Edge 1.2 Другие версии: IoT Edge 1.1

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

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

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

Примечание

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

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

В Linux

sudo iotedge check

Windows:

iotedge check
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, чтобы просмотреть полный список параметров.

В Linux

sudo iotedge support-bundle --since 6h

Windows:

iotedge support-bundle --since 6h
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 не запускается, полезную информацию можно найти в журналах диспетчера безопасности.

В Linux

  • Просмотрите состояние диспетчера безопасности IoT Edge:

    sudo systemctl status iotedge
    
  • Просмотрите журналы диспетчера безопасности IoT Edge:

    sudo journalctl -u iotedge -f
    
  • Просмотрите более подробные сведения журналов диспетчера безопасности IoT Edge:

    1. Измените параметры управляющей программы IoT Edge:

      sudo systemctl edit iotedge.service
      
    2. Обновите следующие строки:

      [Service]
      Environment=IOTEDGE_LOG=debug
      
    3. Перезапустите управляющую программу безопасности IoT Edge:

      sudo systemctl cat iotedge.service
      sudo systemctl daemon-reload
      sudo systemctl restart iotedge
      

Windows:

  • Просмотрите состояние диспетчера безопасности IoT Edge:

    Get-Service iotedge
    
  • Просмотрите журналы диспетчера безопасности IoT Edge:

    . {Invoke-WebRequest -useb aka.ms/iotedge-win} | Invoke-Expression; Get-IoTEdgeLog
    
  • Просмотрите журналы диспетчера безопасности IoT Edge за последние 5 минут:

    . {Invoke-WebRequest -useb aka.ms/iotedge-win} | Invoke-Expression; Get-IoTEdgeLog -StartTime ([datetime]::Now.AddMinutes(-5))
    
  • Просмотрите более подробные сведения журналов диспетчера безопасности IoT Edge:

    1. Добавьте переменную среды системного уровня:

      [Environment]::SetEnvironmentVariable("IOTEDGE_LOG", "debug", [EnvironmentVariableTarget]::Machine)
      
    2. Перезапустите управляющую программу безопасности IoT Edge:

      Restart-Service iotedge
      
  • Просмотрите состояние системных служб 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 в файле конфигурации YAML. Чтобы открыть этот файл, выполните следующее.

В Linux

sudo nano /etc/iotedge/config.yaml

Windows:

notepad C:\ProgramData\iotedge\config.yaml

По умолчанию элемент agent будет выглядеть, как показано в примере ниже:

agent:
  name: edgeAgent
  type: docker
  env: {}
  config:
    image: mcr.microsoft.com/azureiotedge-agent:1.1
    auth: {}

Вместо env: {} вставьте следующий фрагмент:

env:
  RuntimeLogLevel: debug

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

YAML-файлы не могут содержать отступы в виде табуляции. Вместо этого используйте двойные пробелы. Перед элементами верхнего уровня не допускаются начальные пробелы.

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

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

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

Дальнейшие действия

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

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