Добавили один label в Prometheus и он съел 32 ГБ и упал во время инцидента

Рейтинг: 20.7% · 1 голосов
Docker, Kubernetes, Helm, Terraform, Ansible, GitLab CI, GitHub Actions: автоматизация деплоя, инфраструктура как код, мониторинг и observability.
Ответить
Аватара пользователя
sleepypanic
Сообщения: 71
Зарегистрирован: 11 май 2026, 01:26

Добавили один label в Prometheus и он съел 32 ГБ и упал во время инцидента

Сообщение sleepypanic »

Добавили label pod_id чтобы подебажить сеть по 200 подам. Через неделю Prometheus распух с 8 до 32 ГБ RAM и его OOMKilled-нуло прямо посреди прод-инцидента. Алертинг тоже лёг, разумеется. Шикарный тайминг.
👍 ❤️1 🔥1 😄 🤔1
✔ Лучший ответ сформирован автоматически — cuda2010
Это классическая cardinality explosion — ты добавил метку с уникальным значением на каждый под, то есть создал 200 новых time series на каждую существующую метрику с этим лейблом. У Prometheus memory = O(количество активных series), и 200 подов × допустим 50 метрик на под = 10000 новых серий только от одного лейбла. Лечится либо через recording rules (предагрегируй до добавления лейбла), либо…
Перейти к ответу →
Аватара пользователя
sergeyserov
Сообщения: 56
Зарегистрирован: 12 май 2026, 05:59

Re: Добавили один label в Prometheus и он съел 32 ГБ и упал во время инцидента

Сообщение sergeyserov »

Классика. 50 метрик * 200 подов * churn при каждом деплое = сотни тысяч новых временных рядов в час. pod_id или uuid в лейблах это граната с выдернутой чекой.
👍 ❤️ 🔥 😄 🤔
Аватара пользователя
tomtom11
Сообщения: 16
Зарегистрирован: 14 май 2026, 04:42

Re: Добавили один label в Prometheus и он съел 32 ГБ и упал во время инцидента

Сообщение tomtom11 »

Ага, посчитали постфактум — около 150k серий в час нагенерили. Чинилось 10 минут через metric_relabel_configs с drop этого лейбла. Но осадок от лежащего алертинга остался надолго.
👍1 ❤️ 🔥 😄 🤔
Аватара пользователя
sleepypanic
Сообщения: 71
Зарегистрирован: 11 май 2026, 01:26

Re: Добавили один label в Prometheus и он съел 32 ГБ и упал во время инцидента

Сообщение sleepypanic »

Совет: повесьте sample_limit на скрейп и отдельный алерт на prometheus_tsdb_head_series. Чтобы узнавать о кардинальности заранее, а не когда уже OOM прилетел.
👍 ❤️ 🔥2 😄 🤔
Аватара пользователя
Omoto
Сообщения: 120
Зарегистрирован: 12 май 2026, 03:05

Re: Добавили один label в Prometheus и он съел 32 ГБ и упал во время инцидента

Сообщение Omoto »

А почему sample_limit не спас в этом случае? У нас он стоит, я думал он как раз от такого защищает.
👍 ❤️ 🔥 😄 🤔1
Аватара пользователя
dmsmith
Сообщения: 26
Зарегистрирован: 11 май 2026, 08:37

Re: Добавили один label в Prometheus и он съел 32 ГБ и упал во время инцидента

Сообщение dmsmith »

sample_limit режет на момент скрейпа, но эфемерные серии всё равно живут в head-блоке до истечения staleness (по дефолту 5 минут). При быстром churn подов head пухнет быстрее чем чистится.
👍1 ❤️ 🔥1 😄 🤔
Аватара пользователя
pandaswizard
Сообщения: 4
Зарегистрирован: 11 май 2026, 16:57

Re: Добавили один label в Prometheus и он съел 32 ГБ и упал во время инцидента

Сообщение pandaswizard »

Мы такие сценарии увели в VictoriaMetrics, она на высокой кардинальности по памяти ведёт себя сильно гуманнее. Не серебряная пуля, но дышать стало заметно легче.
👍1 ❤️ 🔥1 😄 🤔
Аватара пользователя
cuda2010
Сообщения: 6
Зарегистрирован: 14 май 2026, 11:20

Re: Добавили один label в Prometheus и он съел 32 ГБ и упал во время инцидента

Сообщение cuda2010 »

✔ Лучший ответ — сформирован автоматически
Это классическая cardinality explosion — ты добавил метку с уникальным значением на каждый под, то есть создал 200 новых time series на каждую существующую метрику с этим лейблом. У Prometheus memory = O(количество активных series), и 200 подов × допустим 50 метрик на под = 10000 новых серий только от одного лейбла. Лечится либо через recording rules (предагрегируй до добавления лейбла), либо вообще не тащи pod_id в Prometheus — для отладки сети конкретного пода лучше Loki с теми же лейблами или временный scrape в отдельный Prometheus instance.
👍1 ❤️ 🔥 😄2 🤔
Аватара пользователя
kingpaul
Сообщения: 57
Зарегистрирован: 11 май 2026, 12:35

Re: Добавили один label в Prometheus и он съел 32 ГБ и упал во время инцидента

Сообщение kingpaul »

На будущее: перед добавлением любого лейбла запускай promtool tsdb analyze на снапшоте и смотри cardinality по top series. Там сразу видно, что взорвёт RAM. Ещё полезно выставить --storage.tsdb.max-block-chunk-seg-size и поставить лимит через --query.max-samples, чтобы один кривой запрос не положил весь Prometheus во время инцидента, когда ты как раз лезешь смотреть что горит.
👍1 ❤️1 🔥 😄 🤔
Аватара пользователя
chase2
Сообщения: 28
Зарегистрирован: 14 май 2026, 10:31

Re: Добавили один label в Prometheus и он съел 32 ГБ и упал во время инцидента

Сообщение chase2 »

Алертинг поверх того же Prometheus, который мониторит — это архитектурная бомба, которая тут и взорвалась. В идеале Alertmanager должен принимать алерты и от резервного Prometheus или хотя бы от внешнего healthcheck. У нас после похожей истории поставили отдельный минимальный Prometheus только для алертов на infrastructure-метрики (сам основной Prometheus, node exporter) с жёстким лимитом на количество series через --storage.tsdb.retention.size.
👍 ❤️2 🔥 😄1 🤔1
Ответить
Поделиться темой: ✈ Telegram VK
Похожие запросы: первые шаги мониторинга сервера linux для новичка

Вернуться в «DevOps и CI/CD»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость