Я установил среду выполнения Azure IoT Edge на Raspberry Pi 3 (Debian Bullseye) для запуска своих граничных моделей. Все работало хорошо, пока не появилась ошибка:
A module runtime error occurred
caused by: A module runtime error occurred
caused by: connection error: Connection reset by peer (os error 104)
caused by: Connection reset by peer (os error 104)
Поэтому я решил запустить sudo iotedge check, который дал следующее:
Configuration checks (aziot-identity-service)
---------------------------------------------
√ keyd configuration is well-formed - OK
√ certd configuration is well-formed - OK
√ tpmd configuration is well-formed - OK
√ identityd configuration is well-formed - OK
√ daemon configurations up-to-date with config.toml - OK
√ identityd config toml file specifies a valid hostname - OK
√ aziot-identity-service package is up-to-date - OK
√ host time is close to reference time - OK
√ preloaded certificates are valid - OK
√ keyd is running - OK
√ certd is running - OK
√ identityd is running - OK
√ read all preloaded certificates from the Certificates Service - OK
√ read all preloaded key pairs from the Keys Service - OK
√ check all EST server URLs utilize HTTPS - OK
√ ensure all preloaded certificates match preloaded private keys with the same ID - OK
Connectivity checks (aziot-identity-service)
--------------------------------------------
√ host can connect to and perform TLS handshake with iothub AMQP port - OK
√ host can connect to and perform TLS handshake with iothub HTTPS / WebSockets port - OK
√ host can connect to and perform TLS handshake with iothub MQTT port - OK
Configuration checks
--------------------
√ aziot-edged configuration is well-formed - OK
√ configuration up-to-date with config.toml - OK
√ container engine is installed and functional - OK
× configuration has correct URIs for daemon mgmt endpoint - Error
docker: Error response from daemon: mkdir /var/lib/docker/overlay2/90aaeea51acd3c6e7d8281710a36b5b9ceddff484170687e9364688d06956d6a-init: no space left on device.
See 'docker run --help'.
√ aziot-edge package is up-to-date - OK
× container time is close to host time - Error
Could not query local time inside container
√ DNS server - OK
‼ production readiness: logs policy - Warning
Container engine is not configured to rotate module logs which may cause it run out of disk space.
Please see https://aka.ms/iotedge-prod-checklist-logs for best practices.
You can ignore this warning if you are setting log policy per module in the Edge deployment.
‼ production readiness: Edge Agent's storage directory is persisted on the host filesystem - Warning
The edgeAgent module is not configured to persist its /tmp/edgeAgent directory on the host filesystem.
Data might be lost if the module is deleted or updated.
Please see https://aka.ms/iotedge-storage-host for best practices.
‼ production readiness: Edge Hub's storage directory is persisted on the host filesystem - Warning
The edgeHub module is not configured to persist its /tmp/edgeHub directory on the host filesystem.
Data might be lost if the module is deleted or updated.
Please see https://aka.ms/iotedge-storage-host for best practices.
√ Agent image is valid and can be pulled from upstream - OK
√ proxy settings are consistent in aziot-edged, aziot-identityd, moby daemon and config.toml - OK
Connectivity checks
-------------------
× container on the default network can connect to upstream AMQP port - Error
Container on the default network could not connect to dc-hub-rnd.azure-devices.net:5671
× container on the default network can connect to upstream HTTPS / WebSockets port - Error
Container on the default network could not connect to dc-hub-rnd.azure-devices.net:443
× container on the IoT Edge module network can connect to upstream AMQP port - Error
Container on the azure-iot-edge network could not connect to dc-hub-rnd.azure-devices.net:5671
× container on the IoT Edge module network can connect to upstream HTTPS / WebSockets port - Error
Container on the azure-iot-edge network could not connect to dc-hub-rnd.azure-devices.net:443
26 check(s) succeeded.
3 check(s) raised warnings. Re-run with --verbose for more details.
6 check(s) raised errors. Re-run with --verbose for more details.
2 check(s) were skipped due to errors from other checks. Re-run with --verbose for more details.
Я вижу, что есть проблема с докером. Почему возникает эта ошибка? Подробнее о моих граничных модулях, работающих в док-контейнере: я использую модуль node-red для подключения к ПЛК через Ethernet и сбора оттуда данных для доставки в IoT-хаб. Я также делаю некоторую обработку сообщений в модуле node-red. Все работало нормально и по какой-то причине появилась эта ошибка. Я использую несколько таких периферийных устройств IoT и хочу быть уверенным, что такая ошибка больше не повторится. У кого-нибудь есть предположение о первопричине?
Я также думаю, как я могу решить эту проблему.
ОБНОВЛЯТЬ:
Дальнейшие исследования показали, что место на диске было заполнено в соответствии с df -h.
Пробовал освободить место первыми всплывающими гугл-методами, правда мне это не помогло.
Другие подобные устройства с теми же модулями занимают 10% места.
Я предполагаю, что, возможно, журналы модуля node-red заполнили дисковое пространство, потому что иногда я сталкивался с такими сообщениями, как «журналы слишком велики», и поэтому он мне ничего не показывал. Может быть какая-то автонастройка кешируемой памяти node-red, не так ли?


Я думаю, что все эти ошибки имеют точную основную причину: на вашем устройстве закончилось место на диске. Вы можете проверить, так ли это?
× configuration has correct URIs for daemon mgmt endpoint - Error
docker: Error response from daemon: mkdir /var/lib/docker/overlay2/90aaeea51acd3c6e7d8281710a36b5b9ceddff484170687e9364688d06956d6a-init: no space left on device.
See 'docker run --help'.
Очистив место, обязательно ознакомьтесь с производственным контрольным списком для Azure IoT Edge. Он настраивает сбор мусора изображений и настраивает ведение журнала по умолчанию, которое включает ротацию журнала.
Вполне возможно, что у вас есть много неиспользуемых образов докеров, которые можно удалить. Или, возможно, создается слишком много файлов журнала.
Попробуйте docker image prune -a В любом случае, после очистки диска вам нужно будет предпринять шаги, чтобы это не повторилось. Посмотрите, например, на ротацию журналов.
Спасибо, проблема была в логах. Итак, теперь я пытаюсь понять, как их удалить или сжать. Я видел, что файлы .gz можно удалять, верно?
Отлично, я обновил свой ответ двумя пунктами из Контрольного списка производства, они должны помочь избежать этой проблемы в будущем.
Я обнаружил, что следующие файлы становятся очень большими: syslog.1, messages.1, user.log.1. Ваши предложения ограничивают размер этих файлов?
о да, я боролся с тем, что я разместил вопрос.
df -hпоказывает мне, что мое место заполнено, но я не понимаю почему, другие подобные устройства занимают только 10% места. Вы знаете, как освободить место, потому что я не мог сделать это с помощью первых нагугленных методов?