Philip Wiki

Персональный wiki-сайт

Инструменты пользователя

Инструменты сайта


docs:zabbix:slack

Zabbix + Slack

Обзор

В дополнение к уже существующему варианту с pushbullet, приведу пример с отправкой сообщений в Slack.

Содержание

Скрипт накидал на скорую руку (при том, что я сейчас почти всё делаю на powershell, bash зашел с трудом) и сейчас нет времени его подробно рассписывать. На выходе получится что-то вроде этого:

  1. В Slack настраиваете интеграцию Incoming WebHooks и получаете специальную ссылку, которую нужно добавить в скрипт (в самом низу)
  2. Загрузите иконку с именем zabbix
  3. Скрипт ниже. Исправить под себя и положить в /usr/local/share/zabbix/alertscripts/ (разрешите выполнение)
  4. В самом Zabbix (подразумивается, что у вас 3 версия и выше)
    1. В действиях определяем
      1. Тему по умолчанию [{TRIGGER.STATUS}] {TRIGGER.NAME}
      2. Сообщение по умолчанию
        HOST: {HOST.NAME}
        TRIGGER_NAME: {TRIGGER.NAME}
        TRIGGER_STATUS: {TRIGGER.STATUS}
        TRIGGER_SEVERITY: {TRIGGER.SEVERITY}
        DATETIME: {DATE} / {TIME}
        ITEM_ID: {ITEM.ID1}
        ITEM_NAME: {ITEM.NAME1}
        ITEM_KEY: {ITEM.KEY1}
        ITEM_VALUE: {ITEM.VALUE1}
        EVENT_ID: {EVENT.ID}
        TRIGGER_URL: {TRIGGER.URL}
        TRIGGER_DESCRIPTION: {TRIGGER.DESCRIPTION}
    2. Делаем скрипт оповещения по официальной инструкции (и с параметрами из неё). После чего создаём пользователя (например Slack) и в вариантах оповещения выбираем новый скрипт, в поле отправлять куда пишем имя канала (например general, нез решетки). Всё.
#!/bin/bash
 
zabbix_baseurl="https://zabbix.example.com"
 
channel="$1"
icon=":zabbix:"
username="ZABBIX"
title="$2"
params="$3"
pretext="$4"
 
host="`echo \"${params}\" | grep 'HOST: ' | awk -F'HOST: ' '{print $2}' | tr -d '\r\n\'`"
trigger_name="`echo \"${params}\" | grep 'TRIGGER_NAME: ' | awk -F'TRIGGER_NAME: ' '{print $2}' | tr -d '\r\n\'`"
trigger_status="`echo \"${params}\" | grep 'TRIGGER_STATUS: ' | awk -F'TRIGGER_STATUS: ' '{print $2}' | tr -d '\r\n\'`"
severity="`echo \"${params}\" | grep 'TRIGGER_SEVERITY: ' | awk -F'TRIGGER_SEVERITY: ' '{print $2}' | tr -d '\r\n\'`"
trigger_url="`echo \"${params}\" | grep 'TRIGGER_URL: ' | awk -F'TRIGGER_URL: ' '{print $2}' | tr -d '\r\n\'`"
datetime="`echo \"${params}\" | grep 'DATETIME: ' | awk -F'DATETIME: ' '{print $2}' | tr -d '\r\n\'`"
item_value="`echo \"${params}\" | grep 'ITEM_VALUE: ' | awk -F'ITEM_VALUE: ' '{print $2}' | tr -d '\r\n\'`"
event_id="`echo \"${params}\" | grep 'EVENT_ID: ' | awk -F'EVENT_ID: ' '{print $2}' | tr -d '\r\n\'`"
item_id="`echo \"${params}\" | grep 'ITEM_ID: ' | awk -F'ITEM_ID: ' '{print $2}' | tr -d '\r\n\'`"
msg="`echo \"${params}\" | grep 'TRIGGER_DESCRIPTION: ' | awk -F'TRIGGER_DESCRIPTION: ' '{print $2}' | tr -d '\r\n\'`"
 
item_value='`'$item_value'`'
trigger_chart="${zabbix_baseurl}/history.php?action=showgraph&itemids=${item_id}"
 
if [[ "$severity" == 'Информация' ]]; then
	color='#7499FF'
elif [ "$severity" == 'Предупреждение' ]; then
	color='#FFC859'
elif [ "$severity" == 'Средняя' ]; then
        color='#FFA059'
elif [ "$severity" == 'Высокая' ]; then
        color='#E97659'
elif [ "$severity" == 'Чрезвычайная' ]; then
        color='#E45959'
else
	color='#97AAB3'
fi
 
if [[ "$trigger_status" == 'OK' ]]; then
        color='good'
fi
 
ts=$(date +%s)
 
request_body=$(< <(cat <<EOF
{
	"channel": "#$channel",
	"username": "$username",
	"icon_emoji": "$icon",
	"mrkdwn": true,
	"attachments": [
		{
			"fallback": "$title",
			"color": "$color",
			"pretext": "$pretext",
			"author_name": "$host",
			"author_link": "$trigger_chart",
			"author_icon": "https://cdn0.iconfinder.com/data/icons/free-misc-icon-set-2/512/graph_up_arrow-16.png",
			"title": "$title",
			"title_link": "$trigger_url",
			"text": "$msg",
			"fields": [
				{
					"title": "Важность",
					"value": "$severity",
					"short": true
				},
				{
					"title": "Значение",
					"value": "$item_value",
					"short": true
				}
			],
			/*"image_url": "http://www.zabbix.com/favicon.ico1",*/
			/*"thumb_url": "http://www.zabbix.com/favicon.ico1",*/
			"footer": "zabbix.kamov.ru",
			"footer_icon": "http://www.zabbix.com/favicon.ico",
			"ts": "$ts",
			"mrkdwn_in": [
				"test",
				"pretext",
				"fields"
			]
		}
	]
}
EOF
))
 
curl -X POST \
-H 'Content-type: application/json' \
--data "$request_body"  \
https://hooks.slack.com/TXXXXX/BXXXXX/XXXXXXXXXX
# поменяйте ссылку выше на свою!

Обсуждение

Владислав, 09.10.2017 17:57

Добрый день. Все сделал как в статье, но в slack поля важность и значение пустые, что еще надо настроить?

Philip, 09.10.2017 18:25

Ух. Я уже и забыл что и как делал. :-) Но похоже в статье я забыл упомянуть о том, что нужны дополнительные действия в «Действиях». А точнее определенный формат сообщения. Обновил пост, пункт 4а.

Владислав, 10.10.2017 13:21

Спасибо. Я вчера до ночи разгадывал передаваемые параметры :)

Загрузите иконку с именем zabbix - откуда и куда загрузить иконку?

Philip, 10.10.2017 13:35

Вам нужно загрузить рисунок размером не более 128х128, который будет отображаться при парсинге кода смайла :zabbix:. Делается это в Slack https:⁄⁄<ваш_url>.slack.com/customize/emoji

Только авторизованные участники могут оставлять комментарии.
docs/zabbix/slack.txt · Последнее изменение: 09.10.2017 18:23 — philip

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki