Перейти к содержанию

Сервис мониторинга Grafana#

Комплект поставки LUNA CARS включает сервис Grafana, который не является обязательным для установки и служит для визуализации, мониторинга и анализа данных подсистем LUNA CARS.

Сервис Grafana работает совместно со следующими дополнительными компонентами:

  • cAdvisor — анализирует и предоставляет данные об использовании ресурсов и производительности запущенных контейнеров (см. подробнее https://github.com/google/cadvisor);
  • prometheus — записывает метрики в базу данных (см. подробнее https://prometheus.io/);
  • nodeexporter — измеряет различные ресурсы машины, такие как память, диск и загрузка процессора (см. подробнее https://github.com/prometheus/node_exporter).

Настройка и запуск#

Перед началом установки убедитесь, что Docker и Docker Compose установлены. Дополнительную информацию об установке можно найти в разделе Установка и настройка LUNA CARS.

Для запуска сервиса Grafana выполните следующие шаги:

1․ Перейдите в рабочую директорию:

cd cars-installer_v.2.15.0

2․ Активируйте мониторинг и доступ к Grafana, в файле конфигурации .env-vanilla установите переменную MONITOR_ENABLE в значение true:

MONITOR_ENABLE=true

3․ Выполните перезагрузку сервера для применения изменений:

./docker_stop_all.sh
./docker_start_all.sh vanilla

Дополнительная информация по конфигурации сервиса Grafana описана в файле README.md.

После этого сервис Grafana будет доступен по cледующему адресу:

http://${IP}:${GRAFANA_PORT}

Примечание: Порт и IP-адрес могут быть настроены в конфигурационном файле .env-vanilla, где: - IP — IP-адрес сервера; - GRAFANA_PORT — Порт для доступа к Grafana, по умолчанию 3000.

Данные для авторизации#

По умолчанию для входа в веб-интерфейс Grafana (Рисунок 5) используются следующие данные:

  • Пользователь — admin (не изменяется);
  • Пароль — PASSWORD (задается в переменной GRAFANA_PASSWORD в файле конфигурации .env-vanilla).
Страница входа Grafana
Рисунок 5. Страница входа Grafana

Дашборды#

Преднастроенные дашборды будут доступны в секции Dashboards после старта мониторинга.

Чтобы открыть один из дашбордов, достаточно кликнуть на его название, и вы перейдете на новую страницу с выбранным дашбордом.

Общий вид раздела «Дашборды» (Рисунок 6):

Общий вид раздела «Дашборды»
Рисунок 6. Общий вид раздела «Дашборды»

Для получения подробной информации о администрировании Grafana обратитесь к документации на странице: https://grafana.com/docs/grafana/latest/

Дашборд «Statistics»#

Данный дашборд предназначен для отслеживания объёма занимаемой памяти для кропов, фулфреймов и БД, количества событий и инцидентов за выбранный период времени и за всё время (Рисунок 7).

Общий вид Дашборда «Statistics»
Рисунок 7. Общий вид Дашборда «Statistics»

Описание панелей дашборда

Блок Storage: этот блок предоставляет информацию о занимаемой памяти различными компонентами системы.

  • Database size: Отображает размер занимаемой памяти базы данных. Важный показатель для оценки загрузки и использования ресурсов хранилища данных
  • Full frame size: Отображает размер памяти, занятой фулфреймами
  • Crop size: Отображает размер памяти, занятой кропами

Блок Events: данный блок содержит информацию о количестве событий и инцидентов.

  • Checkpoint events count: Показывает количество расширенных событий, которые произошли за определенный период времени
  • Events count: Показывает количество событий, которые произошли за определенный период времени
  • Incidents count: Показывает количество расширенных инцидентов, которые произошли за определенный период времени

График The number of events of different types: предназначен для отображения событий и инцидентов по типам за определенный период времени. Может быть полезен для анализа тенденций и выявления аномалий.

График Celery: отображает количество задач в очереди за определённый промежуток времени.

Дашборд «Docker and system monitoring»#

Данный дашборд предназначен для мониторинга состояния хоста и контейнеров Docker, а также для отслеживания системных ресурсов, таких как память, процессор, диск и сеть. Вверху дашборда можно выбрать интервал времени для анализа и узел (Node), который мониторится с помощью node_exporter (Рисунок 8).

Общий вид Дашборда «Docker and system monitoring»
Рисунок 8. Общий вид Дашборда «Docker and system monitoring»

Описание панелей дашборда

Блок Host: этот блок предоставляет информацию о системных ресурсах хоста.

  • Uptime: Показывает время работы хоста с момента последнего перезапуска. Показатель для оценки стабильности системы
  • Disk space: Отображает использование дискового пространства хоста
  • Containers: Показывает количество работающих контейнеров на хосте
  • Memory: Отображает общую информацию о памяти хоста
  • Load: Отображает нагрузку на систему
  • Swap: Показывает использование пространства виртуальной памяти, которое активно используется, когда физическая память (RAM) системы заполняется.
  • Network traffic: Отображает общий объем переданных и полученных данных по сети
  • CPU Usage: Показывает использование процессора хостом
  • Load: Отображает нагрузку на систему
  • Disk I/O: Отображает информацию о чтении и записи данных на диск, включая скорость операций ввода-вывода

Блок Containers: этот блок предоставляет информацию о контейнерах.

  • График Sent Network Traffic per Container: Отображает объем отправленных данных по сети для каждого контейнера за выбранный интервал времени
  • График Received Network Traffic per Container: Отображает объем полученных данных по сети для каждого контейнера
  • График CPU Usage per Container: Отображает использование процессора для каждого контейнера
  • График Memory Usage per Container: Отображает использование памяти каждым контейнером
  • График Memory Swap per Container: Отображает использование пространства виртуальной памяти для каждого контейнера.
  • Usage memory: Отображает использование памяти для выбранного контейнера в конкретный момент времени
  • Remaining memory: Отображает оставшуюся память для выбранного контейнера
  • Limit memory: Показывает максимальный лимит памяти для выбранного контейнера

Дашборд «Prometheus Blackbox Exporter»#

Данный дашборд предназначен для мониторинга состояния Prometheus Blackbox Exporter, который позволяет проверять доступность сервисов и состояния сетевых ресурсов (Рисунок 9).

Общий вид Дашборда «Prometheus Blackbox Exporter»
Рисунок 9. Общий вид Дашборда «Prometheus Blackbox Exporter»

Описание панелей дашборда

График Global Probe Duration отображает общую продолжительность проверки, выполняемой Blackbox Exporter.

Блок All status: этот блок отображает сводку статусов различных проверок и их метрик.

  • Status: Общий статус проверки
  • HTTP Status Code: HTTP статус код ответа сервера, полученный во время проверки
  • HTTP Version: Версия протокола HTTP, использованная для выполнения запроса
  • SSL: Статус SSL-соединения (например, активно или неактивно)
  • HTTP Duration: Время, затраченное на выполнение HTTP-запроса
  • SSL Expiry: Дата истечения срока действия SSL-сертификата
  • Probe Duration: Время, затраченное на выполнение всей проверки
  • Average Probe Duration: Среднее время для всех проверок за выбранный период
  • Average DNS Lookup: Среднее время для выполнения DNS-запросов

Дашборд «Celery monitoring»#

Данный дашборд предназначен для отслеживания количества задач в очереди на исполнение и статуса обработчика (Рисунок 10).

Общий вид Дашборда «Celery monitoring»
Рисунок 10. Общий вид Дашборда «Celery monitoring»

Описание панелей дашборда

График Celery Worker Status: отображает статус обработчиков Celery.

  • 1 — обработчик выполняет задачи
  • 0 — обработчик не выполняет задачи

График Number of Tasks Currently Executing at Worker: показывает количество задач, которые в данный момент выполняются конкретным обработчиком.

График Average Task Runtime at Worker: отображает среднее время выполнения задачи для каждого обработчика и задачи.

График Task Prefetch Time at Worker: отображает время предварительного получения задачи на каждом обработчике, отслеживая, сколько времени занимает задача до того, как она начнёт выполняться.

График Number of Tasks Prefetched At Worker: показывает количество предварительно полученных задач каждым обработчиком.

График Task Success Ratio: отображает средний коэффициент успеха выполнения задач за выбранный промежуток времени.

График Task Failure Ratio: отображает средний коэффициент неудачи выполнения задач за выбранный период.

Дашборд «Health check»#

Данный дашборд предназначен для отображения статусов LUNA CARS_API, LUNA CARS_Stream, LUNA CARS_Analytics, Redis, Postgres, Celery (Рисунок 11).

Общий вид Дашборда «Health check»
Рисунок 11. Общий вид Дашборда «Health check»

Описание панелей дашборда

  • График Service status: полоски, отображающие текущий статус каждого сервиса за определенный период времени
  • Service status: информация о текущем статусе каждого компонента системы
  • Container uptime: отображает время работы контейнера

Добавление нового дашборда#

В Grafana вы можете не только добавлять новые дашборды, но и создавать папки для организации дашбордов, а также импортировать готовые дашборды.

1․ Чтобы создать новый дашборд, нажмите на кнопку «New Dashboard». Вы будете перенаправлены на страницу создания дашборда (Рисунок 12).

Кнопки для добавления новых дашбордов
Рисунок 12. Кнопки для добавления новых дашбордов

Страница создания нового дашборда (Рисунок 13) состоит из трех основных блоков:

  • Start your new dashboard by adding a visualization: этот блок предназначен для начала создания дашборда с добавления визуализации. Вы можете выбрать тип визуализации, например, графики, таблицы, метрики, списки, markdown и другие виджеты. Для этого необходимо выбрать «Add visualization» и настроить визуализацию в зависимости от типа данных, которые вы хотите отобразить.

  • Import panel: позволяет импортировать панели, которые могут быть использованы в других дашбордах. Вы можете импортировать панели, которые уже существуют или были подготовлены для других дашбордов, а затем добавить их в ваш текущий дашборд. Для этого выберите «Import panel» и выберите панели из списка доступных. Эти панели могут быть общими для нескольких дашбордов и позволяют быстро интегрировать готовые визуализации.

  • Import a dashboard: этот блок позволяет импортировать целые дашборды. Вы можете импортировать дашборды, которые были сохранены в JSON-формате. Для этого выберите «Import a dashboard», загрузите файл с настройками дашборда или импортируйте дашборды из репозитория Grafana.com. При необходимости, выберите источник данных и параметры для настройки дашборда.

Страница создания Дашборда
Рисунок 13. Страница создания Дашборда

Подробное описание настроек дашбордов описаны в документации Grafana: https://grafana.com/docs/grafana/latest/

Импортирование существующего дашборда#

Вы можете импортировать дашборд из выпадающего меню в общем разделе дашбордов, либо нажать клавишу на отдельной странице создания дашборда после нажатия кнопки «New Dashboard».

1․ Нажмите кнопку «Import» или «Import a dashboard» на странице создания нового дашборда. После этого откроется страница с разделом «Import» (Рисунок 14).

Раздел Import
Рисунок 14. Раздел Import

2․ Скопируйте содержимое вашего файла настроек и вставьте его в поле Import via panel json на странице «Import» (Рисунок 15).

Импортирование файла настроек new.json
Рисунок 15. Импортирование файла настроек new.json

3․ Нажмите кнопку «Load» в нижней части окна. При необходимости измените имя приборной панели в поле Name и нажмите кнопку «Import» (Рисунок 16).

Опции приборной панели
Рисунок 16. Опции приборной панели

4․ После импорта откроется страница с добавленным дашбордом (Рисунок 17).

Общий вид приборной панели
Рисунок 17. Общий вид приборной панели

Для получения подробной информации об администрировании Grafana обратитесь к документации на странице: https://grafana.com/docs/grafana/latest/

Настройка и редактирование приборной панели#

Вы можете редактировать как весь дашборд, так и отдельные элементы (панели) внутри него.

Редактирование всего дашборда#

Чтобы отредактировать весь дашборд, нажмите кнопку «Edit» в верхнем правом углу экрана. Это откроет режим редактирования дашборда, где вы можете изменять его настройки и компоненты.

Для редактирования существующих элементов нажмите на три точки в правом верхнем углу этого элемента (Рисунок 18).

Кнопки редактирования
Рисунок 18. Кнопки редактирования

Редактирование существующих элементов#

1․ Чтобы отредактировать существующие элементы (панели) на дашборде, выберите пункт «Edit» в выпадающем меню у нужного элемента. Для этого кликните на три точки в правом верхнем углу панели (Рисунок 19).

Редактирование элементов на приборной панели
Рисунок 19. Редактирование элементов на приборной панели

2․ Перейдите во вкладку «Query» и измените существующий запрос или добавьте новый. Запросы пишутся в формате PromQL (Рисунок 20).

Вкладка Query при редактировании элемента
Рисунок 20. Вкладка Query при редактировании элемента

3․ После внесения изменений, не забудьте сохранить изменения.

Добавление новых элементов (панелей)#

1․ Чтобы добавить новый элемент на дашборд, нажмите кнопку «Edit» в правом верхнем углу дашборда, чтобы перейти в режим редактирования. Затем нажмите кнопку «Add» и выберите «Visualization» (Рисунок 21).

Кнопка «Visualization»
Рисунок 21. Кнопка «Visualization»

2․ В появившемся окне настройте визуализацию и выберите тип панели.

3․ Введите запрос во вкладке «Query» в формате PromQL. Запросы в PromQL позволяют извлекать и визуализировать данные из Prometheus (Рисунок 22).

Вкладка Query при добавлении нового элемента
Рисунок 22. Вкладка Query при добавлении нового элемента

Query формируется с помощью языка запросов Prometheus который называется PromQL. Для получения подробной информации обратитесь к документации на странице: https://prometheus.io/docs/prometheus/latest/querying/basics/

4․ После настройки панели и ввода запроса, нажмите «Back to dashboard». Новая панель автоматически появится на вашем дашборде. Затем нажмите «Save the dashboard» для сохранения изменений.

Для получения подробной информации об администрировании Grafana обратитесь к документации на странице: https://grafana.com/docs/grafana/latest/

Дополнительные настройки#

Все дополнительные настройки для мониторинга (такие как параметры для Prometheus, Telegram уведомления и т.д.) настраиваются в том же файле конфигурации .env-vanilla.

Роль сборщика данных PROMETHEUS#

Для хранения исторических данных используется Prometheus. Глубина хранения данных настраивается через переменные:

  • PROMETHEUS_RETENTION_TIME — время хранения
  • PROMETHEUS_RETENTION_SIZE — максимальный размер хранилища

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

PROMETHEUS_RETENTION_TIME=30d
PROMETHEUS_RETENTION_SIZE=10GB

Отправка данных в Telegram#

Для отправки уведомлений в Telegram настраиваются три переменные:

  • GRAFANA_TG_BOT_TOKEN — токен Telegram-бота
  • GRAFANA_TG_CHAT_ID — ID чата для отправки сообщений
  • GRAFANA_SERVER_NAME — Имя сервера, где запущена Grafana
GRAFANA_TG_BOT_TOKEN=null
GRAFANA_TG_CHAT_ID=null

GRAFANA_SERVER_NAME=REPLACE_SERVER_NAME

Значения переменных GRAFANA_TG_BOT_TOKEN и GRAFANA_TG_CHAT_ID не могут быть пустыми, иначе при старте системы произойдет ошибка.

Получение токена Telegram-бота#

1․ В поиске Telegram найдите бота @BotFather и нажмите кнопку START. 2․ Для создания нового бота отправьте команду /newbot. 3․ Укажите название бота (это имя, которое будет отображаться в списке чатов). 4․ Укажите username бота. Оно должно заканчиваться на bot, например: lunacars_health_bot. 5․ Чтобы получить токен созданного бота, отправьте команду /token. Токен будет выведен в ответе (Рисунок 23).

Пример ответных сообщений от бота
Рисунок 23. Пример ответных сообщений от бота

Получение ID чата#

Для получения ID чата, в который бот будет отправлять сообщения, следуйте алгоритму:

1․ Перейдите по следующему URL в браузере:

https://api.telegram.org/bot`Токен вашего бота`/getUpdates

Замените «Токен вашего бота» на токен, который вы получили на предыдущем шаге.

2․ Если результат пустой, отправьте любое сообщение вашему боту и обновите страницу. Это нужно для того, чтобы Telegram зафиксировал ваш чат.

3․ В ответе будет JSON-объект, содержащий информацию о вашем чате. chat.id — это и есть ID чата, который нужно указать в переменной GRAFANA_TG_CHAT_ID (Рисунок 24).

Пример получения chat.id
Рисунок 24. Пример получения chat.id

Grafana будет автоматически генерировать уведомления по настроенным алертам (Рисунок 25). Сообщения будут отправляться в указанный чат Telegram через бота, настроенного с использованием полученного токена и ID чата.

Пользователь не взаимодействует с ботом вручную — уведомления приходят автоматически при срабатывании алертов в Grafana.

Пример сообщения от Grafana в боте
Рисунок 25. Пример сообщения от Grafana в боте

Grafana отправляет в Telegram:

Статус сервисов (состояние):

  • Если сервис не работает, отправляется сообщение с названием сервиса и ошибкой.
  • Когда сервис снова работает, отправляется сообщение с названием сервиса, ошибкой и пометкой «FIXED».

Дата и время указываются в скобках, это момент срабатывания алерта (когда сервис упал или поднялся).