Короткий ответ
Единого готового набора правил, подходящего всем организациям, не существует — нужен баланс между централизованными стандартами (обязательные labels, конвенции именования, лимиты кардинальности per-команда) и достаточной автономией команд, подкреплённый автоматизированным контролем (quota, линтеры конфигурации) и явным владением (кто отвечает за платформу, кто — за инструментацию конкретного сервиса), а не только добровольными договорённостями.
Как это работает подробнее
платформенная команда определяет базовые стандарты (обязательные labels типа service, env, team; лимиты на число активных временных рядов per-namespace; требования к формату структурированных логов) и воплощает их в автоматизированные проверки — например, admission-контроллер или CI-линтер, который проверяет манифесты ServiceMonitor/дашбордов перед деплоем, и quota на уровне multi-tenant Prometheus/Mimir (per-tenant limits на число активных series), которая технически не даёт одной команде случайно уронить общую систему избыточной кардинальностью.
Компромисс: жёсткое централизованное принуждение (технические quota, обязательные линтеры) снижает риск инцидентов из-за чужой ошибки конфигурации, но требует инвестиций в платформенные инструменты и может замедлять отдельные команды с нетипичными потребностями; мягкие рекомендации быстрее внедряются и не ограничивают автономию, но хуже масштабируются и чаще нарушаются под давлением сроков. Конкретный баланс жёсткости правил должен определяться зрелостью организации, историей реальных инцидентов от нарушения стандартов и готовностью инвестировать в платформенные инструменты, а не копироваться из практики другой компании без адаптации.
Пример кода
# Пример per-tenant limit в multi-tenant Mimir/Cortex (ограничение кардинальности на команду)
overrides:
team-checkout:
max_global_series_per_user: 500000
max_label_names_per_series: 30Что использовать на практике
- Практика. governance также включает процесс периодического аудита дашбордов и алертов (кто владелец, когда последний раз использовался, актуален ли) — без этого со временем накапливаются десятки заброшенных дашбордов и дублирующих алертов, которые путают новых инженеров и тратят вычислительные ресурсы. Важно явно закрепить ownership: каждый дашборд/алерт должен иметь владельца (команду), отвечающего за его актуальность, иначе "ничейные" артефакты никто не удаляет даже после устаревания.
- Практика. При превышении лимита
max_global_series_per_userкомандаteam-checkoutполучит явную ошибку записи метрик (429на remote_write) вместо того, чтобы молча деградировать производительность общего кластера для всех остальных команд — это технически воплощённое governance-правило, а не просто рекомендация в документации, которую можно случайно не заметить.
Подводные камни
- Частые ошибки. вводить governance только как документ с рекомендациями без технического принуждения (quota, линтеры), из-за чего правила соблюдаются неравномерно и деградируют со временем под давлением сроков команд; централизовывать слишком жёстко без возможности обоснованного исключения, что вызывает сопротивление и обход правил через "теневые" инструменты; не иметь процесса регулярной очистки устаревших метрик/дашбордов/алертов, что приводит к постепенному накоплению технического долга в самой observability-системе.