Zabbix alerts

Zabbix alert на телефон без отдельного Telegram-бота.

Nerve не заменяет Zabbix. Он закрывает последний метр: encrypted push на телефон с ограниченным sender credential.

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.

Когда это подходит

Что передавать из 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.