Дата публикации: 01.08.2025
Эффективные средства мониторинга помогают выявлять скрытые проблемы, такие как узкие места в производительности или причины ошибок в работе программного обеспечения, что позволяет минимизировать время простоя.
Для типового ПО СМЭВ4 реализована возможность настройки мониторинга:
- Агента СМЭВ4 (настройка мониторинга описана в статье – Возможности мониторинга агента СМЭВ4);
- Витрины данных конфигурации «Стандарт» (настройка мониторинга описана в статье – Возможности мониторинга витрины).
Примечание
В Витрине данных конфигурации Лайт средства мониторинга уже предустановлены
В данной статье описаны два инструмента мониторинга:
1. Grafana.
2. Prometheus.
Данные инструменты предоставляют комплексное решение для визуализации и анализа данных мониторинга.
Примечание
Описание установки предложенных компонентов для мониторинга будет осуществляться с использованием контейнеризации. Такой подход упростит и ускорит процесс развертывания основных компонентов, независимо от особенностей операционной системы, используемой в конкретных случаях
Система мониторинга Grafana предлагает обширные возможности для визуализации и анализа данных. Интуитивно понятный интерфейс и гибкими дашбордами, Grafana позволяет легко отслеживать ключевые метрики и интегрироваться с различными источниками данных, что делает ее идеальным решением для создания комплексных систем мониторинга.
Для успешного освоения Grafana особое внимание следует уделить следующим ключевым понятиям:
- Дашборды (Dashboards) – это основная единица визуализации в Grafana, которая позволяет собирать и отображать данные из различных источников данных в режиме реального времени;
- Панели (Panels) – это неотъемлемая часть любых дашбордов для визуализации данных, отображающие конкретные метрики в различных форматах (графики, гистограммы, таблицы и др.);
- Источники данных (Data source) – это набор систем сбора данных, которые поддерживаются Grafana, такие как Prometheus, InfluxDB, MySQL, PostgreSQL и другие;
- Система оповещений (Alerts) позволяет настраивать уведомления пользователя для отслеживания определенных условий и событий;
- Шаблоны (Templating) дают возможность создания собственных переменных для повышения интерактивности дашбардов;
- Плагины (Plugins) расширяют функциональность Grafana, это могут быть новые источники данных (Prometheus, ClickHouse, PostgreSQL и др.), расширение возможностей дашборда (Clock, Geomap, Canvas и др.), плагины сбора данных о состояния различных систем (Node exporter, Elastiksearch exporter и др.).
Prometheus — это инструмент мониторинга и системы оповещения, который широко используется в современных облачных и микросервисных архитектурах. Он собирает и хранит метрики в формате временных рядов, что позволяет эффективно отслеживать производительность сервисов, анализировать данные из различных источников, настроить уведомления об ошибках и многое другое. Ключевое преимущество Prometheus заключается в его способности самостоятельно с определенной периодичностью запрашивать метрики у целевых систем, обеспечивая актуальность и точность собранной информации.
Метрики в Prometheus представляют количественные показатели. Каждая метрика имеет уникальное имя и может содержать набор дополнительных меток (labels), которые помогают идентифицировать и классифицировать данные. Метрики могут отражать различные аспекты работы системы, такие как производительность, доступность и утилизация ресурсов.
Prometheus поддерживает несколько типов метрик:
- Counter – метрика, которая только увеличивается и никогда не уменьшается;
- Gauge – метрика, которая может как увеличиваться, так и уменьшаться;
- Histogram – метрика, делит значения на интервалы и подсчитывает количество наблюдений в каждом интервале;
- Summary – метрика, которая похожа на гистограмму, но предоставляет более детализированную информацию о квантилях и общей сумме значений.
Grafana позволяет легко интегрировать Prometheus, используя его в качестве источника данных. Это позволяет создавать информативные дашборды с помощью языка запросов PromQL.
Другие альтернативные инструменты мониторинга:
Хотя Grafana и Prometheus предоставляют решение для мониторинга, существуют и другие инструменты, которые могут быть полезны в зависимости от конкретных потребностей:
- Datadog – облачная платформа мониторинга, которая объединяет метрики, трассировку и логи. Datadog предлагает широкий спектр интеграций и инструментов визуализации;
- Zabbix – открытое программное обеспечение для мониторинга сетей и приложений. Zabbix предоставляет собственные инструменты визуализации и широкие возможности для настройки оповещений;
- Nagios – классическая система мониторинга с открытым исходным кодом, хотя ее интерфейс может показаться устаревшим по сравнению с современными альтернативами;
- Splunk – Платформа для анализа машинных данных, которая особенно эффективна для работы с большими объемами неструктурированных данных.
Каждый из этих инструментов имеет свои сильные стороны, но Grafana выделяется своей гибкостью и способностью интегрироваться с широким спектром источников данных, включая многие из вышеперечисленных систем, с полным списком которых можно подробнее ознакомиться в полном официальном списке.
Установка Grafana и Prometheus
В данном разделе рассмотрим, как установить и настроить инструменты мониторинга.
Установка компонентов мониторинга возможна следующими вариантами:
- Через оркестратор Datamart Studio:
Данный способ разворачивания компонентов упрощен тем, что Datamart Studio автоматически создаёт и запускает Docker-контейнер приложения. Процесс установки приложений (инсталляций) мониторинга описан в статье – Установка витрины в конфигурации стандарт. Дополнительные компоненты.
- Установкой вручную (создание Docker-контейнеров):
В качестве основного ПО по разворачиванию Docker-приложений будет выступать плагин Docker Compose.
Примечание
Перед установкой инструментов мониторинга необходимо установить плагин Docker-compose
Использование Docker Compose упрощает развертывание многоконтейнерных приложений. Он позволяет определить все необходимые сервисы, их зависимости и конфигурацию в едином YAML-файле, что делает процесс развертывания более управляемым и воспроизводимым. Кроме того, Docker Compose автоматизирует создание сетей, томов и других ресурсов, необходимых для работы приложения, что значительно ускоряет и упрощает процесс развертывания.
Всю установку инструментов можно разбить на следующие шаги:
1. Подготовка конфигурационных файлов.
2. Запуск Docker-образов.
3. Отслеживание ошибок.
4. Добавление источника данных и тест соединения.
Подготовка конфигурационных файлов
1) На первом этапе необходимо сконфигурировать и развернуть Prometheus. Для этого создадим директорию, в которой будут хранится все необходимые конфигурационные файлы. В качестве примера места хранения файлов будет использоваться домашняя директория пользователя, при этом свободно допускается использовать любое другое место по собственному предпочтению.
Следующие команды выполняется под пользователем user:
|
mkdir /home/user/monitoring mkdir /home/user/monitoring/prometheus |
Эти команды создают две директории moitoring и вложенную в нее директорию prometheus.
2) В директории prometheus будет храниться основной файл конфигурации, который будет описывать все целевые системы или источники, поставляющие метрики для мониторинга.
Создайте файл prometheus.yml следующей командой:
|
touch /home/user/monitoring/prometheus/prometheus.yml |
3) Для настройки Prometheus необходимо открыть конфигурационный файл prometheus.yml с помощью любого текстового редактора:
|
nano /home/user/monitoring/prometheus/prometheus.yml |
4) Необходимо заполнить основные блоки конфигурации: global и scrape_configs. Скопируйте содержимое конфигурационного файла prometheus.yml и вставьте содержимое в открывшемся редакторе:
|
global: scrape_interval: 15s scrape_configs: - job_name: '{JOB_NAME}' static_configs: - targets: - '{IP_ADDRESS}:{METRICS_PORT}' |
В секции global находится параметр scrape_interval, который определяет периодичность сбора метрик с целевых систем. В данном случае он установлен на 15 секунд.
В секции scrape_configs задается список задач, которые будут поставлять метрики в Prometheus. Для каждой задачи указывается уникальное имя {JOB_NAME} в пункте job_name и список статических целевых систем, с которых будут собираться метрики. По умолчанию путь для сбора метрик – /metrics, поэтому его не требуется указывать явно.
При заполнении необходимо заменить {IP_ADDRESS} на внешний адрес виртуальной машины и {METRICS_PORT} на порт, по которому выгружаются метрики системы. Если необходимый сервис также развернут в Docker-контейнере и находится в общей внутренней сети с Prometheus, то можно указать имя этого контейнера вместо IP-адреса. Это позволит Prometheus автоматически обнаруживать и собирать метрики из сервиса, развернутого в контейнере, без необходимости указывать его IP-адрес.
5) По умолчанию в Prometheus отсутствует механизм аутентификации пользователей, что обеспечивает свободный доступ к системе. Для реализации дополнительной авторизации в среде Prometheus. Создайте конфигурационный файл web.yml следующей командой:
|
touch /home/user/monitoring/prometheus/web.yml |
6) Откройте созданный файл в режиме редактирования следующей командой:
|
nano /home/user/monitoring/prometheus/web.yml |
7) В качестве примера конфигурации для пользователя с именем admin и паролем admin:
|
basic_auth_users: admin: $2y$06$vKugURQgcAmO/nunEGu.X.ITAZVZ/kAs0xQe7KlkkoyI/RLejFo22 |
В конфигурационном файле web.yml, помимо прочих настроек, определяются правила для базовой аутентификации в секции basic_auth_users. В этой секции ключом является имя пользователя, а значением – хеш-строка пароля в формате bcrypt. Для получения пароля в формате bcrypt можно использовать онлайн-сервис, например, bcrypt.online.
Примечание
Файл web.yml можно оставить пустым, если дополнительная авторизация не требуется
Далее рассмотрим пример файла docker-compose.yml, который будет использоваться для развертывания Grafana и Prometheus. Этот файл будет содержать определения всех необходимых сервисов, их конфигурацию и зависимости, что позволит нам легко и быстро развернуть весь стек мониторинга в контейнерах Docker.
1) Для начала в корневой директории конфигураций monitoring создадим этот файл и заполним его следующей командой на редактирование:
|
nano /home/user/monitoring/docker-compose.yml |
2) Скопируйте содержимое ниже в созданный файл. Данное содержимое описывает конфигурацию двух контейнеров для мониторинга с дополнительной настройкой каждого из них:
|
version: '3' services: prometheus: image: prom/prometheus container_name: prometheus ports: - 9090:9090 volumes: - ./prometheus/:/etc/prometheus/ - prometheus_data:/prometheus command: - --config.file=/etc/prometheus/prometheus.yml - --web.config.file=/etc/prometheus/web.yml - --storage.tsdb.retention.time=30d - --storage.tsdb.retention.size=10GB networks: - monitoring restart: unless-stopped grafana: image: grafana/grafana:11.2.0 container_name: grafana ports: - 3030:3000 volumes: - grafana_data:/var/lib/grafana environment: - GF_SECURITY_ADMIN_USER=admin - GF_SECURITY_ADMIN_PASSWORD=passwd - GF_USERS_ALLOW_SIGN_UP=false networks: - monitoring restart: unless-stopped networks: monitoring: volumes: prometheus_data: grafana_data: |
3) После внесения изменений – сохраните файл.
Рассмотрим подробно каждый блок конфигурации docker-compose.yml:
Начнем с разбора конфигурации контейнера Prometheus в блоке описания сервисов services. Контейнер Prometheus основан на образе "prom/prometheus" и имеет имя "prometheus". Он прослушивает порт 9090 на хосте, который отображается на тот же порт внутри контейнера, обеспечивая доступ к веб-интерфейсу Prometheus. При необходимости, например, пересечении локальных портов 9090, можно изменить первое значение в строке ports на другой порт, например, 9091:9090.
Для хранения данных метрик используется volume "prometheus_data", который позволяет сохранять данные даже при перезапуске контейнера. Конфигурационные файлы Prometheus монтируются из локальной_директории/prometheus/. Это позволяет легко управлять и настраивать конфигурацию Prometheus без необходимости модификации самого контейнера.
Важно отметить, что в конфигурации Prometheus задаются параметры "--storage.tsdb.retention.time" и "--storage.tsdb.retention.size", которые определяют время хранения данных (30 дней) и максимальный размер хранилища данных временных рядов (10 ГБ) соответственно. Если для этих параметров указать нулевые значения, время и место хранения данных будут не ограничены.
Вторым блоком в разделе описания сервисов указывается сервис Grafana. В данном случае это официальный образ Grafana версии 11.2.0. Это гарантирует, что будет использоваться стабильная и поддерживаемая версия приложения.
Для легкого нахождения и управления этого контейнера задается имя "grafana". Далее настраивается порт 3030 на хост-машине будет отображаться на порт 3000 внутри контейнера, который даст возможность получать доступ к веб-интерфейсу Grafana.
Для обеспечения сохранности данных Grafana используется постоянный том с именем "grafana_data". Это позволяет сохранять все настройки, дашборды и другие данные Grafana даже при перезапуске или удалении контейнера.
В разделе "environment" задаются переменные окружения для контейнера Grafana. Здесь устанавливаются имя (GF_SECURITY_ADMIN_USER) и пароль (GF_SECURITY_ADMIN_PASSWORD) администратора, а также отключается возможность регистрации новых пользователей (GF_USERS_ALLOW_SIGN_UP). Это обеспечивает дополнительную безопасность и контроль доступа.
Контейнеры Prometheus и Grafana подключаются к сети с именем "monitoring", что позволит взаимодействовать им в общей внутренней сети. Параметр "restart" определяет, что контейнеры будут автоматически перезапускаться, если он остановится, за исключением случаев, когда контейнер был остановлен вручную.
4) Теперь, когда мы настроили все необходимые компоненты и разобрали каждый раздел в docker-compose.yml файле, осталось только запустить эти контейнеры. Для этого выполним следующую команду, которую также можно использовать после изменения конфигураций yml.
|
cd /home/user/monitoring/docker-compose.yml docker compose up -d --force-recreate |
Команда запустит все контейнеры, определенные в docker-compose.yml, в фоновом режиме (-d). Параметр --force-recreate гарантирует, что все контейнеры будут пересозданы, даже если их конфигурация не изменилась.
После выполнения этой команды все необходимые сервисы, включая Grafana, будут развернуты и готовы к использованию. Для проверки работоспособности контейнеров можно проверить их статус и обратиться к адресам сервисов Grafana и Prometheus. Соответствующие адреса можно открыть в веб-браузере.
|
docker ps | grep grafana docker ps | grep prometheus
curl –X GET http://localhost:3030 -I curl –X GET http://localhost:9090 -I |
В процессе разработки и эксплуатации приложений, работающих в Docker-контейнерах, могут возникать различные ошибки, которые могут потребовать остановку, удаление и повторный запуск контейнера.
Для остановки работающего Docker-контейнера с использованием плагина Docker Compose применяется следующая команда: {container_id} - это уникальный идентификатор или имя контейнера:
|
docker compose down {container_id} |
где:
- {container_id} - это уникальный идентификатор или имя контейнера.
Для анализа возникших проблем или отладки работы контейнера, может потребоваться получение полного лога его работы. Это можно сделать с помощью следующей команды:
|
docker logs {container_id} > logs.txt |
Данная команда выводит все логи контейнера в файл logs.txt, который можно затем изучить. Таким образом, основные операции с Docker-compose включают в себя остановку, удаление и получение логов всех или отдельных контейнеров.
Добавление источника данных и тест соединения
Добавление Prometheus как источника данных в Grafana и создание первого дашборда – это важные шаги для начала визуализации метрик. Для этого необходимо запустить веб-бразуер и пройти по адресу, на котором развернута Grafana. В конкретном случае это будет адрес http://localhost:3030. Используя учетные данные по умолчанию admin/admin, ввести в форму авторизации логин и пароль.
1. Для добавления нового источника данных в левом боковом меню страницы Grafana перейти в раздел Configuration (Настройки конфигурации), затем выбрать пункт Data sources (Источника данных). Найти кнопу Add data source (Добавить источник данных):
Рисунок 1 – Grafana. Окно с настройками конфигурации
2. В списке доступных источников данных найти и выбрать Prometheus. Нажмите на него:
Рисунок 2 – Grafana. Окно добавления нового источника данных
3. После нажатия на Prometheus источник данных появится в настройках конфигурации. Перейдите в него нажав на него:
Рисунок 3 – Grafana. Окно с настройками конфигурации
4. Из важных к заполнению пунктов будет параметр настройки подключения, в котором необходимо указать адрес Prometheus. Если Prometheus работает на локальной машине рядом с Grafana, то можно ввести локальны адрес http://localhost:9090. В иных случая необходимо ввести IP-адрес или доменное имя:
Рисунок 4 – Grafana. Настройки Prometheus
В случае указания дополнительной авторизации при установке Prometheus в разделе Auth (Авторизация) необходимо выбрать вариант Basic auth и ввести логин и пароль, указанные при конфигурировании Prometheus в файле web.yml.
5. После чего необходимо в самом низу формы проверить настройки Prometheus по кнопке «Save & Test» (Сохранить и тестировать):
Рисунок 5 – Grafana. Применение настроек Prometheus
В случае успешной проверки появится уведомление:
Рисунок 6 – Успешный тест коннекта с Prometheus
Заключение
Grafana в сочетании с Prometheus предоставляет гибкое решение для мониторинга и визуализации данных. Эти инструменты позволяют создавать информативные дашборды, эффективно отслеживать производительность систем и быстро реагировать на возникающие проблемы.