Добрый день, сегодня хотел бы рассказать всем о так сказать почти всех способах оповещения системы Мониторинга Zabbix. В данной статье пойдёт речь о таких системах мгновенных сообщений как: SMS, Jabber, ICQ, email
Содержание:
Все действия делались на системе FreeBSD 8.2 i386 и будем считать, что сервер Zabbix стоит и уже работает, а как развернуть и настроить сервер в этой статье описываться не будет. Для этого вы можете прочитать статью Zabbix - мониторим и отслеживаем
Начнём с самого простого Email
Для начала идём в порты и ставим очень удобную программку sendEmail
cd /usr/ports/net/sendemail/ && make install clean
?????????????????????????????????????????????????????????????????????? ? Options for sendEmail 1.56 ? ? ?????????????????????????????????????????????????????????????????? ? ? ? [X] SSL Enable SSL support ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?????????????????????????????????????????????????????????????????????? ? [ OK ] Cancel ? ??????????????????????????????????????????????????????????????????????
Программа не какой настройки не требует после установки пишем вот такой скриптик для Zabbix
#!/bin/sh export smtpemailfrom=zabbix@host.ru export zabbixemailto="$1" export zabbixsubject="$2" export zabbixbody="$3" export smtpserver=smtp.host.ru export smtplogin=zabbix@host.ru export smtppass=MegaPass export logfile=/var/log/sendemail.log /usr/local/bin/sendEmail -l "$logfile" -f "$smtpemailfrom" -t "$zabbixemailto" \ -u "$zabbixsubject" -m "$zabbixbody" -s $smtpserver:25 -xu \ "$smtplogin" -xp "$smtppass"
Скрипт абсолютно простой и гуляет по инету уже давно так что тут всё просто программа просто соединяется на SMTP хост под таким-то логином и паролем, и шлёт от него всё что нам надо, в данном случае данные с Заббикса
Естественно кладём этот файл дав ему права 755 в директорию которая у вас задана на сервере
AlertScriptsPath=/usr/local/etc/zabbix/alertscripts/
По дефолту она вообще выключена
Далее идём и логинимся под админом в веб интерфейсе.
Администрирование > Способы оповещений
вверху с права "Создать способ оповещения"
И вносим информацию о нашем скрипте:
Описание ;Просто название его
Тип ;Естественно Скрипт
Название скрипта ;Просто название файла у меня например zabbix_sendemail
Далее создаём Настройка > Действия
В нутрях надо делать индивидуально, у меня например всё просто
Период времени в "1-7,00:00-23:59"
Значение триггера = "ПРОБЛЕМА"
Важность триггера = "Чрезвычайная"
Отправить сообщение Группа "Zabbix administrators"
Более подробно можно почитать в мане заббикса, ссылку на Онлайн Мануал найдёте в конце статьи.
Теперь мы переходим к отправке по SMS
Я использовал смсшлюз ТурбоСМС Он очень удобен так как у него есть возможность отправки СМС через MySQL что для меня было очень удобно, на этом и был нарисован скрипт, и кстати не мной про турбоСМС и про этот скрипт я узнал где-то в интернете давнооо давно
Вот он скриптик
#!/usr/bin/perl use strict; use POSIX; use DBI; my $phone=@ARGV[0]; my $subj=@ARGV[1]; my $msg=@ARGV[2]; my $driver = "mysql"; my $user = "User"; my $password = "MegaPASS"; my $database = "users"; my $dsn = "DBI:$driver:host=77.120.116.10:3306;database=$database"; my $dbh = DBI->connect($dsn, $user, $password); my $sql = $dbh->prepare("INSERT INTO $user (number, sign, message) VALUES ('$phone', 'ISN(Обратите внимания сюда)', '$msg')"); $sql->execute;
Опять же, всё очень просто, скрипт на Perl кому интересно могут переделать под BASH, SH хоть PHP тут не чего сложного.
Опять же повторяем действия какие мы делали при создании Email оповещений.
Начиная с
дав ему права 755
И всё, готова у нас отправка и по СМС
Теперь переходим к самому замороченному и трудному для меня
Отправка на ICQ
Возможно есть и другие способы, с помощю ПХП ботов, или ещё чего, но я выбрал путь с помощью консольного клиента climm
Для начала нужно удостовериться что у нас последняя версия, и просто обновить порты.
потом идём в
cd /usr/ports/net-im/climm/ && make install clean
В конфиге я лично отметил всё, а вы можете на свой вкус но самое главное для нас это TCL scripting support и Remote control fifo support
?????????????????????????????????????????????????????????????????????? ? Options for climm 0.7.1_1 ? ? ?????????????????????????????????????????????????????????????????? ? ? ? [X] LIBICONV Iconv character set conversion ? ? ? ? [X] P2P Peer2peer connection support ? ? ? ? [X] TCL TCL scripting support ? ? ? ? [X] OTR OTR encryption support ? ? ? ? [X] REMOTE Remote control fifo support ? ? ? ? [X] XMPP XMPP Jabber support ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?????????????????????????????????????????????????????????????????????? ? [ OK ] Cancel ? ??????????????????????????????????????????????????????????????????????
После установки можно настроить, а можно и не трогать, он сам создаст дефолтный файл с настройками в
~/.climm/
Почитать о нём можно много в нете, так что не буду описывать как его настраивать, и он с русским интерфейсом, Лично Я, использовал дефолтный конфиг, всё просто.
Теперь создадим TCL скриптик
# Verbindet sich mit ICQ, horcht an Socket und sendet Nachrichten per ICQ weiter ### # # Globals # # ICQ UIN des Admins # (bekommt Nachrichten beim Starten und Stoppen des ICQ-Forwarders) set admin "5114112" ### # # Funktionen # # Startet die Socket proc serverOpen {channel addr port} { global connected set connected 1 fileevent $channel readable "readLine Server $channel" # puts "Client verbunden, warte auf Daten..." # puts "Client verbunden" } # Liest Zeilen aus der Socket proc readLine {who channel} { global out didRead admin gets $channel line if {"$line" == ""} { fileevent $channel readable {} after idle { # puts "Idle, warte auf Verbindung..." set didRead 1 } } elseif {$line == "kill"} { set killmsg "Zabbix ICQ Server STOP!" climm exec "msg $admin $killmsg" puts $channel $msg flush $channel exit } else { climm exec "msg $line" #after 3000 # puts "out: \"$antwort\"" # puts $channel "$antwort" # flush $channel; set didRead 1 } } # ### # # Hauptprogramm # # Socket als verf.gbar markieren set connected 0 # Server an Port 33000 starten set server [socket -server serverOpen 33000] puts "ICQ-Forwarder gestartet, horche auf Port 33000" climm exec "msg $admin Zabbix ICQ Server START!" while [ vwait out ] { vwait connected vwait didRead unset connected didRead }
Обзавём его допустим icq-tcl
И так же создадим файлик для Zabbix
#!/usr/bin/tclsh # # (Test-)Client: Sendet Daten an den Server # # zu Socket verbinden, Referenz in Variable "sock" speichern set sock [socket -async 127.0.0.1 33000] # Wenn Kommandozeilenparameter vorhanden, # Dann diese in Var. "eingabe" schreiben # Sonst an StdIn auf Eingabe warten und in Var schreiben if {$argc > 0} { set eingabe "$argv" } else { puts "Bitte Daten eingeben, \"kill\" stoppt den Server:" set eingabe [gets stdin] } # Inhalt aus "eingabe" an Socket senden puts $sock "$eingabe" flush $sock #puts "Serverantwort:" #set len [gets $sock ausgabe] #puts "in : \"$ausgabe\"" # Client beenden close $sock exit
Он у нас на tcslsh писан, назовём его zabbix_icqsend и положем куда надо.
Теперь запустим climm сделаем новую учётку, или воспользуемся своей не суть
Как залогиниться автоматом опишу.
Идём в
ee ~/.climm/climmrc
и добавим в верху вот такой блок
[Server] type icq8 auto version 8 host login.icq.com port 5190 screen 123456789 password 123456 status online options ignore off
Вот не помню там это есть по дефолту или нет, вас естественно интересует тока screenэто UIN и password
Вводим, запускаем climm
Он логиниться теперь запускаем нашь скрипт! пишем
tclscript ПОЛНЫЙ_ПУТЬ_ДО_ФАЙЛА/icq-tcl
И он жолжен повиснуть на 33000 порту, я лично запускал его в скринах и оставлял его там висеть, по другому пока не придумал, листаю маны по climm и по tcl.
Смотрим повис ли он на порту
sockstat -4l | grep climm root climm 73029 6 tcp4 *:33000 *:*
Ага висит, всё отлично, теперь давайте баловаться )))
Идём в
cd /usr/local/etc/zabbix/alertscripts/
chmod +x zabbix_icqsend
И делаем такой запросик
./zabbix_icqsend UIN MSG
./zabbix_icqsend 123456789 Helo World
И вам придёт сообщение.
Есть пару нюансов, надо что бы вы были авторизированы у этого номера, и что бы он у вас тоже.
Так же есть фаерволом не закрыть порт 33000 то можоно по телнету подключиться и слать сообщения )
Русский только в UTF-8
Ну вот собственно и всё, писал на скорую руку, так что вопросы в студию, поправлю чё надо, и дорасскажу чего не хватает
Всем спасибо, все свободны.