Что делает этот модуль #
Экземпляру есть о чём рассказать: 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%"--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У окна дедупликации нет флага: оно настраивается в файле конфигурации. Увеличьте его, если одно и то же оповещение повторяется часто:
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.timer7
Заглушить модуль
Перестать публиковать, не теряя настройки.
Отключите отправку оповещений и уберите таймер повторов:
$ sudo imaxe global-alerts removeТема, регион и остальные настройки сохраняются в файле: чтобы включить обратно, достаточно configure, он снова активирует модуль.
send не падают: они сообщают в stderr, что модуль отключён, и завершаются с кодом 0.Модуль публикует с учётными данными роли экземпляра, а не с сохранёнными ключами. Если роль не разрешает sns:Publish на эту тему, оповещения будут копиться в очереди одно за другим и никогда не дойдут. imaxe global-alerts test скажет об этом сразу, с ошибкой ровно в том виде, в каком её возвращает AWS.
Синопсис #
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 обяз. | string | — | ARN целевой темы SNS (arn:aws:sns:регион:аккаунт:тема). Без него модуль не может публиковать. |
| --region | string | из ARN | Регион AWS. Если не указан, выводится из ARN темы; если и там нет — из IMDS или AWS_REGION. |
| --source | string | hostname | Метка источника. В configure — метка экземпляра; в send — метка конкретного оповещения (например, модуля, который его шлёт). |
| --min-severity | string | info | Порог: отбрасывает оповещения ниже этого уровня. Значения: info, warning, critical. |
| --severity | string | info | В send/test: уровень этого оповещения. Принимаются короткие формы warn и crit. |
| --subject | string | из сообщения | Короткая тема. Если не указана, выводится из самого сообщения. |
| --dedup-key | string | вычисляется | Ключ дедупликации: подавляет повторы в пределах dedup_window. По умолчанию считается из источника + важности + темы. |
| <сообщение> обяз. | позиционный | — | В send: текст оповещения, или -, чтобы прочитать его из stdin. |
| --json | bool | false | В status, show, history и flush выводит результат как JSON в stdout. |
Когда оповещение отбрасывается —модуль отключён, важность ниже порога или дубль внутри окна— send объясняет это в stderr и завершается с кодом 0. Так скрипт, который его отправил, не ломается из-за фильтра, который вы сами и настроили.
Настройка через теги экземпляра #
Каждому развёртыванию нужна своя тема, и пересобирать ради этого AMI не имело бы смысла. Поэтому модуль читает, помимо файла, теги экземпляра с префиксом imaxe.global-alerts. через IMDSv2: если они есть, они важнее YAML. Именно так делает шаблон CloudFormation из лаунчера, который вдобавок требует MetadataOptions.InstanceMetadataTags: enabled, чтобы теги можно было прочитать.
| Тег | Соответствует | Значения |
|---|---|---|
| imaxe.global-alerts.topic_arn | topic_arn | ARN целевой темы SNS. |
| imaxe.global-alerts.region | region | Регион AWS; пусто = выводится из ARN или из IMDS. |
| imaxe.global-alerts.source | source | Метка источника; пусто = hostname. |
| imaxe.global-alerts.min_severity | min_severity | info · warning · critical |
| imaxe.global-alerts.dedup_window | dedup_window | Длительность: 30s, 5m, 1h… |
| imaxe.global-alerts.enabled | enabled | true/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:
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 $? — удобно для цепочек в скриптах:
Модуль также отвечает на проверку здоровья 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», и мы быстро ответим.