172 похожих чатов

Привет всем! Скажите, а кто-нибудь настраивал отправку алертов из alertmanager в

телеграм напрямую, без всяких ботов и экспортеров? Только с помощью опции "telegram_config"?
Я создал правило, прикрутил отправителя
telegram_configs:
- bot_token: '<bot_token>'
api_url: 'https://api.telegram.org/bot<bot_token>/sendMessage'
chat_id: <chat_id>
message: 'Nginx has been down for more than 5 minutes.'

Отправка не происходит, в логах:
ts=2022-03-31T16:58:34.223Z caller=notify.go:732 level=warn component=dispatcher receiver=web.hook integration=telegram[0] msg="Notify attempt failed, will retry later" attempts=1 err="telegram: Not Found (404)"

ts=2022-03-31T17:01:34.149Z caller=dispatch.go:354 level=error component=dispatcher msg="Notify for alerts failed" num_alerts=21 err="web.hook/telegram[0]: notify retry canceled after 15 attempts: telegram: Not Found (404)"

ts=2022-03-31T17:01:34.223Z caller=notify.go:732 level=warn component=dispatcher receiver=web.hook integration=telegram[0] msg="Notify attempt failed, will retry later" attempts=1 err="telegram: Not Found (404)"

Есть у кого то рабочий пример?

18 ответов

181 просмотр

Я делал через curl все получилось. Бота надо все равно создать предварительно

Дааа, но нет. 1. Регистрируешь канал 2. Получаешь ID и токен 3. Настраиваешь метод типа такого: telegram_configs: - bot_token: '<bot_token>' api_url: 'https://api.telegram.org' chat_id: <chat_id> message: 'Alertname: {{ .GroupLabels.alertname }} Severity: {{ .CommonLabels.severity }} Nginx down {{ .CommonLabels }} ' Вопрос на миллион: как увидеть список доступных значений для шаблонов? Все вот эти {{ .GroupLabels.alertname }} и {{ .CommonLabels.severity }}? В примерах шаблонов вижу разные конструкции - часть работает, часть не работает. Как вставить instance, description, summary, annotation - х.з.

Сергей Вышегородский
Дааа, но нет. 1. Регистрируешь канал 2. Получаешь...

Это вопрос не по боту и его командам, а по системе мониторинга

Evgeniy
Это вопрос не по боту и его командам, а по системе...

Я про бота слова не говорил. Я говорил, что бот в этом случае - лишняя точка отказа и просто костыль. Это решается без бота. Просто надо понять, какие шаблоны используем и как {{ $labels.instance }} из прометея передать в алертменеджер

1. Да. 2. Без бота, используя нативный метод telegram_configs: - bot_token: '<bot_token>' api_url: 'https://api.telegram.org' chat_id: <chat_id> message: 'Alertname: {{ .GroupLabels.alertname }} Severity: {{ .CommonLabels.severity }} Nginx down {{ .CommonLabels }} ' Только как передать instance, description, annotation, summary - х.з.

Сергей Вышегородский
1. Да. 2. Без бота, используя нативный метод tele...

Да блин бота все равно надо создать, от имени кого в телегу отправляться будет сообщение?

Evgeniy
Да блин бота все равно надо создать, от имени кого...

У меня уже отправляется сообщение в канал через этот метод. Зачем бот?

Почитай про вебхуки. Регистрируешь канал, подставляешь нужный текст в строку и на api.telegram.com заходишь и GET-от отправляются данные. Т.е. ты запросом страницы в веб-браузере или через curl, wget можешь отправлять текст в канал. От имени канала. Бот здесь - костыль

В канал может постить либо юзер/юзербот, либо добавить бота с админскими правами, и постить сможет он, через TG bot api Так работает телега, где здесь костыль?

Так в доках вам ссылку скидывали $labels.instance

1. В роли бота может выступать или алерт-менеджер, который напрямую апи телеги шлет POST-запрос. Это настраивается через telegram_configs. В параметрах указываем ID канала и токен бота. Но шлем без какой то дополнительной программы. Просто напрямую в телеграм-апи. 2. В роли бота может выступать или алерт-менеджер, который напрямую апи телеги шлет GET-запрос. Это настраивается через web_hook. В параметрах указываем ID канала и токен бота. Но шлем без какой то дополнительной программы. Просто напрямую в телеграм-апи. 3. А можно отправлять через какую-то программу посредник, которая выступает в качестве телеграм-бота. С этим разногласий нет? Меня интересуют первые 2 варианта

Artem Soroka
Так в доках вам ссылку скидывали $labels.instance

В прометее я указываю в правиле имя инстанса: # cat alert.rules.yml groups: - name: alert.rules rules: - alert: InstanceDown expr: up == 0 for: 1m labels: severity: critical annotations: summary: "Consul service healthcheck failed" description: "Consul service healthcheck failed (env: {{ $labels.env }}, instance: {{ $labels.instance }})\nService: {{ $labels.service_name }} Healthcheck: {{ $labels.service_id }}" Имя инстанса у меня оказывается в annotations - description А теперь вопрос на миллион: как этот annotations - description вставить в message: в alertmanager-е? Я пробую message: "Alertname: {{ .GroupLabels.alertname }} {{ .Annotations.description }} Severity: {{ .CommonLabels.severity }} " Все выводит кроме {{ .Annotations.description }}

Сергей Вышегородский
1. В роли бота может выступать или алерт-менеджер,...

В телеге бот не обязательно программа, это сущность, которую можно добавить в чат, группу, канал и от имени чего можно посылать и принимать запросы Да, можно напрямую отправлять запрос в тг апи от имени бота, при этом бот нигде запускать не требуется

Сергей Вышегородский
1. В роли бота может выступать или алерт-менеджер,...

Я тоже шлю через curl, это тоже самое что вставить текст в адресную строку браузера. И пост и гет поддерживается

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта