телеграм напрямую, без всяких ботов и экспортеров? Только с помощью опции "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)"
Есть у кого то рабочий пример?
Я делал через 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 - х.з.
Это вопрос не по боту и его командам, а по системе мониторинга
Я про бота слова не говорил. Я говорил, что бот в этом случае - лишняя точка отказа и просто костыль. Это решается без бота. Просто надо понять, какие шаблоны используем и как {{ $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 - х.з.
Да блин бота все равно надо создать, от имени кого в телегу отправляться будет сообщение?
Передается ботом просто текст
У меня уже отправляется сообщение в канал через этот метод. Зачем бот?
Почитай про вебхуки. Регистрируешь канал, подставляешь нужный текст в строку и на api.telegram.com заходишь и GET-от отправляются данные. Т.е. ты запросом страницы в веб-браузере или через curl, wget можешь отправлять текст в канал. От имени канала. Бот здесь - костыль
а токен чей используется?
В канал может постить либо юзер/юзербот, либо добавить бота с админскими правами, и постить сможет он, через TG bot api Так работает телега, где здесь костыль?
Я тоже так считал
Так в доках вам ссылку скидывали $labels.instance
1. В роли бота может выступать или алерт-менеджер, который напрямую апи телеги шлет POST-запрос. Это настраивается через telegram_configs. В параметрах указываем ID канала и токен бота. Но шлем без какой то дополнительной программы. Просто напрямую в телеграм-апи. 2. В роли бота может выступать или алерт-менеджер, который напрямую апи телеги шлет GET-запрос. Это настраивается через web_hook. В параметрах указываем ID канала и токен бота. Но шлем без какой то дополнительной программы. Просто напрямую в телеграм-апи. 3. А можно отправлять через какую-то программу посредник, которая выступает в качестве телеграм-бота. С этим разногласий нет? Меня интересуют первые 2 варианта
В прометее я указываю в правиле имя инстанса: # 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 }}
В телеге бот не обязательно программа, это сущность, которую можно добавить в чат, группу, канал и от имени чего можно посылать и принимать запросы Да, можно напрямую отправлять запрос в тг апи от имени бота, при этом бот нигде запускать не требуется
Я тоже шлю через curl, это тоже самое что вставить текст в адресную строку браузера. И пост и гет поддерживается
CommonAnnotations.description
Обсуждают сегодня