Конфигурация Prometheus

DockerBeginner
Практиковаться сейчас

Введение

Prometheus — это мощный набор инструментов для мониторинга и оповещения с открытым исходным кодом. Его поведение управляется конфигурационным файлом, обычно называемым prometheus.yml. Этот файл определяет всё: от частоты сбора метрик, какие цели собирать, до того, как обрабатывать правила оповещения.

Эта лабораторная работа является продолжением лабораторной работы "Установка Prometheus", где вы научились устанавливать и запускать Prometheus с помощью Docker. Теперь, когда вы знаете, как запустить Prometheus, эта лабораторная работа научит вас основам конфигурации Prometheus. Вы начнете с проверки контейнера Prometheus, работающего с конфигурацией по умолчанию. Затем вы создадите свой собственный файл prometheus.yml, запустите новый контейнер с использованием этого файла и научитесь перезагружать конфигурацию без перезапуска службы.

Проверка работы контейнера Prometheus

На этом шаге мы проверим, что первоначальный контейнер Prometheus, запущенный скриптом настройки, работает. Этот контейнер использует конфигурацию по умолчанию, встроенную в образ.

Давайте выведем список всех запущенных контейнеров Docker, чтобы увидеть наш контейнер prometheus-default.

docker ps

Вы должны увидеть вывод, похожий на этот, показывающий, что контейнер с именем prometheus-default запущен и работает. Столбец PORTS указывает, что порт 9090 на хосте сопоставлен порту 9090 в контейнере.

CONTAINER ID   IMAGE                       COMMAND                  CREATED          STATUS          PORTS                                       NAMES
a1b2c3d4e5f6   prom/prometheus     "/bin/prometheus --c…"   15 seconds ago   Up 14 seconds   0.0.0.0:9090->9090/tcp, :::9090->9090/tcp   prometheus-default

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

Доступ к веб-интерфейсу Prometheus по адресу localhost:9090

На этом шаге вы получите доступ к веб-интерфейсу Prometheus, который теперь запущен и доступен через порт 9090. Среда LabEx предоставляет удобный способ доступа к веб-сервисам, работающим внутри виртуальной машины.

Нажмите кнопку + (Новая вкладка), расположенную в верхней части интерфейса лаборатории.

Выберите опцию Web Service и введите 9090 в качестве порта.

Это откроет новую вкладку браузера, подключенную к сервисам, работающим в вашей лабораторной среде.

Поскольку мы сопоставили порт 9090, будет доступен пользовательский интерфейс Prometheus. Вы увидите Prometheus Expression Browser, который является основной страницей. Этот интерфейс позволяет писать и выполнять запросы PromQL для исследования метрик.

Страница Prometheus Expression Browser

Наличие этой страницы подтверждает, что ваш контейнер Prometheus работает корректно и доступен.

Создание файла prometheus.yml с базовой конфигурацией сбора данных

На этом шаге вы создадите пользовательский файл конфигурации Prometheus с именем prometheus.yml. Этот файл будет указывать Prometheus, что именно следует отслеживать.

Теперь, когда вы получили доступ к веб-интерфейсу Prometheus и убедились, что он работает, давайте создадим пользовательский файл конфигурации, который вы сможете использовать для настройки Prometheus в соответствии с вашими потребностями.

Мы будем использовать текстовый редактор nano для создания файла в каталоге ~/project.

nano prometheus.yml

Теперь скопируйте и вставьте следующую YAML-конфигурацию в редактор nano. Эта конфигурация указывает Prometheus собирать метрики с самого себя каждые 5 секунд.

global:
  scrape_interval: 5s

scrape_configs:
  - job_name: "prometheus"
    static_configs:
      - targets: ["localhost:9090"]

Давайте разберем эту конфигурацию:

  • global: Этот раздел определяет параметры, которые действительны для всех других разделов конфигурации.
  • scrape_interval: Устанавливает интервал между сборами данных по умолчанию в 5 секунд.
  • scrape_configs: Этот раздел определяет набор целей (targets) и параметры для сбора данных.
  • job_name: Это имя, присвоенное задаче (job), которое будет прикреплено как метка (label) к любым временным рядам (time series), собранным с этой цели.
  • static_configs: Указывает список целей для мониторинга.
  • targets: Перечисляет конечные точки (endpoints) для сбора данных. В данном случае это сам сервер Prometheus.

После вставки содержимого сохраните файл и выйдите из nano, нажав Ctrl+X, затем Y и, наконец, Enter.

Запуск контейнера Prometheus с подключенной конфигурацией

Теперь, когда у нас есть наш пользовательский файл prometheus.yml, нам нужно запустить новый контейнер Prometheus, который будет его использовать. Сначала остановим и удалим старый контейнер.

docker stop prometheus-default
docker rm prometheus-default

Далее мы запустим новый контейнер с именем prometheus-custom. Мы будем использовать флаг -v для подключения нашего локального файла prometheus.yml внутрь контейнера по ожидаемому пути /etc/prometheus/prometheus.yml. Мы также добавим флаг --web.enable-lifecycle для включения API горячей перезагрузки, который мы будем использовать на следующем шаге.

docker run -d \
  --name prometheus-custom \
  -p 9090:9090 \
  -v ~/project/prometheus.yml:/etc/prometheus/prometheus.yml \
  prom/prometheus \
  --config.file=/etc/prometheus/prometheus.yml \
  --web.enable-lifecycle

Давайте рассмотрим новые флаги:

  • -v ~/project/prometheus.yml:/etc/prometheus/prometheus.yml: Это подключение тома (volume mount). Оно сопоставляет файл prometheus.yml из каталога ~/project вашей хост-машины с путем /etc/prometheus/prometheus.yml внутри контейнера. Prometheus будет читать этот файл при запуске.
  • --web.enable-lifecycle: Этот флаг командной строки включает HTTP API для перезагрузки конфигурации, доступ к которому можно получить через конечную точку (endpoint) /-/reload.

Вы можете проверить, что новый контейнер запущен:

docker ps

В списке вы должны увидеть контейнер prometheus-custom.

Перезагрузка конфигурации Prometheus через API

Одной из мощных функций Prometheus является возможность перезагружать свою конфигурацию без полного перезапуска, что предотвращает любые пробелы в сборе метрик. Это стало возможным благодаря тому, что мы включили API жизненного цикла (lifecycle API) с помощью флага --web.enable-lifecycle.

Сначала давайте изменим наш конфигурационный файл. Мы изменим scrape_interval с 5s на 15s.

Откройте файл с помощью nano:

nano prometheus.yml

Измените строку scrape_interval на 15s:

global:
  scrape_interval: 15s ## Изменено с 5s

scrape_configs:
  - job_name: "prometheus"
    static_configs:
      - targets: ["localhost:9090"]

Сохраните файл и выйдите из nano (Ctrl+X, Y, Enter).

Теперь, вместо перезапуска контейнера, мы отправим POST запрос на конечную точку (endpoint) /-/reload с помощью curl. Это даст запущенному экземпляру Prometheus команду перезагрузить свою конфигурацию из подключенного файла.

curl -X POST http://localhost:9090/-/reload

Если перезагрузка прошла успешно, вы не увидите никакого вывода. Этот тихий успех означает, что Prometheus применил новую конфигурацию.

Проверка собранных метрик на странице Targets

На этом заключительном этапе мы проверим, активна ли наша пользовательская конфигурация, просмотрев веб-интерфейс Prometheus.

Среда LabEx предоставляет вкладку "Web Terminal" или аналогичный механизм для доступа к веб-сервисам, работающим внутри виртуальной машины. Откройте UI Prometheus, перейдя по адресу http://localhost:9090 в браузере, предоставляемом интерфейсом лаборатории.

После загрузки UI нажмите на меню Status в верхней навигационной панели, а затем выберите Targets.

На странице Targets вы увидите цели сбора (scrape targets), определенные в вашем файле prometheus.yml. Вы должны увидеть одну цель в рамках задания (job) prometheus.

  • Endpoint: http://localhost:9090/metrics
  • State: Состояние должно быть UP с зеленым фоном.
  • Last Scrape / Scrape Duration: Эти столбцы показывают, когда произошел последний сбор (scrape) и сколько времени он занял. Вы можете заметить, что интервал между сборами теперь составляет примерно 15 секунд, что отражает изменение, которое мы перезагрузили на предыдущем шаге.

Prometheus Targets Page

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

Резюме

Поздравляем! Вы успешно завершили эту лабораторную работу по конфигурации Prometheus.

В этой лабораторной работе вы научились:

  • Создавать пользовательский конфигурационный файл prometheus.yml.
  • Использовать монтирование томов Docker (-v) для предоставления пользовательской конфигурации контейнеру Prometheus.
  • Включать API жизненного цикла Prometheus для возможности горячей перезагрузки.
  • Перезагружать конфигурацию Prometheus "на лету" с помощью простой команды curl.
  • Проверять активную конфигурацию, просматривая страницу Targets в веб-интерфейсе Prometheus.

Это фундаментальные навыки для управления и эксплуатации Prometheus в любой среде.