Media script idea
#!/usr/bin/env bash
set -euo pipefail
export NERVE_DSN="nerve://TOKEN:[email protected]"
printf '%s\n%s\n' "$1" "$2" | nerve send --severity alert
В Zabbix action передайте subject и message в script. На стороне Nerve sender DSN остается send-only: он не дает читать историю и не подключает agent.
Когда это подходит
- маленькая инфраструктура без отдельного on-call стека
- нужен быстрый encrypted push на телефон
- Telegram-бот нежелателен как ops-зависимость
Что передавать из Zabbix
В media script лучше передавать не весь event dump, а короткий набор полей. Так уведомление читается на lock screen и не утекают лишние internal labels.
Subject:
{TRIGGER.STATUS}: {TRIGGER.NAME}
Message:
host={HOST.NAME}
severity={TRIGGER.SEVERITY}
time={EVENT.DATE} {EVENT.TIME}
value={ITEM.LASTVALUE}
event={EVENT.ID}
Recovery notification
Для важных trigger-ов включите отдельное recovery-сообщение. Оно снимает тревогу без захода в dashboard.
printf 'RECOVERED: %s\nhost=%s\nvalue=%s\n' \
"$TRIGGER_NAME" "$HOST_NAME" "$ITEM_VALUE" \
| nerve send --severity standard
Когда оставить Telegram
Если Zabbix alert требует командного обсуждения, Telegram-чат все еще полезен. Nerve лучше использовать для личного encrypted signal на телефон, а не как замену всем командным процессам.
Severity mapping
Не все Zabbix trigger-ы должны будить телефон одинаково. Information и Warning можно оставить в dashboard, Average отправлять как alert, High/Disaster — как critical.
case "$TRIGGER_SEVERITY" in
Disaster|High) SEVERITY="critical" ;;
Average) SEVERITY="alert" ;;
*) SEVERITY="standard" ;;
esac
printf '%s\n%s\n' "$SUBJECT" "$MESSAGE" | nerve send --severity "$SEVERITY"
Проверка media script
Перед production action запустите script вручную от того же пользователя, под которым работает Zabbix server. Частые проблемы: нет PATH до nerve, DSN не передан в environment, script не executable.