Мониторинг и наблюдение жизненно важны для поддержания надежности, эффективности и безопасности устройств Интернета вещей. При правильном подходе они обеспечивают обзор ваших систем Интернета вещей в режиме реального времени, а также доступ к данным, необходимым для устранения проблем, связанных с историей. Однако при наличии тысяч разнообразных устройств IoT достижение этих целей сопряжено со множеством сложностей.
В этой статье мы подробно рассмотрим типичные сценарии мониторинга устройств Интернета вещей. В частности, мы поговорим о различиях между мониторингом и наблюдением, о том, какие именно аспекты IoT заслуживают мониторинга и соответствующих стратегиях.
Но, для начала давайте уточним терминологию, поскольку слова «мониторинг» и «наблюдаемость» часто используются как взаимозаменяемые, несмотря на их различия.
Наблюдаемость и мониторинг
Начнем с мониторинга — термина с более устоявшейся историей. По своей сути, мониторинг направлен на получение информации о состоянии и производительности системы. Мониторинг начинается со сбора и анализа соответствующих метрик. Анализ обычно осуществляется с помощью информационных панелей. Однако разумный набор инструментов мониторинга должен выходить за рамки визуального представления, оценивая метрики в режиме реального времени и оповещая пользователей о любых аномалиях или проблемах.
Однако у традиционного подхода к мониторингу есть одна загвоздка: он требует знания того, что искать. Этот метод может оказаться неэффективным при столкновении с новыми проблемами. Именно здесь в игру вступает наблюдаемость, поскольку она может помочь вам справиться с так называемыми «неизвестными неизвестными». Проще говоря, система наблюдаема, когда вы можете ответить на вопросы о ее внутренней работе, основываясь исключительно на ее выходных данных. Обычно выходные данные программного обеспечения включают журналы, метрики и трассировки. Система с хорошей наблюдаемостью не только легче поддается диагностике, но и позволяет выявлять гораздо более широкий спектр проблем. Это связано с тем, что вы получаете гораздо более полное представление о системе, поэтому вам легче получить ответы на свои вопросы о том, что на самом деле происходит.
Наблюдаемость особенно важна в контексте Интернета вещей, где системы включают множество устройств и модулей. Попытка предвидеть каждую потенциальную комбинацию состояний, которая может привести к проблемам, в таком масштабе нецелесообразна, а то и невозможна.
Основные метрики и подходы к мониторингу
Давайте рассмотрим данные, которые стоит отслеживать, и конкретные инструменты, разработанные для этого. Начнем с ответа на вопрос: а получаем ли мы данные?
Не секрет, что Интернет вещей зачастую больше связан с данными, чем с вещами. Именно поэтому критически важно следить за передачей данных вашими устройствами. Надежная платформа Интернета вещей должна внимательно отслеживать такие метрики, как частота сообщений и объем передаваемых данных.
Однако ручной мониторинг трафика тысяч устройств, очевидно, неразумен. Необходимость автоматических оповещений в данном случае неоспорима. Как минимум, вы должны получать оповещения, когда устройство не отправляет данные, хотя вы ожидаете, что оно это сделает. Однако имейте в виду, что устройства Интернета вещей часто работают в непредсказуемых условиях, например, в зонах с ненадежным интернет-соединением. Поэтому кратковременный перерыв в передаче данных не всегда указывает на проблему с устройством. Кроме того, распространенной практикой является буферизация сообщений на вашем устройстве или на периферийном шлюзе, чтобы избежать потери данных. Важно помнить, что пороговые значения должны быть не слишком чувствительными. В противном случае вы будете получать оповещения о каждом сбое в работе сети, что неизбежно приведет к усталости от оповещений, и их эффективность снизится.
Более полезны метрики объема переданных данных и количества сообщений, отправленных через управляемый экземпляр Grafana, дающие вам представление о потоке данных каждого устройства. Поскольку оповещения по этим метрикам являются настолько распространенным и важным явлением, мы внедрили первоклассную поддержку обнаружения бездействия устройств. Пользователи могут легко настраивать определенные тайм-ауты бездействия для своих устройств и получать оперативные уведомления по электронной почте при их превышении. Если этого недостаточно, вы также можете настроить более сложные оповещения, используя Grafana и ее многочисленные интеграции с такими сервисами, как Slack или PagerDuty.

Общая информация о состоянии устройства
Мониторинг состояния устройства включает в себя отслеживание различных ключевых метрик. Например, производительности процессора, потребления памяти и сетевого трафика. Доступ к этим метрикам может помочь выявить проблемы с производительностью, ошибки программного обеспечения и даже внешние атаки.
Существует множество способов предоставления этих метрик. Однако в настоящее время наиболее популярна технология OpenTelemetry. Одним из главных преимуществ OpenTelemetry является независимость от поставщика. Это привело к появлению множества инструментов для работы с OpenTelemetry. Поэтому независимо от используемого языка или системы, вы будете под защитой. Это очень удобно, особенно в динамичном мире Интернета вещей, где каждое устройство может использовать своё уникальное программное обеспечение.
OpenTelemetry поддерживает три основных типа сигналов: метрики, журналы и трассировки. В большинстве случаев, описанных в этом разделе, устройствам достаточно предоставлять несколько важных метрик, например, текущее потребление памяти. Затем эти метрики необходимо перенести в облако, где их можно визуализировать, настроить оповещения и т. д. Этот путь уже проложен для сценариев использования в Интернете вещей благодаря таким проектам, как OpenTelemetry Collector или Telegraf, которые помогут вам собирать метрики с ваших устройств IoT.
Другие сигналы, специфичные для предметной области
Помимо общих характеристик отправки данных и использования ресурсов, вам может потребоваться отслеживать некоторые значения, специфичные для предметной области. Это может быть отправка журналов, трассировок или простых сообщений, содержащих контент, специфичный для приложения. Как для журналов, так и для трассировок вы снова можете положиться на экосистему OpenTelemetry. Это позволяет вам анализировать журналы и трассировки, используя ваши любимые бэкенды, такие как Grafana Loki/Tempo или стек Elastic Observability, без дополнительных усилий. С другой стороны, обмен сообщениями — это основная функциональность любой разумной платформы IoT. Другими словами, эти подходы должны быть тривиальны для реализации в большинстве сценариев.
Простота логов
Рассмотрим, например, автономный комбайн. Возможно, вам потребуется отслеживать его действия. Простой способ сделать это — отправить запись в момент начала действия с некоторыми дополнительными метаданными. То же самое можно сделать после завершения действия и для других соответствующих событий. По сути, каждая запись журнала — это просто структурированное событие с несколькими обязательными свойствами. Ниже приведён пример записи в журнал, отправляемой при начале стыковки комбайна:

Помимо основных полей, таких как временная метка и текст, сообщение может содержать дополнительные атрибуты, более подробно описывающие событие. Эти дополнительные данные могут быть полезны при поиске ошибок. Поэтому обязательно укажите всю важную информацию.
Глубокий контекстный анализ с помощью трассировок
Если вам нужна более подробная информация, вы также можете использовать трассировку. Трассировка соответствует одной логической операции системы и неявно определяется своими интервалами. Интервал представляет собой единицу работы этой операции. Он определяется временем начала и окончания, атрибутами и, опционально, родительским интервалом. Благодаря им трассировка образует направленный граф, описывающий конкретную операцию и её «подпрограммы». Кроме того, интервалы могут содержать несколько событий, описывающих что-либо, произошедшее в определённый момент времени.
Хотя трассировки обычно связаны с мониторингом распределённых систем, трассировку также можно использовать в устройствах Интернета вещей, чтобы понять общую картину происходящего на объекте.
Допустим, вам интересно, как автономный комбайн возвращается на свою док-станцию. Сначала комбайну необходимо найти док-станцию, поэтому он вызывает API. Эта операция соответствует одному дочернему действию (Locating the station). Затем комбайн движется к док станции. Это второе действие (Driving to the Dock). Используя все инструменты отслеживания одновременно, вы можете увидеть полную картину работы устройства.

Возвращаемся к основам с помощью простых сообщений
В некоторых сценариях отправка простых структурированных сообщений может быть более практичной, чем использование сигналов OpenTelemetry. Возвращаясь к примеру с автономным сборщиком, вам, вероятно, потребуется отслеживать его местоположение. Для этого рассмотрите возможность отправки следующего JSON-сообщения:

В идеале используемая вами платформа Интернета вещей должна уметь анализировать такие сообщения и загружать их в подходящую базу данных по вашему выбору. После этого вы сможете анализировать и визуализировать данные в соответствии с вашими потребностями.
В качестве примера мы настроили устройство, которое периодически отправляет платформе сообщения со своим местоположением и скоростью. Затем мы перенаправили поток данных во встроенный приемник Grafana. Теперь платформа собирает все сообщения и помещает их в базу данных, к которой можно выполнять запросы в Grafana.
Кроме того, это отличный пример использования визуализации Grafana Geomap. Она позволяет легко отображать местоположение ваших устройств. Посмотрите на изображение ниже, где мы использовали Grafana для визуализации данных, полученных от устройства.

Заключение
Теперь вы готовы настроить стек Observability и начать мониторинг своих устройств Интернета вещей. По крайней мере, мы хотели бы, чтобы эта статья послужила для вас отправной точкой в мире наблюдения за устройствами Интернета вещей. Давайте выделим ключевые идеи:
Мониторинг передачи данных: Внимательно следите за передачей данных с ваших устройств и будьте готовы к оповещениям для оперативного обнаружения любых сбоев.
Отслеживание показателей работоспособности устройства: Отображайте важные показатели работоспособности вашего устройства для обеспечения бесперебойной работы.
Отправка данных, специфичных для приложения, через журналы, трассировки и структурированные сообщения: Продумайте свой домен и работу устройства и отправляйте все данные, которые могут понадобиться для будущей отладки и мониторинга в режиме реального времени.
Изучение экосистемы OpenTelemetry: Рассмотрите возможность использования экосистемы OpenTelemetry в Интернете вещей, поскольку она становится стандартом наблюдения, предоставляя множество вариантов для бэкэндов наблюдения и обслуживания различных сред выполнения устройств.
Когда система падает «на ровном месте», а алертов нет — это всегда больно и дорого. Мониторинг и наблюдаемость становятся не просто технической обязанностью, а инструментом выживания: предугадывать сбои, находить узкие места и держать инфраструктуру под контролем. Именно об этом — наши ближайшие уроки, где мы разберём реальные подходы и инструменты, которые помогают айтишникам оставаться на шаг впереди проблем.
4 сентября, 20:00 — Мониторинг PostgreSQL в Zabbix
16 сентября, 20:00 — Grafana Stack: закрываем все современные потребности Observability
Best Practice по мониторингу инфраструктуры и её компонентов вы можете изучить на курсе «Observability: мониторинг, логирование, трейсинг». Чтобы узнать свой уровень знаний для поступления, пройдите тест.