All checks were successful
CI Trade-In / changes (pull_request) Successful in 8s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI / changes (pull_request) Successful in 10s
CI Trade-In / browser-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
Профиль alerts включили, а файл целей `alertmanager_targets.yml` остался плейсхолдером `[]`. Снаружи всё зелёное: alertmanager и alert-ack Up/healthy, деплой зелёный, в логах ни одной ошибки — при этом `activeAlertmanagers: []` и 1568 уведомлений в `prometheus_notifications_dropped_total`. Горящий с 26.08 `Watchdog` не доехал никуда, как и HostAgentDown с RemoteWriteStalled. Причина в том, что включатель профиля и цель для Prometheus лежали в разных местах: профиль поднимает deploy-metrics.yml по наличию токена и чата, а файл целей правился руками. Разъезд не ловится ничем — `[]` штатен при выключенном профиле, поэтому ни валидация, ни healthcheck, ни лог на него не реагируют. Файл становится производным (`alertmanager_targets.gen.yml`, в .gitignore) и рендерится деплоем тем же условием, что включает профиль: цель при включённых алертах, `[]` при выключенных. Рендер идёт до `up` и пишет усечением на месте, поэтому инод сохраняется и работающий Prometheus подхватывает цель сам — та же ловушка одиночного бинд-маунта, что уже описана в этом workflow у Alertmanager. Пустой список пишется явно, а не удалением файла: несуществующий путь docker подменяет каталогом, и Prometheus не стартует вовсе. Closes #3155
69 lines
3.7 KiB
YAML
69 lines
3.7 KiB
YAML
# Prometheus — серверная сторона, живёт на Beget.
|
||
#
|
||
# СКРЕЙПА ЧУЖИХ ХОСТОВ ЗДЕСЬ НЕТ. Метрики с Poincare приходят push'ем через
|
||
# remote-write receiver (--web.enable-remote-write-receiver), потому что открывать
|
||
# входящие порты на продуктовом хосте ради мониторинга — плохой размен.
|
||
# Локально скрейпится только то, что стоит на этом же хосте.
|
||
#
|
||
# Метка `host` проставляется агентом Alloy на своей стороне (external_labels),
|
||
# поэтому здесь её нет: если задать и там и тут, honor_labels-семантика сделает
|
||
# результат неочевидным.
|
||
|
||
global:
|
||
scrape_interval: 30s
|
||
scrape_timeout: 10s
|
||
evaluation_interval: 30s
|
||
external_labels:
|
||
cluster: gendesign
|
||
|
||
rule_files:
|
||
- /etc/prometheus/rules/*.yml
|
||
|
||
# Пока профиль alerts выключен, сервиса alertmanager не существует. Со
|
||
# static_configs это раз в интервал давало "lookup alertmanager: no such
|
||
# host" в логах и up{job="alertmanager"}=0. file_sd_configs вместо
|
||
# static_configs делает цель опциональной идиоматично для Prometheus: пустой
|
||
# список ([]) — алертов нет и ошибок разрешения имени тоже нет. Prometheus
|
||
# перечитывает file_sd на лету, так что включение профиля сводится к
|
||
# наполнению файла, без рестарта и без правки этого конфига.
|
||
#
|
||
# Файл ПРОИЗВОДНЫЙ (суффикс .gen, в .gitignore): его рендерит deploy-metrics.yml
|
||
# тем же условием, которым включает профиль. Одно условие — один результат.
|
||
# Отслеживаемая git'ом версия этого не давала: 27.08 профиль подняли, а файл
|
||
# так и остался плейсхолдером []. Alertmanager был Up и healthy, Prometheus же
|
||
# не видел ни одного приёмника (activeAlertmanagers: []), и 1568 уведомлений
|
||
# ушли в prometheus_notifications_dropped_total — молча, без единой ошибки ни
|
||
# в одном логе. Держать включатель и цель в разных местах больше нельзя.
|
||
alerting:
|
||
alertmanagers:
|
||
- file_sd_configs:
|
||
- files: ["/etc/prometheus/alertmanager_targets.gen.yml"]
|
||
|
||
scrape_configs:
|
||
# Сам Prometheus. Нужен не для красоты: по нему строится алерт на здоровье
|
||
# приёмника — пустая панель неотличима от «ошибок нет», и это надо различать.
|
||
- job_name: prometheus
|
||
static_configs:
|
||
- targets: ["localhost:9090"]
|
||
labels:
|
||
host: infra
|
||
|
||
# Тот же опциональный source, что и в alerting.alertmanagers выше: пока
|
||
# профиль alerts не включён, файл целей пуст — up{job="alertmanager"}
|
||
# просто не появится в выдаче вместо ошибки "no such host".
|
||
- job_name: alertmanager
|
||
file_sd_configs:
|
||
- files: ["/etc/prometheus/alertmanager_targets.gen.yml"]
|
||
|
||
- job_name: loki
|
||
static_configs:
|
||
- targets: ["loki:3100"]
|
||
labels:
|
||
host: infra
|
||
|
||
- job_name: grafana
|
||
static_configs:
|
||
- targets: ["grafana:3000"]
|
||
labels:
|
||
host: infra
|
||
metrics_path: /metrics
|