Системное администрирование linux

Действие

Итак, Имя — названия действия Тема по умолчанию *{HOST.NAME1} — *`{TRIGGER.STATUS}`* — {EVENT.DATE} — {EVENT.TIME}* Сообщение по умолчанию {TRIGGER.NAME}

Если Вам нужно сообщение о восстановлении, то ставим галочку и заполняем поля аналогично

На вкладке Условия добавляем какие душе угодно зависимости: узлы/группы/шаблоны, важность триггеров, время и прочее.. На вкладке Операции добавляем операцию с шагом от 1 к 1, добавляем группы пользователей или пользователей, которым нужно отправлять сообщение (ну и вообще для которых это действие будет работать), выбираем способ оповещения в Отправлять только через

Обновляем, добавляем, сохраняем.

На вкладке Операции добавляем операцию с шагом от 1 к 1, добавляем группы пользователей или пользователей, которым нужно отправлять сообщение (ну и вообще для которых это действие будет работать), выбираем способ оповещения в Отправлять только через. Обновляем, добавляем, сохраняем.

Отправка уведомлений из Zabbix в Telegram

Как то я подумал о том, что было бы неплохо отправлять уведомления не на почту, а в TelegramХотелось получить что то интереснее, чем спам-рассылка по поводу и без повода. Telegram крут ещё и своими групповыми чатами (в том числе и приватными)

Установка каких либо дополнительных программ и библиотек меня вообще не впечатлила. Да и зачем всё это если можно использовать Telegram-бота и отправлять сообщения простым запросом

Первый шагНеобходимо создать бота в Telegram. Для этого нужно добавить в список контактов бота @BotFather, сказать ему /start и /newbot BotFather сперва спросит как назвать нового бота, а потом какое имя ему присвоить. В ответном сообщении вы получите всю необходимую информацию для его использования

Вы можете создать своего бота, а можете использовать моего Познакомьтесь,

его зовут @TradeNarK_ZabbixBot

его токен 256070243:SHAAHonjepm7mzR6doFLgSNAbKg3BNJzQQm Этого бота необходимо добавить либо к себе в список контактов либо в тот чат, куда вы планируете получать уведомления.

Эта информация нам пригодится немного позже.

Второй шаг Для того что бы отправить сообщение себе или в чат необходимо знать ID чата или контакта Сразу замечу, что по ID можно определить пользователь это или чат — ID чата начинается со знака «-» (минус)

Мой список контактовЧат для уведомленийКак и говорилось выше ID группы начинается со знака минус

Третий шагДля отправки сообщения достаточно выполнить зарос

# curl –header ‘Content-Type: application/json’ –request ‘POST’ –data ‘{“chat_id”:”_ID_”,”text”:”_MESSAGE_”}’ “https://api.telegram.org/bot_TOKEN_/sendMessage”

где _ID_ — ID чата или контакта полученный на втором шаге; _MESSAGE_ — текст сообщения;

_TOKEN_ — токен бота полученный на первом шаге;

Запрос приобретает вид:

# curl –header ‘Content-Type: application/json’ –request ‘POST’ –data ‘{“chat_id”:”1111111″,”text”:”test message for blog https://tradenark.com.ua here”}’ “https://api.telegram.org/bot256070243:SHAAHonjepm7mzR6doFLgSNAbKg3BNJzQQm/sendMessage”

и бот присылает сообщениеУбедившись что вся эта кухня работает нужно написать скрипт который поможет нам в отправке.

Смотрим дефолтное расположение скриптов для отправки

# grep -i AlertScriptsPath /etc/zabbix/zabbix_server.conf | grep -v ^# AlertScriptsPath=/usr/lib/zabbix/alertscripts

Теперь создаём скрипт в этой папке с таким содержимым:

# cat /usr/lib/zabbix/alertscripts/telegram_bot.sh #!/bin/bash TOKEN=’256070243:SHAAHonjepm7mzR6doFLgSNAbKg3BNJzQQm’ if ; then echo ‘Error! You must to define three params’ && exit 1 ; fi CHAT_ID=”$1″ SUBJECT=”$2″ MESSAGE=”$3″ # Определяем emoji для темы сообщения if ] then ICON=”uD83DuDE31″ elif ] then ICON=”uD83DuDC4C” else ICON=”u26A0″ fi curl -s –header ‘Content-Type: application/json’ –request ‘POST’ –data “{“chat_id”:”${CHAT_ID}”,”text”:”$ICON ${SUBJECT} ${MESSAGE}”}” “https://api.telegram.org/bot${TOKEN}/sendMessage” | grep -q ‘”ok”:false,’

Тут я добавил немного «развлекухи». В зависимости от темы бот будет добавлять смайлик. Как оказалось это одна из самых сложных задач. По той причине что вместо смайликов отображался текст / чистый кодРешение всё же нашлось. Для этого необходимо выбрать смайлик и определить его Unicode-формат. К примеру для обычного улыбающегося смайлика

Оповещения в telegram со ссылками на график и триггер

Расскажу про еще один интересный скрипт для отправки красивых и функциональных оповещений в telegram, в котором помимо всего прочего сразу же публикуются ссылки на триггер, график и некоторые другие полезности. Вот он на гитхабе — https://github.com/xxsokolov/Zabbix-Notification-Telegram. Инструкция от автора в некоторых местах не очень понятная, так что я немного повозился, прежде чем все получилось. В основном c xml были проблемы, но обо всем по порядку.

Клонируем к себе репозиторий.

# cd ~
# git clone https://github.com/xxsokolov/Zabbix-Notification-Telegram

Копируем в /usr/lib/zabbix/alertscripts папку zbxTelegram_files и файлы _config.yml, zbxTelegram.py, .requirements и zbxTelegram_config.example.py. Последний переименовываем в zbxTelegram_config.py.

Делаем пользователя zabbix владельцем этих файлов и разрешаем исполнение скрипта.

# chown -R zabbix. /usr/lib/zabbix/alertscripts
# chmod +x zbxTelegram.py

Автор скрипта предлагает запускать его в виртуальном окружении, поэтому поставим пакет virtualenv.

# dnf install virtualenv

Переходим в /usr/lib/zabbix/alertscripts, создаем виртуальное окружение и активируем его.

# cd /usr/lib/zabbix/alertscripts
# virtualenv venv --python=python3
# source venv/bin/activate

Ставим зависимости и деактивируем окружение.

# pip install -r .requirements
# deactivate

Редактируем конфигурационный файл zbxTelegram_config.py. Список параметров, которые нужно поменять.

tg_proxy = False
tg_token = '1393668911:AFGHTRDVdfJ28R-wxKfvH1RTR6-vdNw'
zabbix_api_url = 'http://10.20.1.23/zabbix/'
zabbix_api_login = 'Admin'
zabbix_api_pass = 'zabbix'

В url на конце должен обязательно быть слеш. Дальше делаем все то же самое, что и ранее. Идем в Способы оповещений и добавляем новый тип, где в качестве скрипта указываем zbxTelegram.py.

Шаблоны тем сообщений можете настроить как вам больше нравится. Автор предлагает такие:

{Problem} {TRIGGER.SEVERITY} `TRIGGER`.`SEVERITY`: {EVENT.NAME}
{Resolved} {TRIGGER.SEVERITY} `TRIGGER`.`SEVERITY` {EVENT.NAME}
{Update} {TRIGGER.SEVERITY} `TRIGGER`.`SEVERITY` {EVENT.NAME}
  • {Problem} — мапинг значений Problem\Resolved\Update в emoji (config: zabbix_status_emoji_map)
  • `TRIGGER`.`SEVERITY` — мапинг значений Severity в emoji (config: zabbix_status_emoji_map)

В поле Сообщение копируется xml конфиг полностью, который приведен в файле actions.example. Копируйте его 1 в 1.

Во все шаблоны можете его вставить без изменений. Я немного попытался его править, но каждый раз потом получал ошибку парсинга xml. В итоге бросил. Автор перечисляет значение каждого парметра, так что можете попытаться настроишь шаблоны на свой вкус.

  • <graphs></graphs> — прикреплять график (True\False)
  • <graphlinks>True</graphlinks> — прикрепить ссылку url на History (True\False)
  • <triggerlinks>True</triggerlinks> — прикрепить ссылку url из триггера (True\False)
  • <tag>True</tag> — прикрепить теги (True\False)
  • <graphs_period></graphs_period> — период графика в секундах
  • <itemid></itemid> — передача itemid {ITEM.ID1}
  • <triggerid></triggerid> — передача triggerid {TRIGGER.ID}
  • <eventid></eventid>- передача eventid {EVENT.ID}
  • <title></title> — заголовок графика {HOST.HOST} — {EVENT.NAME}
  • <triggerurl></triggerurl> — передача url из триггера {TRIGGER.URL}
  • <tags></tags> — передача списка тэгов из триггера {EVENT.TAGS}

Проверим работу уведомлений. Сначала через консоль.

# ./zbxTelegram.py @serveradmin_zabbix_group test test

В данном случае слова test менять нельзя. Именно они инициируют отправку тестового сообщения. Вот как оно выглядит.

То же самое можно сделать через web интерфейс.

Если все в порядке, подключайте данный тип уведомлений к пользователю, указывайте его в действиях и проверяйте. Уже не буду это подробоно описывать, так как устал. Материал и так очень объемный получился. В итоге уведомления в телеграме от этого скрипта будут выглядеть вот так:

Текст более информативен по дефолту и выглядит приятнее, графики в одном сообщении с текстом. В последней строке есть готовые ссылки на триггер, историю по итему. Только имейте ввиду, что url для ссылок берется из конфига и если у вас там указан localhost, то только с него и можно будет их посмотреть. Так что указывайте внешний, а не локальный url. Из минусов отмечу тоненькие графики без заливки. В скрипте от ableev они более наглядные.

Настройка уведомлений Zabbix через Telegram

Для настройки будем использовать сервер Zabbix3.2 установленный на CentOs7 и проект «Telegram messenger CLI».

Ставим git

sudo yum install git

Клонируем «Telegram messenger CLI» с github

git clone —recursive https://github.com/vysheng/tg.git

переходим в директорию tg

cd tg

Ставим необходимые зависимости для сборки пакета

sudo yum install gcc libevent-devel openssl-devel \

readline-devel libconfig-devel lua-devel jansson-devel

Собираем telegram-cli

./configure

sudo make

Произведем настройку пользователся Telegram из под которого будем осущевствлять отправку уведомлений.

bin/telegram-cli -k tg-server.pub -W

Telegram-cli version 1.4.1, Copyright (C) 2013-2015 Vitaly Valtman
Telegram-cli comes with ABSOLUTELY NO WARRANTY; for details type `show_license".
This is free software, and you are welcome to redistribute it
under certain conditions; type `show_license" for details.
Telegram-cli uses libtgl version 2.1.0
Telegram-cli includes software developed by the OpenSSL Project
for use in the OpenSSL Toolkit. (http://www.openssl.org/)
I: config dir=[/root/.telegram-cli]
phone number: +7**********
code ("CALL" for phone number): ****
>

Указываем номер телефона для регистрации учетной записи в телеграм и вводим код подтверждения, который будет прислан на указанный номер

Для вызова справки можно использовать команду «help»

Добавляем контакт

> add_contact "телефон" Admin_User

Заметка: Для разделения слов в имени контакта используется знак подчеркивания «_»

Теперь мы можем непосредствено отправлять этому пользователя сообщения

> msg Admin_User "Привет!"

Но скорее всего вы захотите рассылать уведомления в чат, что бы его получали несколько контактов:

> create_group_chat "Имя_чата" список пользователей
> create_group_chat Zabbix_Alert Admin_User Vasya

Мы создали чат с двумя контактами.

Для выхода из консоли используем команду «quit»

В домашней директорий пользователся под которым мы запускали telegram-cli была создана директория .telegram-cli с настройками, перенесем её в домашнюю директорию пользователя zabbix, туда же переносим папку с клонированным с github проектом и выставим на них права.

chown -R zabbix:zabbix /var/lib/zabbix

Создадим скрипт для отправки уведомлений Zabbix

В конфигурационном файле /etc/zabbix/zabbix_server.conf указываем директорию для хранения скриптов

cat /etc/zabbix/zabbix_server.conf

....
AlertScriptsPath=/usr/lib/zabbix/alertscripts
...

Перезапускаем севрер

systemcl restart zabbix-server

Создаем скрипт уведомлений tg.sh

cat /usr/lib/zabbix/alertscripts/tg.sh

#!/bin/bash

to=$1
msg="$2"

tgpath=/var/lib/zabbix/tg
cd $tgpath

(sleep 3; echo "msg $to $msg"; echo "safe_quit") | bin/telegram-cli -k tg-server.pub -W

sleep необходимо для того что бы telegram-cli успел запуститься.

$1,$2 — параметры, которые будет передавать Zabbix при запуске скрипта

Разрешаем выполнение скрипта

chmod +x tg.sh

Теперь переходим к настройки самого Zabbix через веб-интерфейс

Заходим в Administation->Media types

Создаем новый способ оповещения: называем его telegram, указываем имя скрипта tg.sh и задаем два параметра для передачи скрипту, это будет имя кому отправлять и тело сообщения

Далее привязываем способ оповещения к пользователю

Administration->Users->Media

Добавляем способ оповещения: указываем тип — telegram (созданый ранее), куда отправлять (указываем наш чат Zabbix_Alert), указываем время когда можно отправлять оповещения и уровень важности

Все настройка готова.

Обзор

Систему создал Алексей Владышев на языке Perl. Впоследствии проект подвергся серьезным изменением, которые затронули и архитектуру. Zabbix переписали на C и PHP. Открытый исходный код появился в 2001 г., а уже через три года выпустили первую стабильную версию.

Веб-интерфейс Zabbix написан на PHP. Для хранения данных используются MySQL, Oracle, PostgreSQL, SQLite или IBM DB2.

На данный момент доступна система Zabbix 4.4. Скачать ее можно на официальном сайте. Там же можно найти официальные курсы и вебинары для начинающих пользователей системы.

Далее рассмотрим, из чего состоит и как работает технология Zabbix в доступном формате «для чайников».

Настройка уведомлений Zabbix через Telegram

Для настройки будем использовать сервер Zabbix3.2 установленный на CentOs7 и проект «Telegram messenger CLI».

Ставим git

sudo yum install git

Клонируем «Telegram messenger CLI» с github

git clone —recursive https://github.com/vysheng/tg.git

переходим в директорию tg

cd tg

Ставим необходимые зависимости для сборки пакета

sudo yum install gcc libevent-devel openssl-devel \

readline-devel libconfig-devel lua-devel jansson-devel

Собираем telegram-cli

./configure

sudo make

Произведем настройку пользователся Telegram из под которого будем осущевствлять отправку уведомлений.

bin/telegram-cli -k tg-server.pub -W

Telegram-cli version 1.4.1, Copyright (C) 2013-2015 Vitaly Valtman
Telegram-cli comes with ABSOLUTELY NO WARRANTY; for details type `show_license".
This is free software, and you are welcome to redistribute it
under certain conditions; type `show_license" for details.
Telegram-cli uses libtgl version 2.1.0
Telegram-cli includes software developed by the OpenSSL Project
for use in the OpenSSL Toolkit. (http://www.openssl.org/)
I: config dir=[/root/.telegram-cli]
phone number: +7**********
code ("CALL" for phone number): ****
>

Указываем номер телефона для регистрации учетной записи в телеграм и вводим код подтверждения, который будет прислан на указанный номер

Для вызова справки можно использовать команду «help»

Добавляем контакт

> add_contact "телефон" Admin_User

Заметка: Для разделения слов в имени контакта используется знак подчеркивания «_»

Теперь мы можем непосредствено отправлять этому пользователя сообщения

> msg Admin_User "Привет!"

Но скорее всего вы захотите рассылать уведомления в чат, что бы его получали несколько контактов:

> create_group_chat "Имя_чата" список пользователей
> create_group_chat Zabbix_Alert Admin_User Vasya

Мы создали чат с двумя контактами.

Для выхода из консоли используем команду «quit»

В домашней директорий пользователся под которым мы запускали telegram-cli была создана директория .telegram-cli с настройками, перенесем её в домашнюю директорию пользователя zabbix, туда же переносим папку с клонированным с github проектом и выставим на них права.

chown -R zabbix:zabbix /var/lib/zabbix

Создадим скрипт для отправки уведомлений Zabbix

В конфигурационном файле /etc/zabbix/zabbix_server.conf указываем директорию для хранения скриптов

cat /etc/zabbix/zabbix_server.conf

....
AlertScriptsPath=/usr/lib/zabbix/alertscripts
...

Перезапускаем севрер

systemcl restart zabbix-server

Создаем скрипт уведомлений tg.sh

cat /usr/lib/zabbix/alertscripts/tg.sh

#!/bin/bash

to=$1
msg="$2"

tgpath=/var/lib/zabbix/tg
cd $tgpath

(sleep 3; echo "msg $to $msg"; echo "safe_quit") | bin/telegram-cli -k tg-server.pub -W

sleep необходимо для того что бы telegram-cli успел запуститься.

$1,$2 — параметры, которые будет передавать Zabbix при запуске скрипта

Разрешаем выполнение скрипта

chmod +x tg.sh

Теперь переходим к настройки самого Zabbix через веб-интерфейс

Заходим в Administation->Media types

Создаем новый способ оповещения: называем его telegram, указываем имя скрипта tg.sh и задаем два параметра для передачи скрипту, это будет имя кому отправлять и тело сообщения

Далее привязываем способ оповещения к пользователю

Administration->Users->Media

Добавляем способ оповещения: указываем тип — telegram (созданый ранее), куда отправлять (указываем наш чат Zabbix_Alert), указываем время когда можно отправлять оповещения и уровень важности

Все настройка готова.

FreeBSD

zabbix-agent-1.6.5

> cd /usr/ports/net-mgmt/zabbix-agent
> make install clean
> echo 'zabbix_agentd_enable="YES"' >> /etc/rc.conf
> cd /usr/local/etc/zabbix
> cp zabbix_agentd.conf.sample zabbix_agentd.conf

> touch /var/log/zabbix_agentd.log
> chown zabbix:zabbix /var/log/zabbix_agentd.log

> ee zabbix_agentd.conf
#Изменяем параметры
...
Server=127.0.0.1
Hostname=localhost
DisableActive=1
StartAgents=5
LogFile=/var/log/zabbix_agentd.log
...

> /usr/local/etc/rc.d/zabbix_agentd start
Starting zabbix_agentd.

> tail -F /var/log/zabbix_agentd.log
 11361:20090821:145209 zabbix_agentd started. ZABBIX 1.6.5 (revision 7442).

Настройка мониторинга логов

Для того, чтобы мониторить лог файл, на сервере должен быть установлен zabbix agent, а сам сервер добавлен в панель мониторинга. Я буду следить за логом программы apcupsd, который располагается по пути /var/log/apcupsd.events. Идем в веб интерфейс заббикса и добавляем новый итем к интересующему нас хосту. Если у вас таких будет несколько, то создавайте сразу шаблон. В моем случае у меня один сервер, поэтому я буду добавлять новый элемент сразу на него.

На всякий случай сообщаю, что вся настройка проходит на zabbix server версии 3.2. Но информация актуальна и для других версий, так как используется стандартный функционал, который поддерживают все версии заббикса.

Создаем новый итем со следующими параметрами:

Name Имя нового итема. Можете указать любое название.
 Type Тип элемента. Обязательно выбираем Zabbix agent (active). По-умолчанию будет другой тип стоять.
 Key Ключ данных, log — тип, в квадратных скобках путь до лог файла.
Type of information  Указываем тип информации, поступающей в итем.

Остальные параметры оставляете на свое усмотрение. Рекомендую время обновления итема ставить поменьше, чтобы оперативно получить информацию об инциденте. У меня стоит 30 секунд.

После того, как вы сохраните новый итем, через несколько минут начнут поступать данные. Проверять их как обычно в Latest data. В данной конфигурации будут сохраняться все строки из файла. В моем случае это не страшно, так как записей будет очень мало. Они создаются только по событиям в электро сети, а они случаются редко, поэтому я не стал делать фильтр по строкам или словам.

Но это только пол дела. Мы стали собирать логи, теперь нам нужно настроить отправку оповещения при пропадании электричества.

Создание триггера на событие из лога

Мы будем слать оповещение не только в момент отключения электричества, но и тогда, когда оно снова появится. Так что в триггере будут два условия:

  1. Условие активации события.
  2. И условие его прекращения.

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

Name Имя триггера. Может быть любым.
Problem expression {xm-xen02:log[/var/log/apcupsd.events].str(Power failure.)}=1
Recovery expression {xm-xen02:log[/var/log/apcupsd.events].str(Power is back.)}=1

Рассказываю подробнее, что тут написано. xm-xen02 — имя сервера. Power failure. — строка в лог файле, которая появляется при отключении электричества. Когда оно возвращается, появляется запись Power is back. В общем виде лог выглядит примерно следующим образом:

2016-11-07 23:17:23 +0300 Power failure.
2016-11-07 23:17:29 +0300 Running on UPS batteries.
2016-11-07 23:21:20 +0300 Mains returned. No longer on UPS batteries.
2016-11-07 23:21:20 +0300 Power is back. UPS running on mains.
2016-11-16 14:20:42 +0300 Power failure.
2016-11-16 14:20:48 +0300 Running on UPS batteries.
2016-11-16 14:20:51 +0300 Mains returned. No longer on UPS batteries.
2016-11-16 14:20:51 +0300 Power is back. UPS running on mains.

Становится понятно, почему я взял именно эти строки. На этом все. После сохранения триггера он начнет работать и следить за итемом, который собирает строки из лога. Как только появятся строки, попадающие под условие, вы получите оповещение.

ZABBIX – Создание действия.

Теперь нам необходимо создать так называемое “Действие”, которое при определенных условиях будет использовать наш способ оповещения. Для этого нам нужно перейти на вкладку “Настройка” и в появившейся строке нажать на кнопку “Действия”, как показано на скриншоте ниже.

Как создать действие в ZABBIX – Страница действий

Обратите внимание, что здесь отображается вся информация по действиям, уже имеющимся в системе. Нам нужна кнопка “Создать действие”. В пример я приведу действие “KKT Notification”:

В пример я приведу действие “KKT Notification”:

Как создать действие в ZABBIX – Страница создания

Снова пройдемся по полям:

  • Имя – видимое имя действия.
  • Тип вычисления – здесь необходимо выбрать будут складываться ваши условия и выдавать алерт, или если хотя бы одно из условий нарушено, то генерируется алерт.
  • Условия – условия срабатывания действия.

Далее переходим на вкладку “Операции”. Здесь нам необходимо нажать на кнопку “Новый” в поле “Операции”.

Как создать действие – Новая операция

В появившихся поля нам необходимо указать:

  • Шаги – количество выполнения данной операции.
  • Длительность шага – время выполнения 1 шага.
  • Тип операции – сама операция, это поле уже на ваш выбор.
  • Отправлять группам пользователей – отправка сразу нескольким пользователям, входящих в указанную группу.
  • Отправлять пользователям – отправка указанным пользователям. (не забудьте поставить себя и в своем профиле указать свой электронный адрес)
  • Отправлять только через – способ отправки. (Нам нужен Email)
  • Условия – дополнительные условия отправки. (Указываем “Событие подтверждено =  Не подтверждено”)

Для того, чтобы добавить группу пользователей, пользователя отдельно или дополнительное условие, нажимайте на кнопки в этих полях “Добавить” и “Новый”.

После нажатия кнопки “Добавить”, вас перенесет на страницу действий, где появится только что созданное действие. Теперь нам осталось проверить работоспособность нашего действия. Для этого мне необходимо снова зайти на сервер vtrsagent и выключу блокнот.

После проделанных операций мне пришло письмо на почтовый адрес с содержанием проблемы:

Как создать действие – Письмо от ZABBIX

Выглядит не очень презентабельно, но если вчитаться, то можно понять, что упал блокнот на сервере.

Ну-с, собственно все, могу вас поздравить! Вы только что создали систему оповещения алертов в заббиксе!

Скрипт

На Zabbix сервере добавляем скрипт, через который будут отправляться сообщения. KEY, он же токен бота берем из диалога с BotFather.

nano /usr/lib/zabbix/alertscripts/zbxtg.sh
#!/bin/bash

USERID=$1
THEME=$2
BODY=$3

KEY="токен:бота"
TIMEOUT="10"
URL="https://api.telegram.org/bot$KEY/sendMessage"

TEXT="$THEME
$BODY"

PARSEMODE="markdown"

curl -s --max-time $TIMEOUT -d "chat_id=$USERID&disable_web_page_preview=1&parse_mode=$PARSEMODE&text=$TEXT" $URL > /dev/null

Кстати, обратите внимание на вот этот кусочек кода:

TEXT="$THEME
$BODY"

Таким образом обеспечивается перенос строки, я пробовал всякие там , , /n, /r — ничего не работало, а вот такой перенос — работает ;-). И ещё хозяйке на заметку (хотя я это и не использую): All and & symbols that are not a part of a tag or an HTML entity must be replaced with the corresponding HTML entities (<, > with > and & with &).

Меняем владельца и делаем скрипт исполняемым.

chown zabbix:root /usr/lib/zabbix/alertscripts/zbxtg.sh
chmod +x /usr/lib/zabbix/alertscripts/zbxtg.sh

Параметрами $1, $2, $3 для скрипта являются получатель, тема и тело сообщения. Вы можете сами проверить как Zabbix будет дёргать скрипт, выполнив команду /usr/lib/zabbix/alertscripts/zbxtg.sh user_id message_theme message_body

"message":{"message_id":14681,"from":{...},"chat":{"id":123456789,"first_name":"REALNAME","username":"NICKNAME","type":"private"},"date":...

Где «chat»:{«id»:123456789 и будет user id. Для группы:

"message":{"message_id":14686,"from":{...},"chat":{"id":-12345678,"title":"GROUPNAME","type":"group"},"date":...

Где user id будет: «chat»:{«id»:-12345678

Заметка: чтобы добавить бота в группу, нужно нажать на название группы в Telegram, выбрать Добавить участников и в поиске набрать имя_бота.

Уведомления от Zabbix в Telegram

Сегодня подумал: “А почему бы не прикрутить telegram к zabbix?”… Немного погуглил… Но мне не понравились решения с установкой дополнительных программ/скриптов. Поэтому я решил реализовать это по своему: сделать бота и научить zabbix отправлять мне уведомление через него.

Шаг 1.

Для начала нужно создать бота в telegram. Для этого надо добавить в свой список контактов бота @BotFather, сказать ему “/start” и потом “/newbot”. BotFather сначала спросит, как назвать нового бота, а следующим сообщением нужно ввести имя бота.

В ответ BotFather пришлет token.

Вы можете либо создать своего бота либо использовать моего (все сообщения будут отправлены только вам, у меня к ним доступа нет). Звать этого бота @zabbix_notify_bot, а token у него “179320554:AAHI9AeBkptHgMIh5pVs31CRzGHV_9sG8bs”. Бота нужно добавить в свой список контактов. Шаг 2.

Чтобы можно было отправить себе сообщение, нужно знать свой Telegram ID. Для этого добавьте в свой список контактов бота @MyTelegramID_bot и скажите ему “/start”. В ответ получите свой Telegram ID. Скоро он пригодится.

Если оповещение нужно слать в группу, то надо этого бота добавить в группу и сказать “/start”. И далее использовать этот Telegram ID. Шаг 3.

Для отправки сообщений достаточно дать одну команду:

curl –header ‘Content-Type: application/json’ –request ‘POST’ –data ‘{“chat_id”:”_telegram_id_”,”text”:”_your_message_”}’ “https://api.telegram.org/bot_bot_token_/sendMessage”, где _telegram_id_ – ваш Telegram ID, полученный на шаге 2; _your_message_ – любое сообщение, которое бот отправит вам (для переноса строк можно использовать ); _bot_token_ – token бота, полученный на шаге 1.

Для отправки уведомлений из zabbix, я использую такой скрипт:

#!/bin/bash TOKEN=’179320554:AAHI9AeBkptHgMIh5pVs31CRzGHV_9sG8bs’ which curl &>/dev/null if ; then echo ‘FAIL: curl not found.’ && exit 1 ; fi if ; then echo ‘FAIL: Params not defined.’ && echo ‘Usage: zabbix-to-telegram-notify.sh TelegramID Subject Message’ && exit 1 ; fi CHAT_ID=”$1″ SUBJECT=”$2″ MESSAGE=”$3″ curl -s –header ‘Content-Type: application/json’ –request ‘POST’ –data “{“chat_id”:”${CHAT_ID}”,”text”:”${SUBJECT} ${MESSAGE}”}” “https://api.telegram.org/bot${TOKEN}/sendMessage” | grep -q ‘”ok”:false,’ if ; then exit 1 ; fiЕсли используется прокси, то нужно добавить соответствующие параметры для curl.Скрипт нужно положить в каталог, который указан в параметре “AlertScriptsPath” в конфиге zabbix сервера:# grep -i AlertScriptsPath /etc/zabbix/zabbix_server.conf | grep -vE ‘^#’ AlertScriptsPath=/etc/zabbix/alertscriptsИ сделать его исполняемым:chmod +x /etc/zabbix/alertscripts/zabbix-to-telegram-notify.shШаг 4. Теперь нужно настроить сам zabbix, чтобы он мог пользоваться скриптом. Для начала нужно создать новый способ оповещений. Я буду рассматривать для zabbix 3+, т.к. использую его. В 2.2-2.4 разница не большая.

Идем в Администрирование – Способы оповещений, жмем кнопку “Создать способ оповещений”. В поле “Имя” вводим название способа оповещения. В поле “Тип” нужно выбрать “Скрипт”.

SUBJECT} и {ALERT.MESSAGE}. Пример:

Шаг 5. Идем в Администрирование – Пользователи – выбираем своего пользователя – Оповещения – Добавить. В поле “Тип” выбираем только что созданный способ оповещения, например, Telegram Bot. В поле “Отправлять на” вводим свой Telegram ID, полученный на шаге 2.

Остальные поля заполняем на свое усмотрение. Шаг 6.

Идем в Настройка – Действия, в поле “Источник событий” выбираем “Триггеры” и жмем “Создать действие”. На закладках “Действие” и “Условие” заполняем поля по своему усмотрению.

Я в полях “Сообщение по умолчанию” и “Сообщение о восстановлении” указываю такое:

{HOST.NAME} :: {ITEM.NAME} :: {ITEM.VALUE} Status: {TRIGGER.STATUS} Host: {HOST.NAME} Item: {ITEM.NAME} Value: {ITEM.LASTVALUE} Key: {ITEM.KEY} Severity: {TRIGGER.SEVERITY} Trigger: {TRIGGER.NAME} Description: {TRIGGER.DESCRIPTION}Но это “на вкус и цвет”. На закладке “Операции” жмем “Новый”. Выбираем пользователя. В поле “Отправить только через” выбираем созданный на шаге 4 способ оповещения, например, Telegram Bot. Жмем “Добавить” и еще раз “Добавить”. На этом все. Теперь Zabbix должен присылать уведомления в Telegram.

Информация с сайта http://blog.angel2s2.ru/.

Заключение

Я показал общий принцип работы с google api в Zabbix. Сам еще подробно не разбирался и дашборды не составлял. Остановился ровно на том, на чем закончил статью. Дальше буду все это разрабатывать и настраивать под конкретные задачи и нужды. Потом все это уедет вместе с остальными метриками в grafana для удобного дашборда. Возможно покажу все это уже в готовом виде.

Для более сложных и разнообразных запросов надо сделать один скрипт с передачей параметров даты, чтобы не плодить скрипты под каждый айтем. Хотелось бы получить какую-то обратную связь от тех, кто всем этим уже занимался. Тема вообще не гуглится, разбирался во всем сам. Думаю, что в основном для работы с api используются готовые библиотеки под различные языки программирования. Прямые запрос через curl больше на экзотику тянет.

И еще у меня есть некоторые подозрения, что я пошел по сложному пути, и есть способ доступа к api попроще, без протухающих токенов. Но я не понял, как сделать по-другому.

Онлайн курс Infrastructure as a code

Если у вас есть желание научиться автоматизировать свою работу, избавить себя и команду от рутины, рекомендую пройти онлайн курс Infrastructure as a code. в OTUS. Обучение длится 4 месяца.

Что даст вам этот курс:

  • Познакомитесь с Terraform.
  • Изучите систему управления конфигурацией Ansible.
  • Познакомитесь с другими системами управления конфигурацией — Chef, Puppet, SaltStack.
  • Узнаете, чем отличается изменяемая инфраструктура от неизменяемой, а также научитесь выбирать и управлять ей.
  • В заключительном модуле изучите инструменты CI/CD: это GitLab и Jenkins

Смотрите подробнее программу по .

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Техноарена
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: