Compare commits
No commits in common. "82171aedfc7814bf9acd947530869a01dd02edba" and "b2748f90f823aa6653b975c58ddbd966cfb90376" have entirely different histories.
82171aedfc
...
b2748f90f8
4 changed files with 32 additions and 129 deletions
|
|
@ -88,10 +88,9 @@ jobs:
|
||||||
METRICS_TELEGRAM_BOT_TOKEN: ${{ secrets.METRICS_TELEGRAM_BOT_TOKEN }}
|
METRICS_TELEGRAM_BOT_TOKEN: ${{ secrets.METRICS_TELEGRAM_BOT_TOKEN }}
|
||||||
METRICS_TELEGRAM_CHAT_ID: ${{ secrets.METRICS_TELEGRAM_CHAT_ID }}
|
METRICS_TELEGRAM_CHAT_ID: ${{ secrets.METRICS_TELEGRAM_CHAT_ID }}
|
||||||
METRICS_TELEGRAM_TOPIC_ID: ${{ secrets.METRICS_TELEGRAM_TOPIC_ID }}
|
METRICS_TELEGRAM_TOPIC_ID: ${{ secrets.METRICS_TELEGRAM_TOPIC_ID }}
|
||||||
METRICS_TELEGRAM_INFRA_TOPIC_ID: ${{ secrets.METRICS_TELEGRAM_INFRA_TOPIC_ID }}
|
|
||||||
METRICS_TELEGRAM_ONCALL: ${{ secrets.METRICS_TELEGRAM_ONCALL }}
|
METRICS_TELEGRAM_ONCALL: ${{ secrets.METRICS_TELEGRAM_ONCALL }}
|
||||||
with:
|
with:
|
||||||
envs: METRICS_TELEGRAM_BOT_TOKEN,METRICS_TELEGRAM_CHAT_ID,METRICS_TELEGRAM_TOPIC_ID,METRICS_TELEGRAM_INFRA_TOPIC_ID,METRICS_TELEGRAM_ONCALL
|
envs: METRICS_TELEGRAM_BOT_TOKEN,METRICS_TELEGRAM_CHAT_ID,METRICS_TELEGRAM_TOPIC_ID,METRICS_TELEGRAM_ONCALL
|
||||||
host: ${{ secrets.INFRA_DEPLOY_HOST || secrets.DEPLOY_HOST }}
|
host: ${{ secrets.INFRA_DEPLOY_HOST || secrets.DEPLOY_HOST }}
|
||||||
username: ${{ secrets.INFRA_DEPLOY_USER || secrets.DEPLOY_USER }}
|
username: ${{ secrets.INFRA_DEPLOY_USER || secrets.DEPLOY_USER }}
|
||||||
key: ${{ secrets.INFRA_DEPLOY_SSH_KEY || secrets.DEPLOY_SSH_KEY }}
|
key: ${{ secrets.INFRA_DEPLOY_SSH_KEY || secrets.DEPLOY_SSH_KEY }}
|
||||||
|
|
@ -139,51 +138,17 @@ jobs:
|
||||||
PROFILES="alerts"
|
PROFILES="alerts"
|
||||||
mkdir -p ops/metrics/alertmanager
|
mkdir -p ops/metrics/alertmanager
|
||||||
|
|
||||||
# Тема КЛИЕНТСКИХ инцидентов задаётся НЕ здесь. Их отправляет
|
# Топик форумной группы (#3078). Необязателен: без него алерты
|
||||||
# сервис alert-ack, читая METRICS_TELEGRAM_TOPIC_ID из своего
|
# уходят в общую тему. Подставляем ЦЕЛОЙ СТРОКОЙ, а не значением,
|
||||||
# окружения (docker-compose.metrics.yml): маршрут
|
# потому что envsubst не умеет условий — при пустом
|
||||||
# telegram-clients уходит вебхуком, а не в Telegram напрямую,
|
# METRICS_TELEGRAM_TOPIC_ID в конфиг попал бы `message_thread_id:`
|
||||||
# поэтому в конфиг Alertmanager эта тема не попадает вовсе.
|
# без значения, и Alertmanager не стартовал бы вовсе.
|
||||||
# Печатаем её только затем, чтобы по логу деплоя было видно,
|
|
||||||
# куда пойдут инциденты.
|
|
||||||
if [ -n "${METRICS_TELEGRAM_TOPIC_ID:-}" ]; then
|
if [ -n "${METRICS_TELEGRAM_TOPIC_ID:-}" ]; then
|
||||||
echo "Клиентские инциденты: тема ${METRICS_TELEGRAM_TOPIC_ID}, адресует alert-ack."
|
METRICS_TELEGRAM_TOPIC_LINE=" message_thread_id: ${METRICS_TELEGRAM_TOPIC_ID}"
|
||||||
|
echo "Алерты: адресуются в топик ${METRICS_TELEGRAM_TOPIC_ID}."
|
||||||
else
|
else
|
||||||
echo "::warning title=Тема клиентских инцидентов не задана::METRICS_TELEGRAM_TOPIC_ID пуст — alert-ack отправит инцидент в общую тему чата, где его не читают."
|
METRICS_TELEGRAM_TOPIC_LINE=""
|
||||||
fi
|
echo "Алерты: топик не задан — уйдут в общую тему чата."
|
||||||
|
|
||||||
# Инфраструктурная тема (#3163): telegram/telegram-heartbeat
|
|
||||||
# адресуют СЮДА, отдельно от темы клиентских инцидентов — иначе
|
|
||||||
# инфраструктурный шум (диск, память, просевший экспортер) и
|
|
||||||
# клиентский инцидент смешиваются в одной ленте и приучают
|
|
||||||
# пролистывать обе.
|
|
||||||
#
|
|
||||||
# Подставляем ЦЕЛОЙ СТРОКОЙ, а не значением, потому что envsubst
|
|
||||||
# не умеет условий: при пустом топике в конфиг попал бы
|
|
||||||
# `message_thread_id:` без значения, и Alertmanager не стартовал
|
|
||||||
# бы вовсе — то есть алертинг исчез бы целиком, а не «ушёл не в
|
|
||||||
# ту тему».
|
|
||||||
#
|
|
||||||
# Откат обязателен: пока METRICS_TELEGRAM_INFRA_TOPIC_ID не
|
|
||||||
# прописана на хосте, берём METRICS_TELEGRAM_TOPIC_ID — тогда
|
|
||||||
# поведение остаётся ровно прежним, а не ломается молча.
|
|
||||||
if [ -n "${METRICS_TELEGRAM_INFRA_TOPIC_ID:-}" ]; then
|
|
||||||
INFRA_TOPIC_ID="${METRICS_TELEGRAM_INFRA_TOPIC_ID}"
|
|
||||||
INFRA_TOPIC_IS_FALLBACK=0
|
|
||||||
else
|
|
||||||
INFRA_TOPIC_ID="${METRICS_TELEGRAM_TOPIC_ID:-}"
|
|
||||||
INFRA_TOPIC_IS_FALLBACK=1
|
|
||||||
fi
|
|
||||||
if [ -n "${INFRA_TOPIC_ID}" ]; then
|
|
||||||
METRICS_TELEGRAM_INFRA_TOPIC_LINE=" message_thread_id: ${INFRA_TOPIC_ID}"
|
|
||||||
if [ "${INFRA_TOPIC_IS_FALLBACK}" = "1" ]; then
|
|
||||||
echo "Инфраструктура: METRICS_TELEGRAM_INFRA_TOPIC_ID не задана — откат на METRICS_TELEGRAM_TOPIC_ID, топик ${INFRA_TOPIC_ID}."
|
|
||||||
else
|
|
||||||
echo "Инфраструктура: адресуются в топик ${INFRA_TOPIC_ID}."
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
METRICS_TELEGRAM_INFRA_TOPIC_LINE=""
|
|
||||||
echo "Инфраструктура: топик не задан — уйдут в общую тему чата."
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -n "${METRICS_TELEGRAM_ONCALL:-}" ]; then
|
if [ -n "${METRICS_TELEGRAM_ONCALL:-}" ]; then
|
||||||
|
|
@ -204,9 +169,9 @@ jobs:
|
||||||
|
|
||||||
METRICS_TELEGRAM_BOT_TOKEN="$METRICS_TELEGRAM_BOT_TOKEN" \
|
METRICS_TELEGRAM_BOT_TOKEN="$METRICS_TELEGRAM_BOT_TOKEN" \
|
||||||
METRICS_TELEGRAM_CHAT_ID="$METRICS_TELEGRAM_CHAT_ID" \
|
METRICS_TELEGRAM_CHAT_ID="$METRICS_TELEGRAM_CHAT_ID" \
|
||||||
METRICS_TELEGRAM_INFRA_TOPIC_LINE="$METRICS_TELEGRAM_INFRA_TOPIC_LINE" \
|
METRICS_TELEGRAM_TOPIC_LINE="$METRICS_TELEGRAM_TOPIC_LINE" \
|
||||||
METRICS_TELEGRAM_ONCALL="${METRICS_TELEGRAM_ONCALL:-}" \
|
METRICS_TELEGRAM_ONCALL="${METRICS_TELEGRAM_ONCALL:-}" \
|
||||||
envsubst '${METRICS_TELEGRAM_BOT_TOKEN} ${METRICS_TELEGRAM_CHAT_ID} ${METRICS_TELEGRAM_INFRA_TOPIC_LINE} ${METRICS_TELEGRAM_ONCALL}' \
|
envsubst '${METRICS_TELEGRAM_BOT_TOKEN} ${METRICS_TELEGRAM_CHAT_ID} ${METRICS_TELEGRAM_TOPIC_LINE} ${METRICS_TELEGRAM_ONCALL}' \
|
||||||
< ops/metrics/alertmanager/alertmanager.yml.tmpl \
|
< ops/metrics/alertmanager/alertmanager.yml.tmpl \
|
||||||
> ops/metrics/alertmanager/alertmanager.yml
|
> ops/metrics/alertmanager/alertmanager.yml
|
||||||
chmod 600 ops/metrics/alertmanager/alertmanager.yml
|
chmod 600 ops/metrics/alertmanager/alertmanager.yml
|
||||||
|
|
|
||||||
|
|
@ -16,14 +16,6 @@
|
||||||
алертинга: контейнер просто не поднимется. Поэтому деплой формирует либо всю
|
алертинга: контейнер просто не поднимется. Поэтому деплой формирует либо всю
|
||||||
строку с отступом, либо пустую.
|
строку с отступом, либо пустую.
|
||||||
|
|
||||||
ПОЧЕМУ ДВЕ ТЕМЫ (#3163), А НЕ ОДНА. До этого тикета оба прямых получателя
|
|
||||||
(`telegram`, `telegram-heartbeat`) и клиентские инциденты брали топик из ОДНОЙ
|
|
||||||
переменной — и инфраструктурная тема «метрики» оставалась пустой, а весь трафик,
|
|
||||||
и клиентский, и инфраструктурный, копился в теме «алерты». Владелец решил
|
|
||||||
развести: инфраструктура — в «метрики», клиентские инциденты — в «алерты».
|
|
||||||
Тесты ниже закрепляют именно это: `telegram`/`telegram-heartbeat` получают
|
|
||||||
ИНФРАСТРУКТУРНУЮ тему, а не общую.
|
|
||||||
|
|
||||||
Тесты рендерят шаблон обоими способами и разбирают результат как YAML —
|
Тесты рендерят шаблон обоими способами и разбирают результат как YAML —
|
||||||
проверяется фактический конфиг, а не наличие нужных слов в тексте.
|
проверяется фактический конфиг, а не наличие нужных слов в тексте.
|
||||||
"""
|
"""
|
||||||
|
|
@ -41,28 +33,17 @@ REPO_ROOT = Path(__file__).resolve().parents[3]
|
||||||
TMPL = REPO_ROOT / "ops" / "metrics" / "alertmanager" / "alertmanager.yml.tmpl"
|
TMPL = REPO_ROOT / "ops" / "metrics" / "alertmanager" / "alertmanager.yml.tmpl"
|
||||||
WORKFLOW = REPO_ROOT / ".forgejo" / "workflows" / "deploy-metrics.yml"
|
WORKFLOW = REPO_ROOT / ".forgejo" / "workflows" / "deploy-metrics.yml"
|
||||||
|
|
||||||
INFRA_TOPIC_LINE = " message_thread_id: 245"
|
TOPIC_LINE = " message_thread_id: 42"
|
||||||
|
|
||||||
|
|
||||||
def _render(infra_topic_line: str) -> dict:
|
def _render(topic_line: str) -> dict:
|
||||||
"""Повторяет подстановку деплоя и разбирает результат как YAML.
|
"""Повторяет подстановку деплоя и разбирает результат как YAML."""
|
||||||
|
|
||||||
Строка темы в шаблоне ровно одна — инфраструктурная (#3163). Тема
|
|
||||||
клиентских инцидентов сюда не подставляется вовсе: маршрут
|
|
||||||
`telegram-clients` уходит вебхуком в alert-ack, и тему адресует уже он,
|
|
||||||
своей переменной окружения. Держать здесь второй параметр было бы враньём
|
|
||||||
— он ни на что не влиял бы, а тест выглядел бы строже, чем он есть.
|
|
||||||
"""
|
|
||||||
assert TMPL.is_file(), f"нет {TMPL} — шаблон переехал, гейт ослеп"
|
assert TMPL.is_file(), f"нет {TMPL} — шаблон переехал, гейт ослеп"
|
||||||
text = TMPL.read_text(encoding="utf-8")
|
text = TMPL.read_text(encoding="utf-8")
|
||||||
rendered = (
|
rendered = (
|
||||||
text.replace("${METRICS_TELEGRAM_BOT_TOKEN}", "123:ABC")
|
text.replace("${METRICS_TELEGRAM_BOT_TOKEN}", "123:ABC")
|
||||||
.replace("${METRICS_TELEGRAM_CHAT_ID}", "-100123")
|
.replace("${METRICS_TELEGRAM_CHAT_ID}", "-100123")
|
||||||
.replace("${METRICS_TELEGRAM_INFRA_TOPIC_LINE}", infra_topic_line)
|
.replace("${METRICS_TELEGRAM_TOPIC_LINE}", topic_line)
|
||||||
)
|
|
||||||
assert "${" not in rendered, (
|
|
||||||
"в отрендеренном конфиге остался литерал плейсхолдера — "
|
|
||||||
"значит в шаблоне появилась подстановка, о которой тест не знает"
|
|
||||||
)
|
)
|
||||||
return yaml.safe_load(rendered)
|
return yaml.safe_load(rendered)
|
||||||
|
|
||||||
|
|
@ -76,22 +57,19 @@ def _telegram_configs(cfg: dict) -> list[dict]:
|
||||||
|
|
||||||
|
|
||||||
def test_topic_lands_in_every_telegram_receiver() -> None:
|
def test_topic_lands_in_every_telegram_receiver() -> None:
|
||||||
"""Оба прямых получателя адресуют ИНФРАСТРУКТУРНУЮ тему, а не клиентскую (#3163).
|
"""Топик проставляется во ВСЕХ получателях, а не только в основном.
|
||||||
|
|
||||||
Получателей два — `telegram` и `telegram-heartbeat`. До разделения тем оба
|
Получателей два — `telegram` и `telegram-heartbeat`. Если heartbeat уйдёт
|
||||||
брали топик из одной переменной с клиентскими инцидентами, и тема «метрики»
|
в общую тему, «мониторинг жив» будет капать мимо, и это заметят не сразу.
|
||||||
(245) оставалась пустой. Если heartbeat уйдёт не в ту тему, «мониторинг жив»
|
|
||||||
будет капать мимо, и это заметят не сразу — сюда же попадёт и весь
|
|
||||||
инфраструктурный шум.
|
|
||||||
"""
|
"""
|
||||||
cfgs = _telegram_configs(_render(INFRA_TOPIC_LINE))
|
cfgs = _telegram_configs(_render(TOPIC_LINE))
|
||||||
assert len(cfgs) >= 2, f"ожидалось минимум два получателя telegram, найдено {len(cfgs)}"
|
assert len(cfgs) >= 2, f"ожидалось минимум два получателя telegram, найдено {len(cfgs)}"
|
||||||
for c in cfgs:
|
for c in cfgs:
|
||||||
assert c.get("message_thread_id") == 245, f"инфраструктурный топик не проставлен: {c}"
|
assert c.get("message_thread_id") == 42, f"топик не проставлен: {c}"
|
||||||
|
|
||||||
|
|
||||||
def test_without_infra_topic_field_is_absent_not_empty() -> None:
|
def test_without_topic_field_is_absent_not_empty() -> None:
|
||||||
"""Без инфраструктурной темы поля нет вовсе — не пустое значение.
|
"""Без топика поля нет вовсе — не пустое значение.
|
||||||
|
|
||||||
Ядро регресса: `message_thread_id:` без значения уронил бы Alertmanager,
|
Ядро регресса: `message_thread_id:` без значения уронил бы Alertmanager,
|
||||||
то есть выключил бы алертинг целиком, а не «просто отправил бы в общую тему».
|
то есть выключил бы алертинг целиком, а не «просто отправил бы в общую тему».
|
||||||
|
|
@ -103,54 +81,28 @@ def test_without_infra_topic_field_is_absent_not_empty() -> None:
|
||||||
|
|
||||||
|
|
||||||
def test_deploy_computes_whole_line_and_passes_it_to_envsubst() -> None:
|
def test_deploy_computes_whole_line_and_passes_it_to_envsubst() -> None:
|
||||||
"""Деплой формирует строку темы целиком и объявляет её в envsubst.
|
"""Деплой формирует строку целиком и объявляет переменную в envsubst.
|
||||||
|
|
||||||
`envsubst` подставляет ТОЛЬКО перечисленные ему переменные. Забыть добавить
|
`envsubst` подставляет ТОЛЬКО перечисленные ему переменные. Забыть добавить
|
||||||
новую в список — значит оставить в готовом конфиге литерал
|
новую в список — значит оставить в готовом конфиге литерал
|
||||||
`${METRICS_TELEGRAM_INFRA_TOPIC_LINE}`, на котором Alertmanager не стартует
|
`${METRICS_TELEGRAM_TOPIC_LINE}`, на котором Alertmanager не стартует.
|
||||||
вовсе (#3163) — та же ловушка, из-за которой изначально завели этот файл
|
|
||||||
для клиентской строки в #3078.
|
|
||||||
"""
|
"""
|
||||||
assert WORKFLOW.is_file(), f"нет {WORKFLOW} — воркфлоу переехал, гейт ослеп"
|
assert WORKFLOW.is_file(), f"нет {WORKFLOW} — воркфлоу переехал, гейт ослеп"
|
||||||
text = WORKFLOW.read_text(encoding="utf-8")
|
text = WORKFLOW.read_text(encoding="utf-8")
|
||||||
|
|
||||||
assert "METRICS_TELEGRAM_TOPIC_ID" in text, (
|
assert "METRICS_TELEGRAM_TOPIC_ID" in text, "деплой не читает переменную топика"
|
||||||
"деплой не читает переменную клиентского топика — она нужна как откат"
|
|
||||||
)
|
|
||||||
assert "METRICS_TELEGRAM_INFRA_TOPIC_ID" in text, (
|
|
||||||
"деплой не читает переменную инфраструктурного топика"
|
|
||||||
)
|
|
||||||
assert re.search(
|
assert re.search(
|
||||||
r"METRICS_TELEGRAM_INFRA_TOPIC_LINE=\"\s+message_thread_id: \$\{INFRA_TOPIC_ID\}\"",
|
r"METRICS_TELEGRAM_TOPIC_LINE=\"\s+message_thread_id: \$\{METRICS_TELEGRAM_TOPIC_ID\}\"",
|
||||||
text,
|
text,
|
||||||
), "инфраструктурная строка собирается не целиком — при пустом значении конфиг сломается"
|
), "строка топика собирается не целиком — при пустом значении конфиг сломается"
|
||||||
|
|
||||||
envsubst = re.search(r"envsubst '([^']+)'", text)
|
envsubst = re.search(r"envsubst '([^']+)'", text)
|
||||||
assert envsubst, "не нашёл вызов envsubst"
|
assert envsubst, "не нашёл вызов envsubst"
|
||||||
assert "${METRICS_TELEGRAM_INFRA_TOPIC_LINE}" in envsubst.group(1), (
|
assert "${METRICS_TELEGRAM_TOPIC_LINE}" in envsubst.group(1), (
|
||||||
"переменная инфраструктурного топика не объявлена в envsubst — "
|
"переменная топика не объявлена в envsubst — в конфиг попадёт литерал плейсхолдера"
|
||||||
"в конфиг попадёт литерал плейсхолдера"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def test_infra_topic_falls_back_to_client_topic_when_unset() -> None:
|
|
||||||
"""Без METRICS_TELEGRAM_INFRA_TOPIC_ID — откат на METRICS_TELEGRAM_TOPIC_ID (#3163).
|
|
||||||
|
|
||||||
Разделение тем не должно ломать деплой у тех, кто ещё не прописал новую
|
|
||||||
переменную на хосте: пока её нет, поведение обязано остаться ровно
|
|
||||||
прежним (топик из METRICS_TELEGRAM_TOPIC_ID), а не откатиться в общую тему
|
|
||||||
чата или сломать рендер конфига.
|
|
||||||
"""
|
|
||||||
text = WORKFLOW.read_text(encoding="utf-8")
|
|
||||||
assert re.search(
|
|
||||||
r'if \[ -n "\$\{METRICS_TELEGRAM_INFRA_TOPIC_ID:-\}" \]; then'
|
|
||||||
r'[\s\S]*?INFRA_TOPIC_ID="\$\{METRICS_TELEGRAM_INFRA_TOPIC_ID\}"'
|
|
||||||
r'[\s\S]*?else'
|
|
||||||
r'[\s\S]*?INFRA_TOPIC_ID="\$\{METRICS_TELEGRAM_TOPIC_ID:-\}"',
|
|
||||||
text,
|
|
||||||
), "нет отката на METRICS_TELEGRAM_TOPIC_ID при незаданной METRICS_TELEGRAM_INFRA_TOPIC_ID"
|
|
||||||
|
|
||||||
|
|
||||||
def test_config_is_validated_before_stack_comes_up() -> None:
|
def test_config_is_validated_before_stack_comes_up() -> None:
|
||||||
"""Конфиг проверяется до подъёма — как Caddyfile.
|
"""Конфиг проверяется до подъёма — как Caddyfile.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -187,10 +187,6 @@ services:
|
||||||
environment:
|
environment:
|
||||||
METRICS_TELEGRAM_BOT_TOKEN: ${METRICS_TELEGRAM_BOT_TOKEN:-}
|
METRICS_TELEGRAM_BOT_TOKEN: ${METRICS_TELEGRAM_BOT_TOKEN:-}
|
||||||
METRICS_TELEGRAM_CHAT_ID: ${METRICS_TELEGRAM_CHAT_ID:-}
|
METRICS_TELEGRAM_CHAT_ID: ${METRICS_TELEGRAM_CHAT_ID:-}
|
||||||
# 158 — тема клиентских инцидентов (#3163). Инфраструктурная тема (245)
|
|
||||||
# теперь отдельная и живёт в конфиге Alertmanager
|
|
||||||
# (ops/metrics/alertmanager/alertmanager.yml.tmpl), не здесь: alert-ack
|
|
||||||
# получает только клиентские инциденты и остаётся на этой переменной.
|
|
||||||
METRICS_TELEGRAM_TOPIC_ID: ${METRICS_TELEGRAM_TOPIC_ID:-}
|
METRICS_TELEGRAM_TOPIC_ID: ${METRICS_TELEGRAM_TOPIC_ID:-}
|
||||||
METRICS_TELEGRAM_ONCALL: ${METRICS_TELEGRAM_ONCALL:-}
|
METRICS_TELEGRAM_ONCALL: ${METRICS_TELEGRAM_ONCALL:-}
|
||||||
# Внешний адрес попадает в кнопку. Пустой — сообщение уйдёт без кнопки,
|
# Внешний адрес попадает в кнопку. Пустой — сообщение уйдёт без кнопки,
|
||||||
|
|
|
||||||
|
|
@ -10,16 +10,6 @@
|
||||||
# Telegram с Beget работает — проверено серией замеров 25.08: TLS-рукопожатие
|
# Telegram с Beget работает — проверено серией замеров 25.08: TLS-рукопожатие
|
||||||
# 18 из 20, getMe 4 из 4. Ломается только длинный long-poll (30 с), а отправка
|
# 18 из 20, getMe 4 из 4. Ломается только длинный long-poll (30 с), а отправка
|
||||||
# сообщения — короткий запрос.
|
# сообщения — короткий запрос.
|
||||||
#
|
|
||||||
# ПОЧЕМУ ДВЕ ТЕМЫ, А НЕ ОДНА (#3163). Форум держит тему «алерты» (158,
|
|
||||||
# клиентские инциденты МЕРЫ) и тему «метрики» (245, инфраструктурный шум —
|
|
||||||
# диск, память, просевший экспортер). Инфраструктурный шум и клиентский
|
|
||||||
# инцидент не равны по срочности, а смешанные в одной теме они обучают
|
|
||||||
# пролистывать обе. Поэтому `telegram` и `telegram-heartbeat` ниже адресуют
|
|
||||||
# ИНФРАСТРУКТУРНУЮ тему (`METRICS_TELEGRAM_INFRA_TOPIC_LINE`). Получателя
|
|
||||||
# `telegram-clients` в этом списке нет: он не шлёт в Telegram напрямую, а
|
|
||||||
# вебхуком уходит в alert-ack, и тему адресует сам, своей переменной
|
|
||||||
# METRICS_TELEGRAM_TOPIC_ID.
|
|
||||||
|
|
||||||
global:
|
global:
|
||||||
resolve_timeout: 5m
|
resolve_timeout: 5m
|
||||||
|
|
@ -81,7 +71,7 @@ receivers:
|
||||||
telegram_configs:
|
telegram_configs:
|
||||||
- bot_token: "${METRICS_TELEGRAM_BOT_TOKEN}"
|
- bot_token: "${METRICS_TELEGRAM_BOT_TOKEN}"
|
||||||
chat_id: ${METRICS_TELEGRAM_CHAT_ID}
|
chat_id: ${METRICS_TELEGRAM_CHAT_ID}
|
||||||
${METRICS_TELEGRAM_INFRA_TOPIC_LINE}
|
${METRICS_TELEGRAM_TOPIC_LINE}
|
||||||
api_url: "https://api.telegram.org"
|
api_url: "https://api.telegram.org"
|
||||||
parse_mode: HTML
|
parse_mode: HTML
|
||||||
send_resolved: true
|
send_resolved: true
|
||||||
|
|
@ -114,7 +104,7 @@ ${METRICS_TELEGRAM_INFRA_TOPIC_LINE}
|
||||||
telegram_configs:
|
telegram_configs:
|
||||||
- bot_token: "${METRICS_TELEGRAM_BOT_TOKEN}"
|
- bot_token: "${METRICS_TELEGRAM_BOT_TOKEN}"
|
||||||
chat_id: ${METRICS_TELEGRAM_CHAT_ID}
|
chat_id: ${METRICS_TELEGRAM_CHAT_ID}
|
||||||
${METRICS_TELEGRAM_INFRA_TOPIC_LINE}
|
${METRICS_TELEGRAM_TOPIC_LINE}
|
||||||
api_url: "https://api.telegram.org"
|
api_url: "https://api.telegram.org"
|
||||||
parse_mode: HTML
|
parse_mode: HTML
|
||||||
send_resolved: false
|
send_resolved: false
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue