Prometheus — алерт когда scrape-target unreachable
Prometheus сам жив, но один из targets (`up==0`) — данные перестали течь, графики пустые, alertmanager-правила, основанные на этом target, не fire-ят (нет данных = нет алерта).
Рецепт
#!/usr/bin/env bash
# /etc/cron.d/prom-target
# */1 * * * * root /opt/prom-target.sh
PROM=${PROM_URL:-http://localhost:9090}
DOWN=$(curl -fsS "$PROM/api/v1/query" --data-urlencode 'query=up==0' \
| jq -r '.data.result | length')
if [ "${DOWN:-0}" -gt 0 ]; then
TARGETS=$(curl -fsS "$PROM/api/v1/query" --data-urlencode 'query=up==0' \
| jq -r '.data.result | map(.metric.instance) | join(",")')
curl -fsS "$HEARTBEAT_URL" --data "down_targets=$DOWN,instances=$TARGETS"
exit 2
fi
echo "OK (no down targets)"
То же самое в Enterno.io
Поставьте Enterno heartbeat с интервалом 1 мин — meta-monitor «monitoring monitoring», который alert-нёт когда Prometheus сам не видит target раньше пользователя.
Похожие рецепты
Алерт в alertmanager в state=pending дольше for-window — должен быть active, но не fire-ит (group_wait большой? notifier broken? misconfig route?). Никто не получит уведомление.
Prometheus + Alertmanager шлют алерты только в email или PagerDuty. Команда живёт в Telegram — нужно мостовое звено без отдельного сервера.
Filebeat / Logstash тихо упал на одном edge-сервере. Ingest rate в Elasticsearch снижен на 40%, но dashboards никто не смотрит. Запросы в Sentry без логов = слепота.