Перейти к основному содержимому

Практикум Prometheus и Grafana — как пользоваться

Инженеру Разработчику

Стек уже поднят по шагу 2? Эта статья — первый день с UI: куда кликать, как добавить сервис, как дойти до дашборда.


Два инструмента — две роли

ИнструментURL (на вашем хосте)Зачем
Prometheushttp://localhost:<PORT_PROM>Собирает и хранит метрики, PromQL, targets, алерты
Grafanahttp://localhost:<PORT_GRAFANA>Графики, дашборды, Explore, алерты Grafana

Логика простая: Prometheus pull-ит метрики с /metrics (или exporters), Grafana рисует их и объединяет с логами и трейсами на следующих шагах практикума.

Пример портов

Если 9090 и 3000 на машине заняты, в Compose часто ставят другие внешние порты — например 9189→9090 и 8347→3000. Внутри Docker Prometheus всё равно на 9090, Grafana на 3000. Конкретные <PORT_*> вы задавали при установке.


С чего начать

1. Prometheus — проверить, что всё живо

Откройте http://localhost:<PORT_PROM>.

Status → Targets

Сейчас минимум один target — prometheus (сам себя). После windows_exporter появится job windows. Все должны быть UP.

Graph (вверху)

Введите запрос и нажмите Execute:

up

Если видите up{job="prometheus"} 1 — Prometheus работает. С windows_exporter также up{job="windows"} 1.

Status → Configuration

Здесь видно, откуда Prometheus читает конфиг (prometheus.yml на хосте смонтирован в контейнер).


2. Grafana — войти и проверить datasource

Откройте http://localhost:<PORT_GRAFANA>.

  • Логин: admin / admin (смена пароля при первом входе — по желанию).

Connections → Data sources

Должен быть Prometheus (Default). Save & test → «Successfully queried the Prometheus API».

Explore (иконка компаса слева)

  • Datasource — Prometheus
  • Запрос — up
  • Run query — график или таблица с up{job="prometheus"} 1

Подробнее про первую панель и дашборд — шаг 4.


Русский интерфейс Grafana

Если при установке заданы grafana/grafana:12.0.0 и GF_USERS_DEFAULT_LANGUAGE: ru-RU, меню Grafana («Дашборды», «Обзор», «Подключения») отображается на русском.

Что переводитсяЧто остаётся на английском
Меню и настройки GrafanaPrometheus UI
Стандартные экраны алертовИмена метрик (windows_cpu_time_total, …)
Заголовки панелей в импортированных JSON-дашбордах

Если всё ещё английский:

  1. Ctrl+F5 в браузере.
  2. Профиль (иконка пользователя) → ЯзыкРусский → сохранить.
  3. Проверить образ: curl.exe -s http://localhost:<PORT_GRAFANA>/api/health — в JSON поле version должно быть 12.x или новее.
  4. Не использовать GF_DEFAULT_LOCALE — Grafana её не читает; нужна GF_USERS_DEFAULT_LANGUAGE.

Вернуть английский: GF_USERS_DEFAULT_LANGUAGE: en-US и docker compose up -d grafana.


Метрики Windows-хоста (windows_exporter)

Prometheus и Grafana в Docker сами не собирают CPU, RAM, диски и сеть вашего Windows-ПК. Нужен агент на хосте — windows_exporter.

Быстрый путь

  1. В шаге 2 уже должны быть extra_hosts у Prometheus и job windows в prometheus.yml.
  2. Установите exporter (подробно в шаге 5):
cd <каталог-проекта>
.\scripts\install-windows-exporter.ps1 -Mode Portable

Portable — без прав администратора, процесс не переживает перезагрузку ПК. Service — Windows-сервис (PowerShell от администратора), автозапуск после reboot.

  1. Проверка:
curl.exe -s -o NUL -w "exporter: %{http_code}\n" http://localhost:<PORT_WIN_EXP>/metrics
curl.exe -X POST http://localhost:<PORT_PROM>/-/reload
  1. Prometheus → Status → Targets — job windowsUP (подождите 15–30 с после scrape interval).

  2. Grafana → Dashboards → Windows → Windows Exporter Dashboard (если настроен provisioning с JSON из Grafana.com 14694).

Примеры PromQL для Windows

up{job="windows"}
windows_cpu_time_total
windows_logical_disk_free_bytes
rate(windows_net_bytes_received_total[5m])

Если папка Windows в Grafana пустая

В логах Grafana часто: invalid character 'ï' looking for beginning of value — JSON дашборда сохранён с UTF-8 BOM. Пересохраните без BOM и перезапустите Grafana:

$path = "<каталог-проекта>\grafana\provisioning\dashboards\json\windows-exporter.json"
$content = [System.IO.File]::ReadAllText($path)
$utf8NoBom = New-Object System.Text.UTF8Encoding($false)
[System.IO.File]::WriteAllText($path, $content, $utf8NoBom)
docker compose restart grafana

Диагностика: docker compose logs grafana --since 2m | Select-String "failed to load|provisioning.dashboard"


Шаг 1. Сервис отдаёт метрики

Обычно это HTTP-эндпоинт /metrics в формате Prometheus.

ВариантПримеры
Библиотека в кодеNode.js prom-client, Python prometheus_client, .NET prometheus-net
Exporter рядом с системойnode_exporter, postgres_exporter, redis_exporter

Пример: приложение на хосте слушает http://localhost:8080/metrics.


Шаг 2. Добавить target в Prometheus

Отредактируйте prometheus/prometheus.yml:

scrape_configs:
- job_name: prometheus
static_configs:
- targets:
- localhost:9090

- job_name: my-app
static_configs:
- targets:
- host.docker.internal:8080

host.docker.internal — имя хоста из контейнера на Windows/macOS (Docker Desktop). Prometheus в Docker так достучится до сервиса на вашем ПК.

Если сервис тоже в Compose — используйте имя сервиса, не localhost:

- job_name: my-app
static_configs:
- targets:
- my-app:8080

На Linux иногда нужен extra_hosts: ["host.docker.internal:host-gateway"] у сервиса prometheus — см. шаг 2.


Шаг 3. Применить конфиг

Из каталога проекта:

docker compose restart prometheus

Или без рестарта (если включён --web.enable-lifecycle):

curl.exe -X POST http://localhost:<PORT_PROM>/-/reload
curl -X POST http://localhost:<PORT_PROM>/-/reload

Шаг 4. Проверить в Prometheus

Status → Targets — job my-app должен стать UP.

Если DOWN — сервис не отвечает, неверный порт, firewall или неверный адрес (host.docker.internal vs имя сервиса).


Как смотреть метрики в Grafana

Быстрый просмотр (Explore)

  1. Explore → datasource Prometheus
  2. Запрос, например:
rate(http_requests_total[5m])

или имя метрики, если знаете:

process_cpu_seconds_total
  1. Run query → переключайте Graph / Table

Создать дашборд

  1. Dashboards → New → New dashboard
  2. Add visualization
  3. Datasource — Prometheus
  4. PromQL, например:
up{job="my-app"}
  1. Apply → Save dashboard

Импорт готового дашборда

  1. Dashboards → New → Import
  2. ID с grafana.com/grafana/dashboards
IDНазвание
1860Node Exporter Full (Linux)
14694Windows Exporter Dashboard
893Docker
3662Prometheus 2.0 Overview
  1. Datasource — PrometheusImport

Шпаргалка по UI

Prometheus — http://localhost:<PORT_PROM>

РазделЧто там
GraphЗапросы PromQL, графики
Status → TargetsКакие сервисы мониторятся, UP/DOWN
Status → ConfigurationТекущий конфиг
AlertsАлерты Prometheus (после шага 6)

Grafana — http://localhost:<PORT_GRAFANA>

РазделЧто там
ExploreБыстрые ad-hoc запросы
DashboardsСохранённые дашборды
Connections → Data sourcesОткуда Grafana берёт данные
AlertingАлерты Grafana (отдельно от Prometheus)

Типичный рабочий процесс

  1. Поднять сервис с /metrics
  2. Добавить target в prometheus.yml
  3. reload / restart prometheus
  4. Prometheus → Targets — проверить UP
  5. Grafana → Explore — написать PromQL
  6. Понравилось → сохранить как dashboard

Что добавить дальше

ЗадачаКуда
Метрики Windows-хоста (CPU, RAM, диск)windows_exporter — job windows, <PORT_WIN_EXP>
Метрики Linux-хостаnode_exporter — job node, порт 9100
PostgreSQL, Redis, nginxГотовые exporters — отдельный job_name (шаг 5)
АлертыAlertmanager + правила или Grafana Alerting
Логи и трейсыLoki, Tempo

Пример job для windows_exporter (из контейнера Prometheus):

- job_name: windows
static_configs:
- targets:
- host.docker.internal:<PORT_WIN_EXP>

Пример job для node_exporter на Linux-хосте:

- job_name: node
static_configs:
- targets:
- host.docker.internal:9100

Полезные PromQL-запросы для начала

ЗапросСмысл
upКто жив (1 = UP, 0 = DOWN)
up{job="my-app"}Конкретный job приложения
up{job="windows"}Windows exporter жив
windows_logical_disk_free_bytesСвободное место на диске (Windows)
rate(http_requests_total[5m])RPS за 5 минут
process_resident_memory_bytesПамять процесса (если метрика есть)
prometheus_tsdb_head_seriesСколько временных рядов в TSDB

Разбор типов метрик и rate()шаг 3.


Куда дальше по практикуму

ЦельСтатья
Установка и health checkШаг 2
PromQL глубжеШаг 3
Дашборды и переменныеШаг 4
Exporters и /metrics в кодеШаг 5
АлертыШаг 6
Под свой стенд

Если мониторите конкретно приложение на Windows, Docker или PostgreSQL — начните с шага 5: там те же prometheus.yml jobs, но с готовыми exporters и примерами instrumentation.


См. также

Другие статьи этого же раздела в боковом меню (как на странице "О разделе").