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 ответов

111 просмотров

Я делал через 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, это тоже самое что вставить текст в адресную строку браузера. И пост и гет поддерживается

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

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

Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
55
Привет, нужен совет старших товарищей. Есть глобальная переменная var DefaultDataFolder:string; инициализируем DefaultDataFolder:='a:\_OUT\'; есть примитивная процедур...
Max Otto
11
Вопрос. Теоретический. Есть список команд. Команды отправляю в обработку некой функции, по очереди. Разные команды могут давать разные результаты после обработки. В зависимос...
Serjone
7
Всем вечера. Подскажите как лучше сделать. делаю на Д10 Например будет база данных на SQLite. в ней будет много таблиц. более 50шт Типа справочник. Содержать ID Name Id p...
Андрей Т 🐎
10
А если для werf организовать отдельный репозиторий, а сервисы из проекта подключить как симлинки? И симлинки в гитигнор добавить?
Dmitriy Andreev
13
это группа токсиков или тех кто помогает?
Ибрагим
9
Всем здравствуйте!) У меня такой вопрос. Есть два роута, роут1 и роут2. Они связаны с очередью some_queue. По задаче предполагается, что есть два паблиша. Паблиш1 отправляет...
Format
10
Я короче решил скомпилировать Nim в js, я думал он сработает как обычный транслятор. По итогу он мне создал файл с расширением js, и туда поместил кучу кода Вопрос, что это з...
𝕾𝖍𝖆𝖉𝖊 <suspense>
8
мы пытаемся подменить функцию, которая имеет меньше инструкций относительно функции, которой подменяем. https://www.reddit.com/r/jailbreakdevelopers/comments/w06ujy/mshookfun...
Óðinn
6
У кого-нибудь есть под рукой функция кодирования юникода, которая из фразы На русском сделает \u041d\u0430\u0020\u0440\u0443\u0441\u0441\u043a\u043e\u043c ?
Daniil Smolyakov
7
Карта сайта