Блог CosySoft
Разработка

Какой Observability stack мы используем для высоконагруженных систем

За более 10 лет работы мы в CosySoft разработали множество сложных и высоконагруженных решений, например, электронный дневник или модули для управления огромным производством. Наши проекты разные, иногда даже уникальные, но у всех них есть одна общая черта. На всех без исключения проектах мы стараемся уделять много времени настройкам мониторинга, чтобы быть уверенными в разработке и эксплуатации продукта.

Кто наблюдает за наблюдателями

DevOps-инженеры играют ключевую роль в настройке мониторинга продукта. Как правило, они имеют большой опыт работы с различными инструментами и технологиями, что позволяет им выбрать наиболее подходящие инструменты для конкретных требований продукта и создать комплексную и надежную систему мониторинга.

Пример использования стека

Такой observability stack мы реализовали для продукта крупной инвестиционной компании.
С помощью настроенной системы мы отслеживали транзакции, кредитование и множество других финансовых операций из наших приложений. Также мониторинг позволял увидеть сколько уникальных пользователей находится в системе, когда происходят пиковые нагрузки при торгах.
На основе собираемых логов аналитики инвестиционной компании прогнозировали рынок и следили за состояниями транзакций.
Метрики отправлялись клиенту в удобном виде (графики и простые фреймы логов) для дальнейшего масштабирования и отладки работы сервисов.

Сбор и передача логов

Журналы (логи) содержат записи о событиях, ошибках, предупреждениях и других важных сообщениях, которые происходят внутри продукта. Promtail собирает логи и отдает их в Loki.

Loki

Горизонтально масштабируемая, многопользовательская система агрегации журналов, созданная на основе Prometheus. Экономичная и простая в эксплуатации.
Преимущества
  • Возможность горизонтального масштабирования для обработки высокой нагрузки журналов.
  • Оптимизированный подход к хранению журналов, который позволяет сжимать и фрагментировать данные.
  • Плотная интеграция с экосистемой Prometheus обеспечивает единый интерфейс для наблюдаемости и отладки системы.

Promtail

Promtail отправляет содержимое локальных журналов в Loki или в облако Grafana Cloud. Обычно он развертывается на каждой машине, на которой установлены приложения, подлежащие мониторингу.
  • Создан для эффективной обработки и отправки журналов, что снижает нагрузку на систему и позволяет работать в масштабируемых средах.
  • Promtail легко интегрируется с другими компонентами системы Loki. Простой процесс настройки позволяет быстро настроить передачу журналов.
  • Гибкая конфигурация, позволяющая настроить источники сбора журналов, фильтры, цели отправки и другие параметры.

Сбор метрик

Это данные о загрузке сервера, использовании памяти и процессора, пропускной способности сети, времени ответа и задержках запросов. Метрики производительности помогают определить эффективность и скорость работы продукта.

Prometheus

Гибкий и мощный механизм сбора метрик, который позволяет собирать данные из различных источников.
  • Хорошо подходит для сбора и анализа данных, представленных в виде временных рядов (time series). Все метрики хранит в собственной БД.
  • Поддерживает протоколы HTTP, SNMP, DNS, и позволяет пользовательские интеграции.
  • С помощью PromQL (Prometheus Query Language) можно выполнять сложные запросы, фильтрацию, агрегацию и математические операции над метриками.

Визуализация

Центральный элемент стека — Grafana. Это платформа для визуализации и анализа данных, с помощью которой можно создавать гибкие дашборды и графики.
Победить современный стек Grafana не так уж и просто — нужно потратить много времени на изучение PQL-запросов, разобраться с написанием скрапов Prometheus, научиться писать маршруты для Promtail и Loki. Но результат будет великолепен.

Grafana

  • Дает широкий спектр возможностей для создания настраиваемых и интерактивных визуализаций. Предлагает множество визуальных компонентов, графиков и панелей, а также возможность создания собственных шаблонов и дашбордов.
  • Интегрируется с множеством различных источников данных, включая Prometheus, InfluxDB, Elasticsearch, MySQL и другие. Это позволяет получать данные из разных источников и объединять их в одном месте для создания всесторонних визуализаций.
  • Интуитивно понятный и простой в использовании интерфейс, который делает процесс создания и настройки визуализаций легким и удобным.

Long-term хранилище с быстрым доступом

Если Prometheus используется для сбора и хранения метрик, то Grafana Mimir обеспечивает оптимизацию и долгое хранение этих данных.
Наличие Мимира как long-term хранилища позволяет получать больше полезных данных. На полученные логи и метрики применяются ETL- и ML-системы, которые анализируют эти данные, обучаются на них и делают прогнозы.

Grafana Mimir

Mimir позволяет оптимизировать доступ и анализ метрик в больших масштабах и ускоряет выполнение сложных запросов.
  • Мощный индексирующий и поисковый движок, который обеспечивает эффективный поиск данных. Позволяет выполнять сложные запросы и фильтрацию данных в реальном времени.
  • Разработан с учетом гибкости и расширяемости, что позволяет адаптировать его под различные потребности и сценарии использования.
  • С помощью API и плагинов можно создавать собственные расширения, интегрировать сторонние инструменты и настраивать систему под свои потребности.

Менеджер оповещений

События и алерты уведомляют о нарушениях, превышениях заданных порогов или других критических событиях.

Alertmanager

Компонент позволяет настраивать и управлять правилами алертинга, обрабатывать и фильтровать оповещения и отправлять их на различные каналы связи.
  • Позволяет определить правила и условия, при которых должны генерироваться оповещения. Это может быть основано на определенных пороговых значениях метрик или других условиях, которые могут указывать на проблемы.
  • Может группировать оповещения, связанные с одной проблемой или событием, чтобы предотвратить спам и дублирование сообщений.
  • Позволяет настроить отправку оповещений на различные каналы связи, такие как почта, Telegram, Slack, Rocket.Chat. и другие системы управления инцидентами.

Итоги

Стек Grafana & Prometheus универсален и очень удобен. Мы используем эти инструменты на многих проектах для отслеживания нагрузок на приложения и системы в момент разработки и вывода в продакшн. Стек одинаково хорошо подойдет и для высоконагруженных систем, и для маленьких приложений.
Фактический набор инструментов зависит от конкретного продукта, его требований и целей мониторинга.