Мы уже познакомились с концепцией Observability и тем, как она влияет на поддержку и работоспособность микросервисов. Мы узнали про распределённую трассировку с помощью Zipkin, настроили Sleuth для автоматического добавления идентификаторов трассировки и проверили, как запросы пересекают границы микросервисов. Кроме того, мы изучили ELK-стек для централизованного логирования и начали интеграцию Prometheus для сбора метрик. Теперь настало время "десерта" — визуализации всех собранных данных с помощью Grafana. Ведь никакая Observability не будет полной без красивых графиков!
Почему Grafana?
Мы уже немного разбирались с Grafana, но пришло время вспомнить об этой платформе и научиться работать с ней в рамках микросервисной архитектуры.
Представьте, что вы собрали все метрики и логи из своих микросервисов. Они аккуратно лежат в базе данных, в Prometheus или Elasticsearch. И вот вы садитесь анализировать... через командную строку.
Как бы вы ни любили консоль, анализ тысяч строк текста — это не самое увлекательное занятие. Grafana спасает нас, предоставляя мощные инструменты для визуализации данных. Это как Maps для данных: вместо скучных координат на бумаге — яркие карты с маршрутом.
Особенности Grafana:
- Подключение к множеству источников данных: Prometheus, Elasticsearch, MySQL и даже Google Sheets.
- Гибкость дашбордов: вы сами решаете, как и что отображать.
- Мощные метрики: диаграммы, гистограммы, таблицы.
- Настраиваемые алерты: получайте уведомления о проблемах прежде, чем они станут критичными.
- Поддержка плагинов и кастомных визуализаций.
Установка Grafana
Grafana предоставляется в виде пакетов, Docker-образов и даже облачных решений. Но мы пойдем "настоящее программирование разработчика" и сделаем установку через Docker, поскольку это быстро и просто.
Запускаем Grafana из Docker
Убедитесь, что Docker установлен на вашей машине. Затем выполните следующую команду:
docker run -d -p 3000:3000 --name=grafana grafana/grafana
-dзапускает контейнер в фоновом режиме.-p 3000:3000перенаправляет порт 3000 хост-машины на порт 3000 контейнера.- Контейнер готов! Grafana теперь доступна в браузере по адресу
http://localhost:3000.
Вход в Grafana
Откройте браузер и перейдите на http://localhost:3000. По умолчанию логин и пароль:
- Логин:
admin - Пароль:
admin
На первом входе Grafana попросит вас сменить пароль. Пожалуйста, смените его, чтобы не забыть, что здесь собрались настоящие профессионалы.
Интеграция Grafana с Prometheus
Мы настроили Prometheus ранее, чтобы получать метрики из Spring Boot через Actuator. Теперь наша задача — подключить Prometheus как источник данных в Grafana.
Шаг 1: Добавляем источник данных
- Зайдите в Grafana.
- Перейдите в меню (иконка "шестерёнки" слева) → Data Sources → Add data source.
- В списке источников найдите Prometheus.
- Укажите URL вашего Prometheus сервера (обычно это
http://localhost:9090). - Нажмите Save & Test. Если всё настроено правильно, вы увидите сообщение "Data source is working".
Шаг 2: Создание первого дашборда
Теперь настало время добавить немного магии визуализации:
- Перейдите в главное меню и выберите Dashboard → New Dashboard.
- Нажмите Add new panel.
- В открывшемся окне выберите метрику, которую вы хотите визуализировать. Например, начнем с
http_server_requests_seconds_count(количество запросов в вашем Spring Boot приложении). - Выберите тип графика (например, "Time series" для метрик, отображающих изменения во времени).
- Настройте параметры отображения и сохраните изменения.
Реализация красивых графиков
Расскажем больше деталей о том, как можно максимально эффективно использовать Grafana!
Типы визуализаций
Grafana предлагает множество типов графиков:
- Time series: графики изменений метрик во времени.
- Table: таблицы для представления данных в табличном формате.
- Gauge (шкалы): визуализация числовых показателей, например, "загрузка CPU в процентах".
- Heatmap: теплокарты для отображения плотности событий.
Пример: мониторинг HTTP-запросов
- Перейдите в ваш дашборд.
- Добавьте новый график.
- В поле Query выберите запрос к Prometheus:
Это покажет количество HTTP-запросов за последние 5 минут, сгруппированных по статусам (например, 200, 404).
sum(rate(http_server_requests_seconds_count[5m])) by (status) - Выберите тип визуализации "Bar chart".
- Сохраните панель. Voilà! Теперь у вас есть график распределения HTTP-запросов.
Алерты в Grafana
Не только визуализация, но и алерты — это ключевая часть мониторинга. Grafana может отправлять уведомления в Slack, Email, Telegram и другие системы уведомлений.
Пример: уведомление о пиковом числе запросов
Предположим, вы хотите настроить алерт, если количество запросов превышает 100 за последние 5 минут.
- Откройте панель, которую вы создали для мониторинга HTTP-запросов.
- Нажмите "Edit" панели → вкладка Alert → Create Alert.
- Настройте параметры условия. Например:
- Выражение:
sum(rate(http_server_requests_seconds_count[5m])) > 100 - Интервал проверки: каждые 1 минуту.
- Выражение:
- Укажите канал уведомления. Например, Slack:
- Перейдите в Contact Points в настройках Grafana.
- Добавьте новый контакт, выбрав Slack и предоставив Webhook URL.
Дашборды для микросервисов
Давайте подумаем, а что ещё нам нужно мониторить в микросервисах? Вот несколько идей, которые могут вдохновить вас:
- HTTP ошибки: percentage запросов с кодами 4xx и 5xx (
count(status_code >= 400)/count(all_requests)). - Загрузка CPU и памяти: используйте метрики JVM, которые предоставляет Spring Boot Actuator.
- Данные о латентности (задержках): среднее время выполнения запросов (
avg(http_server_requests_seconds_sum / http_server_requests_seconds_count)).
Интеграция с другими источниками данных
Grafana — это не только Prometheus. Вы можете подключить дополнительные источники, чтобы создать единый дашборд:
- Elasticsearch: для отображения логов.
- MySQL/Postgres: для прямого запроса и визуализации данных из БД.
- Google Analytics: если вам нужны данные о пользовательском трафике.
Используя все эти возможности, вы можете создать мощный инструмент наблюдаемости для своих микросервисов.
Вопросы, которые часто возникают
1. Можно ли настроить Grafana на production? Да, Grafana активно используется в production-средах. Вам нужно обеспечить безопасность доступа (например, задать сложный логин/пароль) и использовать SSL (можно настроить через обратный прокси, например, Nginx).
2. Grafana тормозит при большом числе запросов, что делать? Ограничьте частоту запросов. Используйте агрегации в Prometheus, чтобы уменьшить объем данных, передаваемых Grafana.
3. Когда стоит использовать алерты? Алерты нужно настраивать только по критичным метрикам. Слишком много уведомлений сделают алерты бесполезными.
Вот мы и познакомились с Grafana — инструментом, который превращает скучные цифры в красивые визуализации. Теперь ваш мониторинг не только полезен, но и радует глаз!
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ