SMS-уведомления от nagios средствами clickatell.com и монитор сайтов на bash

в 15:16, , рубрики: bash, nagios, sms, системное администрирование, метки: , ,

image

Добрый день, товарищи

Как и всем кто имеет дело с удалёнными системами, мне понадобилось мониторить множество машин и сервисов на них. Пролистав описания и мануалы нескольких программ, остановился на Nagios. Множество статей и примеров по нему и очень богатая настройка оказалось то что нужно. И вот решил поделиться несколькими моментами в реализации и конфигурирование самописного плагина, написанного на Bash и системы оповещения по sms с использованием clickatell.com.

Почему clickatell.com? Да просто он уже используется в организации, а я его решил ещё и на это действие использовать.
Как конфигурировать nagios есть масса статей, и акцентрировать внимание на этом не буду, перейду сразу к описанию чего я наваял и как это работает.

Сервис отправки сообщения

Посмотрев на API самого clickatell.com стало много ясно и понято как всё там реализовано а так как я знаю только bash решил на нём и написать.

Код bash отправки sms

#!/bin/bash
text1=$1
nombertel=$2
wget --post-data «api_id=111111&user=User1&password=pass1» api.clickatell.com/http/auth/ --quiet -O — > /tmp/sms_tmp_id
session_id=$(cut -f2 -d" " /tmp/sms_tmp_id)
wget --post-data «session_id=$session_id&to=$nombertel&text=$text1» api.clickatell.com/http/sendmsg/ --quiet -O — rm /tmp/sms_tmp_id
exit 0

Первым wget --post-data посылаем данные на генерацию id сессии, оно состоит из api_id это id сервиса, используемого при отправке СМС, user имя пользователя входа в систему clickatell.com и password, соответственно пароль. В APi clickatell.com есть проверка на session_id, но я пошёл простым путём, простой генерацией нового. Увы API clickatell.com можно посмотреть только после регистрации на их сайте.

Вторым wget --post-data мы уже посылаем какой либо текст на указанный номер. session_id это идентификатор сессии, to номер телефона на который отсылается сообщение и text текст сообщения. Проверка показала что всё работает, но есть конечно но, это максимальная длинна сообщения 70 знаков. Поэтому передаём только самое важное, в отличии от сервиса рассылке по почте.

Вот сам сервис отвечающий за отправку сообщения из из nagios (один отвечает за хосты другой за сервисы)

nagios sms-host, sms-services

define command{
command_name sms-host
command_line /usr/bin/sms_get_number.sh "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTADDRESS1$
}
define command{
command_name sms-services
command_line /usr/bin/sms_get_number.sh "$SERVICEDESC$ Host: $HOSTALIAS$ $SERVICEOUTPUT$" $CONTACTADDRESS1$
}

А это конфиг пользователя кому получать уведомления

nagios contact_name sms

define contact{
contact_name mobile
alias mobile
service_notification_period noworktime
host_notification_period noworktime
service_notification_options w,u,c
host_notification_options d
service_notification_commands sms-services # Названия сервиса описанного выше
host_notification_commands sms-host #Названия сервиса описанного выше
address1 +79111111111
}

При такой настройке мы будем получать уведомления о падении сервисов и хостов во временной период описанный как noworktime.

Да если кому интересно вот конфиг noworktime, это нерабочее время и выходные, что бы лишний раз не забивало сообщениями телефон, ведь в рабочий день и так всё отправится на почту.

nagios timeperiod

define timeperiod{
timeperiod_ noworktime
alias no work region SPB
sunday 00:00-24:00
monday 00:00-05:30,14:30-24:00
tuesday 00:00-05:30,14:30-24:00
wednesday 00:00-05:30,14:30-24:00
thursday 00:00-05:30,14:30-24:00
friday 00:00-05:30,14:30-24:00
saturday 00:00-24:00
}
# Время на сервере смещено на пару часов от этого и такие цифры.

А да, чуть не забыл. Хотел ещё скрипт выкинуть на всеобщее обозрение, который присылает ошибку с определённого ресурса.

Сервис мониторинга ошибок web сайтов

Такой сервис понадобился для быстрого реагирования на ситуацию с падением сайта. В nagios есть сервис диагностики web сервера, но он не годится мне так как он диагностирует весь сервер и коды ошибок не возвращает. А на одном сервере может быть много ресурсов, так что пишем свой.

В общем вот сам скрипт диагностики веб ресурса /usr/bin/check_http_error.sh
Конфиг конкретного сайта(можно и просто ip адрес)

script check http

#!/bin/bash
site1=$1
exitservice=3
WGET=`wget $site1 -O /tmp/check_site_error 2> /tmp/error_service.tmp`
if [ $? -ne 0 ]
then
outmes=`grep -o «ERROR.*» /tmp/error_service.tmp`
echo "$outmes $site1"
exitservice=2
else
outmes=«OK $site1»
echo $outmes
exitservice=0
fi
rm /tmp/error_service.tmp
rm /tmp/check_site_error
exit $exitservice

А это конфиг nagios использование скрипта /usr/bin/check_http_error.sh

nagios check http

define command{
command_name check_site
command_line /usr/bin/check_http_error.sh $ARG1$
}

Да вот описание самого сервиса.
Увы каждый сервис приходится описывать отдельно из за своей специфики и заношу в localhost.

nagios service

define service{
name check_site
use base-service
service_description check_site
check_command check_site!http://mai.ru
host_name localhost
}

Ну вот в общем и всё, если будет с сайтом какая либо проблема, вам придёт код ошибки и на каком ресурсе. Мне помогает это своевременно определять ДДОС атаки и вторжения.

И да если это заинтересует, то могу ещё опубликовать статью о сервисе для nagios определяющий свободное место по средствам snmp в процентным соотношение.

У меня всё, спасибо за внимание.

Автор: minoro

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js