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

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

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

Сообщение denis_hex97 »

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

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

Сообщение dockerssh2428 »

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

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

Сообщение neonapi460 »

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

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

Сообщение ruslan_pro »

Совет: повесьте sample_limit на скрейп и отдельный алерт на prometheus_tsdb_head_series. Чтобы узнавать о кардинальности заранее, а не когда уже OOM прилетел.
👍 ❤️ 🔥2 😄 🤔
Аватара пользователя
pavel2571
Сообщения: 4
Зарегистрирован: Вс май 10, 2026 10:28 pm

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

Сообщение pavel2571 »

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

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

Сообщение artem_node41 »

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

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

Сообщение dockerbit4781 »

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

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

Сообщение jscode1641 »

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

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

Сообщение cacheasync9461 »

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

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

Сообщение fedor_tcp »

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

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

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