Top.Mail.Ru

Signoz как инструмент для комплексного мониторинга в стеке OpenTelemetry

Введение

Мониторинг приложений является неотъемлемой частью работы в процессе разработки и поддержки приложения. От качества мониторинга может зависеть, на сколько быстро будут разрешаться ошибки в работе системы, разбор бизнес процессов, а также планирование новых фич. На старте разработки можно не заморачиваться над качеством мониторинга и выполнять подключение к единственному серверу. Однако в процессе масштабирования системы, переходе на микросервисную архитектуру, становится сложнее отслеживать определенные бизнес процессы и ошибки, которые возникают в процессе работы системы. Тут на помощь приходят инструменты мониторинга, сбора и агрегации логов, метрик и трейсов. Одним из таких инструментов является SigNoz. Давайте же вместе с ним познакомимся.

Компания Software Cats уже более пяти лет занимается аутстафом и аутсорсом по направлениям

Если у вас есть ИТ-проблема, оставьте ваши контакты, и мы поможем составить план ее решения.

О SigNoz

SigNoz является open source инструментом созданным разработчиками для разработчиков, что позволяет кастомизировать его под свои нужды. Позиционирует себя как единая платформа мониторинга метрик, трассировок и логирования, а также настраиваемые панели мониторинга. Имеет удобный и понятный интерфейс, что делает его изучение доступным для разработчиков различного уровня и опыта.

Архитектурно представляет набор, состоящий из OpenTelemetry, Clickhouse, ReactJs. Данные из различных источников попадают в коллектор Open Telemetry, который переправляет их в Clickhouse. Бэкенд Signoz, с помощью оптимизированных запросов извлекает данные в нужном ему виде, выполняет необходимую работу и отправляет на фронт, чтобы предоставить пользователям беспроблемный опыт для визуализации и анализа производительности приложений в режиме реального времени.

Плюсы использования

1. Предоставляет унифицированный UI для мониторинга метрик и трейсов
SigNoz собирает и предоставляет в едином интерфейсе журналы, метрики и трассировки, что позволяет получить полное представление о состоянии приложения. Поддерживает настраиваемые дашборды с информацией по флеймграфам, диаграммам Ганта, связям между сервисами. Подходит как альтернатива связки Prometheus (метрики) и Jaeger (трассировки). Поддерживает RED метрики, такие как RPS (кол-во запросов в секунду), Error rate (процент ошибок), Application latency (задержки приложения).

2. Настройка уведомлений
Мы можем настроить важные для нас уведомления, основанные на метриках, логах, трейсах, а также исключениях. В процессе настройки предоставляется возможность выбора канала для нотификаций, будь то email, slack, teams. 

3. Использует колоночную ClickHouse для хранения и быстрого доступа к данным

4. Экономическая эффективность
SigNoz - платформа с открытым исходным кодом, что позволяет избежать высоких затрат, связанных с проприетарными решениями, такими как Datadog и NewRelic. На сайте платформы, на данный момент, представлено три плана, включающие как бесплатное использование, так и enterprise. Если верить авторам, скрытые платежи отсутствуют, что исключает финансовые сюрпризы.

5. Мониторинг исключений
Для языков программирования, которые поддерживают автоматическую инструментизацию, доступен автоматический мониторинг. В противном случае, необходимо будет записывать исключения вручную. Чтобы вручную записать исключение, необходимо в код дописать span, взятый из tracer, и вызвать метод recordException(), или recordError().

Вкратце что значит автоматическая инструментизация
Вместо того, чтобы вручную добавлять код для сбора данных о производительности и поведении приложения, автоинструментация позволяет автоматически внедрять эту функциональность. В случае рабочего примера, прикрепленного в конце статьи, мною был добавлен в проект каждого микросервиса агент java open telemetry, которые инжектил в необходимые ему места span-ы для сбора метрик и трассировок.

Недостатки использования

1. Потенциальные проблемы с поддержкой
В отличии от коммерческих платформ, SigNoz как open source, может иметь менее формализованную поддержку, что может быть проблемой для новичков.

2. Сложность настройки и конфигурации
Запуск в производственной среде может потребовать хорошего понимания Kubernetes, Docker и других инструментов DevOps.

3. Высокое потребление ресурсов
SigNoz может иметь высокое потребление памяти, из за своей архитектуры, а также типов данных, которые он обрабатывает. В частности использование Clickhouse для хранения большого кол-ва данных, трейсов и метрик, способствует потреблению памяти, особенно при работе с сложными запросами. Кроме того, подход unified observability (объединение инструментов и данных в единую платформу), также требует большого кол-ва ресурсов.

Рассмотрев все плюсы и минусы SigNoz, давайте рассмотрим на практике на этот инструмент. В нашем примере будет следующий стек:

l Kotlin 1.9.25
l Spring boot 3.4.1
l Spring cloud
l OpenApi 7.6.0

Более конкретные шаги настройки и запуска сервисов представлены в репозитории, здесь не будем на них останавливаться, и перейдем сразу к настройке дашбордов, уведомлений и обзору метрик и трейсов непосредственно в панели SigNoz

Если все удачно запустилось, на вкладке Services мы можем видеть те самые RED метрики.
Рис.1 Вкладка Service
Для более наглядной картины на вкладке Traces, рекомендую активно поюзать swagger.
Рис.2 Вкладка Trace -> Traces
Если провалиться в трейс, можно увидеть флеймграф, в котором подробно описаны таймлайны каждой из операций, использованной в бизнес процессе.
Рис.3 Изучение trace
На вкладке Infra Monitoring можем наблюдать потребляемые ресурсы на хосте.
Рис.4 Вкладка Infra Monitoring
Service map вкладка визуализирует связи между используемыми сервисами.
Рис.5 Вкладка Service map
Тестово настроим алерт на превышение процента ошибок. Используем алерт основанный на логах. Сделаем счетчик для логов, которые содержат exception, а также общий, и по формуле (A/B)*100 вычисляем процент.
Рис.6 Добавление Alert, настройка счетчика логов
Далее необходимо настроить правило для отправки уведомления. В нашем случае, это будет отправка уведомления, если процент ошибок в журнале за минуту превысит пороговое значение на секунду в течении последних пяти минут. Также настраиваем уровень логов, имя, описание, и выбираем канал для отправки.
Рис.7 Настройка правила для отправки Alert
Также настроим дашборд. Переходим на вкладку Dashboards -> New Dashboard. Сконфигурируем имя, описание и тэги.
Рис.8 Конфигурация дашборда
Далее добавим Time Series график потребления ресурсов хостом.
Рис.9 График потребление ресурсов
SigNoz поддерживает импорт дашбордов. Для этого переходим на https://signoz.io/dashboards/, выбираем необходимый нам дашборд, копируем его JSON и вставляем в наш SigNoz.
Рис.10 Импортированный дашборд из SigNoz
На данном примере мы рассмотрели основные возможности SigNoz, такие как RED метрики, трейсы, метрики инфраструктуры, связанность сервисов, попробовали создать графики самостоятельно, а также через импорт. В целом, SigNoz действительно имеет понятный интерфейс и довольно обширный функционал. На сайте указано, что данный инструмент в community edition отлично может подойти для пэт проектов, а также стартапов.

Ссылка на гит репозиторий https://github.com/Th3Ch3shir3Cat/sport-service-example.

Наша команда уже более пяти лет занимается реализацией проектов на Java и усилением команд по направлениям

За время существования компании, мы принимали участие в работе над более чем 100 проектами различного объема и длительности.

Если перед вами стоят вызовы, при которых вам может пригодится наша экспертиза, просто напишите нам,

Мы договоримся с вами об онлайн-встрече, чтобы подробнее обсудить ваш проект и вашу проблему.
Герберт Хаустов
Java Developer

Еще почитать по теме:

    Обсудить проект _
    Если у вас есть ИТ-проблема , оставьте свои контакты, и мы поможем правительству спланировать ее решение . Обещаем не рассылать спам.
    hello@softwarecats.dev
    Новосибирск, ул. Демакова
    23/5, оф.308
    Контакты _

    Выполненные проекты: