Запуск Продукты Bitnami Документацияimaxe CLI Блог Контакты
imaxe global-alerts оповещения v1.0.0

Одна точка, где слышно весь ваш парк машин

Публикует важные сообщения экземпляра —вторжения, заполненный диск, упавшую службу— в общую тему SNS. Оператор и остальные модули используют её как единый канал: порог важности, дедупликация и очередь повторов, если SNS не отвечает.

$ imaxe global-alerts send --severity critical "корневой диск на 95%"
Версия
v1.0.0
Подкоманды
8
Конфиг
/etc/imaxe/global-alerts.yml
Требуется root
да
Транспорт
Amazon SNS · роль IAM

Что делает этот модуль #

Экземпляру есть о чём рассказать: fail2ban забанил IP, aide заметил изменение системного файла, ночная резервная копия не удалась, корневой диск заполнен на 95 %. Если каждый модуль сообщает по-своему —письмо здесь, строка в логе там— никто ничего не узнаёт, а с десятью экземплярами проблема умножается на десять.

Модуль global-alerts — это центральная шина оповещений imaxe: одна команда, через которую проходят все эти сообщения, и одно место, куда они приходят, — тема Amazon SNS, общая для всего вашего парка машин. Оттуда SNS разносит как вам угодно: почта, SMS, функция Lambda, очередь SQS, ваша система дежурств. Публикация идёт через роль IAM экземпляра (право sns:Publish), так что хранить никаких учётных данных не нужно. И шум отсеивается до отправки: порог важности отбрасывает всё ниже интересующего вас уровня, а окно дедупликации не даёт одному и тому же оповещению разбудить вас сорок раз.

Если SNS недоступен —сеть упала, у роли ещё нет прав, регион недостижим— оповещение не теряется: оно ставится в очередь на диске, и таймер systemd повторяет попытку каждые 5 минут.

Прежде чем начать

Вам нужен ARN темы SNS (arn:aws:sns:регион:аккаунт:тема) и возможность экземпляра публиковать в неё. Если вы запускали AMI из лаунчера, шаблон CloudFormation уже создаёт тему, подписывает вашу почту, создаёт роль IAM с sns:Publish и передаёт ARN экземпляру тегом: модуль настраивается сам и здесь делать нечего.

Быстрый стартзадачи по шагам

Типичные задачи #

Выберите, что нужно сделать. В каждом рецепте команда уже написана — подставьте свои ARN и текст и нажмите Копировать.

1

Указать тему SNS

Скажите экземпляру, куда публиковать свои сообщения.

Подключитесь к серверу по SSH пользователем ubuntu.

Направьте модуль на ARN вашей темы. Регион выводится из самого ARN, так что обычно указывать её не нужно:

терминал
$ sudo imaxe global-alerts configure \
    --topic-arn arn:aws:sns:eu-west-1:123456789012:imaxe-alerts

Несколько экземпляров публикуют в одну тему? Дайте каждому узнаваемую метку источника через --source (по умолчанию используется hostname):

терминал
$ sudo imaxe global-alerts configure --source web-prod-1
Настройка остаётся в /etc/imaxe/global-alerts.yml, отправка включена. Переходите к рецепту Отправить тестовое оповещение.
2

Отправить тестовое оповещение

Убедитесь, что роль IAM действительно публикует, прежде чем доверять каналу.

Опубликуйте тестовое оповещение в настроенную тему:

терминал
$ sudo imaxe global-alerts test

Тест обходит порог и дедупликацию —он уходит всегда— и, если что-то не так, возвращает вам настоящую ошибку AWS вместо тихой постановки в очередь. Проверьте почтовый ящик адреса, подписанного на тему (и папку со спамом).

Если вы видите MessageId и сообщение приходит, канал работает. Если появляется AuthorizationError, экземпляру не хватает права sns:Publish на эту тему.
3

Отправить оповещение из скрипта

Тот же канал, которым пользуются модули, доступен и для ваших задач.

Оповещение со своей важностью и источником:

терминал
$ sudo imaxe global-alerts send --severity critical \
    --source backup --subject "резервная копия не удалась" \
    "ночная резервная копия базы данных завершилась с ошибкой"

Если текст выдаёт другая команда, передайте его через stdin, указав - вместо сообщения:

терминал
$ df -h / | sudo imaxe global-alerts send --severity warning -

Для того, что запускается каждые несколько минут, задайте устойчивый ключ дедупликации: в пределах настроенного окна уйдёт только первое:

терминал
$ sudo imaxe global-alerts send --severity warning \
    --dedup-key root-disk-full "корневой диск на 95%"
Оповещение уходит в тему как JSON, с уже подставленными экземпляром, регионом и меткой времени. Без --dedup-key модуль выводит ключ из источника + важности + темы сообщения.
4

Посмотреть состояние шины

Тема, регион, AWS CLI и ожидающие оповещения — одним взглядом.

Сводка текущего состояния:

терминал
$ sudo imaxe global-alerts status

Чтобы проверить, какая конфигурация действует на самом деле —включая ту, что приходит тегами экземпляра и имеет приоритет над файлом—:

терминал
$ sudo imaxe global-alerts show
$ sudo imaxe global-alerts status --json
Вы узнаете, настроена ли тема, в каком регионе идёт публикация и сколько оповещений ждёт в очереди. С --json — готово для панели или скрипта.
5

Убавить шум

Поднимите порог важности и расширьте окно дедупликации.

Если хотите знать только о важном, отбрасывайте всё ниже warning:

терминал
$ sudo imaxe global-alerts configure --min-severity warning

У окна дедупликации нет флага: оно настраивается в файле конфигурации. Увеличьте его, если одно и то же оповещение повторяется часто:

/etc/imaxe/global-alerts.yml
dedup_window: 1h   # 30s, 5m, 1h… (по умолчанию 5m)
Оповещения ниже порога отбрасываются до отправки (в очередь не попадают), а повторы внутри окна подавляются. test публикует всегда, так что способ проверить канал у вас остаётся.
6

Посмотреть очередь и повторить

Что осталось, когда SNS не ответил, и как заставить отправить.

Посмотрите, что ожидает, и последние отправленные ключи:

терминал
$ sudo imaxe global-alerts history

Повтор и так делает таймер systemd каждые 5 минут, но его можно запустить вручную, починив права или сеть:

терминал
$ sudo imaxe global-alerts flush
$ systemctl status imaxe-global-alerts-flush.timer
Вы увидите, сколько ушло и сколько ещё ждёт. Если первое снова не удалось, проход останавливается на нём и оставляет остальное до следующей попытки: ничего не выбрасывается.
7

Заглушить модуль

Перестать публиковать, не теряя настройки.

Отключите отправку оповещений и уберите таймер повторов:

терминал
$ sudo imaxe global-alerts remove

Тема, регион и остальные настройки сохраняются в файле: чтобы включить обратно, достаточно configure, он снова активирует модуль.

Экземпляр перестаёт публиковать. Последующие send не падают: они сообщают в stderr, что модуль отключён, и завершаются с кодом 0.
Без роли IAM оповещений не будет

Модуль публикует с учётными данными роли экземпляра, а не с сохранёнными ключами. Если роль не разрешает sns:Publish на эту тему, оповещения будут копиться в очереди одно за другим и никогда не дойдут. imaxe global-alerts test скажет об этом сразу, с ошибкой ровно в том виде, в каком её возвращает AWS.

Справочник CLIкоманды, флаги и файлы

Синопсис #

использование
imaxe global-alerts <подкоманда> [--topic-arn ARN] [--severity УРОВЕНЬ] [флаги]

Все подкоманды требуют прав root (используйте sudo), потому что пишут в /etc/imaxe/, хранят состояние в /var/lib/imaxe/ и управляют юнитом systemd. Секретов держать не нужно: публикация идёт через роль IAM экземпляра. Добавьте --json к status, show, history или flush, чтобы получить машиночитаемый вывод.

Подкоманды #

ПодкомандаЧто делаетЗначимые флаги
statusСостояние: настроенная тема, действующий регион, доступность AWS CLI и оповещения в очереди.--json
configureЗадаёт тему SNS и параметры отправки. Снова включает модуль, если он был отключён.--topic-arn, --region, --source, --min-severity
sendПубликует оповещение. Это канал, которым пользуются оператор и остальные модули.--severity, --source, --subject, --dedup-key
testПубликует тестовое оповещение в обход порога и дедупликации и сообщает настоящую ошибку при сбое.--severity
showПоказывает действующую конфигурацию (файл + уже применённые теги экземпляра).--json
historyОжидающие оповещения в очереди и недавно отправленные ключи дедупликации.--json
flushПовторяет отправку оповещений из очереди. То же делает и таймер systemd.--json
removeОтключает отправку и убирает таймер. Конфигурацию сохраняет.

Аргументы и флаги #

ФлагТипПо умолчаниюОписание
--topic-arn обяз.stringARN целевой темы SNS (arn:aws:sns:регион:аккаунт:тема). Без него модуль не может публиковать.
--regionstringиз ARNРегион AWS. Если не указан, выводится из ARN темы; если и там нет — из IMDS или AWS_REGION.
--sourcestringhostnameМетка источника. В configure — метка экземпляра; в send — метка конкретного оповещения (например, модуля, который его шлёт).
--min-severitystringinfoПорог: отбрасывает оповещения ниже этого уровня. Значения: info, warning, critical.
--severitystringinfoВ send/test: уровень этого оповещения. Принимаются короткие формы warn и crit.
--subjectstringиз сообщенияКороткая тема. Если не указана, выводится из самого сообщения.
--dedup-keystringвычисляетсяКлюч дедупликации: подавляет повторы в пределах dedup_window. По умолчанию считается из источника + важности + темы.
<сообщение> обяз.позиционныйВ send: текст оповещения, или -, чтобы прочитать его из stdin.
--jsonboolfalseВ status, show, history и flush выводит результат как JSON в stdout.
Отбросить — не значит упасть

Когда оповещение отбрасывается —модуль отключён, важность ниже порога или дубль внутри окна— send объясняет это в stderr и завершается с кодом 0. Так скрипт, который его отправил, не ломается из-за фильтра, который вы сами и настроили.

Настройка через теги экземпляра #

Каждому развёртыванию нужна своя тема, и пересобирать ради этого AMI не имело бы смысла. Поэтому модуль читает, помимо файла, теги экземпляра с префиксом imaxe.global-alerts. через IMDSv2: если они есть, они важнее YAML. Именно так делает шаблон CloudFormation из лаунчера, который вдобавок требует MetadataOptions.InstanceMetadataTags: enabled, чтобы теги можно было прочитать.

ТегСоответствуетЗначения
imaxe.global-alerts.topic_arntopic_arnARN целевой темы SNS.
imaxe.global-alerts.regionregionРегион AWS; пусто = выводится из ARN или из IMDS.
imaxe.global-alerts.sourcesourceМетка источника; пусто = hostname.
imaxe.global-alerts.min_severitymin_severityinfo · warning · critical
imaxe.global-alerts.dedup_windowdedup_windowДлительность: 30s, 5m, 1h
imaxe.global-alerts.enabledenabledtrue/false (также 1/0, yes/no, on/off).

Вне AWS или при заблокированном IMDS чтение падает за миллисекунды, и модуль продолжает с тем, что сказано в файле. Чтобы увидеть, что действительно применилось, — imaxe global-alerts show.

Файлы и пути #

ПутьСодержимое
/etc/imaxe/global-alerts.ymlКонфигурация модуля: тема, регион, источник, порог и окно дедупликации.
/var/lib/imaxe/state/global-alerts/spool/Очередь ожидающих оповещений, по одному в файле .json, в хронологическом порядке.
/var/lib/imaxe/state/global-alerts/sent.jsonЖурнал ключей дедупликации со временем последней отправки.
/etc/systemd/system/imaxe-global-alerts-flush.timerТаймер повторов: стартует через 2 мин после загрузки и повторяется каждые 5 мин.

Пример global-alerts.yml:

/etc/imaxe/global-alerts.yml
enabled: true
topic_arn: arn:aws:sns:eu-west-1:123456789012:imaxe-alerts
region: ""            # пусто = выводится из ARN или из IMDS
source: ""            # пусто = hostname экземпляра
min_severity: info
dedup_window: 5m

Состояние (очередь и журнал дедупликации) намеренно лежит в /var/lib/imaxe/, а не в /etc/: это состояние, а не конфигурация. Оба пути можно перенести переменными окружения IMAXE_CONFIG_DIR и IMAXE_STATE_DIR.

Формат оповещения #

Тело сообщения SNS — версионированный JSON (schema: 1), чтобы подписчик мог обработать его Lambda-функцией или очередью, а не только прочитать почтой:

тело сообщения
{
  "schema": 1,
  "severity": "critical",
  "source": "backup",
  "subject": "резервная копия не удалась",
  "message": "ночная резервная копия базы данных завершилась с ошибкой",
  "host": "web-prod-1",
  "instance_id": "i-0abc123def4567890",
  "region": "eu-west-1",
  "ts": "2026-07-25T03:14:07Z",
  "dedup_key": "9f2c1b7e44a0d513"
}

Тема сообщения SNS собирается как [imaxe][важность] host: тема, приводится к печатному ASCII и обрезается до 100 символов — это ограничение SNS.

Коды возврата и логи #

Каждый запуск возвращает код, который можно проверить через echo $? — удобно для цепочек в скриптах:

0OKОперация выполнена. В том числе когда оповещение намеренно отброшено или поставлено в очередь.
1ERRОбщая ошибка: тест не удалось опубликовать, либо не удалось ни опубликовать, ни поставить в очередь.
2USAGEНеверные аргументы: неизвестный флаг, нет сообщения или недопустимая важность.
64NO TOPICТема SNS не настроена ни файлом, ни тегом.

Модуль также отвечает на проверку здоровья imaxe: если он включён, но темы нет, health падает, так что imaxe health выдаст это раньше, чем понадобится первое оповещение.

терминал
$ sudo imaxe global-alerts test; echo "код: $?"
$ journalctl -u imaxe-global-alerts-flush.service -n 50

Решение проблем #

СимптомВероятная причинаРешение
Выходит NO TOPIC (код 64)Ни файл, ни теги не дают ARN темы.Запустите configure --topic-arn … или проверьте, что у экземпляра есть тег imaxe.global-alerts.topic_arn и теги включены в метаданных.
«SNS недоступен; оповещение в очереди» снова и сноваРоли экземпляра не хватает sns:Publish на эту тему, или ARN из другого аккаунта либо региона.Запустите test, чтобы увидеть точную ошибку AWS, поправьте политику роли и затем flush.
«AWS CLI доступен: false» в statusНа экземпляре не установлен AWS CLI; модуль публикует через него.Установите AWS CLI. В AMI imaxe он идёт из коробки; на своём хосте его надо добавить.
Вы что-то настраиваете, а show продолжает показывать другое значениеТег imaxe.global-alerts.* перекрывает файл: так задумано, у него приоритет.Меняйте тег экземпляра (или параметр стека CloudFormation), а не YAML.
Из нескольких одинаковых оповещений приходит только первоеИх подавляет окно дедупликации.Так и должно быть. Уменьшите dedup_window или используйте разные --dedup-key, если это действительно разные события.
Ничего не приходит и ошибок нетМодуль отключён, или важность ниже min_severity.show покажет enabled и порог; configure снова включит отправку.
Оповещения публикуются, но не доходят по почтеПодписка на тему SNS не подтверждена.Найдите письмо-подтверждение от AWS (проверьте спам) и примите подписку в консоли SNS.

Застряли с модулем Оповещения?

Напишите нам, приложив вывод «imaxe <module> status --json», и мы быстро ответим.

Связаться с поддержкой