Open-Club.Net Проект полностью ориентирован на Open Source-подход(изучаем, настраиваем, устанавливаем и общаемся о Linux).
Мы в соц. сетях:
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
SendXMPP: Мониторим сервер с помощью Jabber
DiselДата: Вт, 14.07.2009, 19:11 | Сообщение # 1
Генерал-лейтенант
Группа: Бывалый
Сообщений: 489
Нам, админам, нужно постоянно следить за серверми. Создавать кучу подключений по SSH или ssh-туннели не очень удобная вещь. E-mail, как правило, отсталый по времени, т.к. не у всех постоянно запущен e-mail клиент. А вот jabber запущен постоянно и всегда и зачастую даже на мобильнике. Почему бы его не заюзать для слежки за серваком?

SendXMPP - это Perl-скрипт для отправки сообщений на XMPP (Jabber) сервер. Работает почти так же, как программа mail при отправке почты. SendXMPP можно использовать для отправки сообщения на xmpp сервер для предупреждения или уведомления пользователей.

Итак, для начала нам нужно поставить SendXMPP. Для Debian/Ubuntu это можно сделать так:

Quote
sudo aptitude install sendxmpp

Готово. Теперь надо настроить SendXMPP, чтобы он знал на какой сервер под каким логином и паролем ему коннектиться. Для этого нужно создать файл ~/.sendxmpprc и записать в него настройки:

Quote
vim ~/.sendxmpprc
servername@jabber.domain.ru :5222 PaSSwD

Тут servername@jabber.domain.ru :5222 - логин, сервер и порт, PaSSwD - пароль.
Теперь нужно выставить на него такие права, чтобы этот файл мог читать только тот юзер, от имени которого будет зпапускаться SendXMPP:

Quote
chmod 400 ~/.sendxmpprc

Все, готово. Установка и настройка закончены.

Теперь пара примеров по использованию SendXMPP.
Пример 1:
Задача: Узнать когда процессор сервера будет под большой нагрузкой.
Решение: Запихнуть в кронтаб вот этот однострочник, чтобы каждые 5 сек. выполнялся:

Quote
if [[ $(ps aux | awk '{print $3}' | sort -nr | head -n 1 | sed 's/\..*//g' ) -ge 70 ]] ;\
then ps aux | awk '$3>70' | sendxmpp -s 'CPU Load > 70%' admin@jabber.domain.ru ; \
fi

НО(!) имей ввиду, что это просто пример, в реальной жизни такой однострочник не стоит использовать, т.к. если какой-либо процесс загрузит проц, то тебе будут постоянно идти сообщения, что не есть гуд. В реальной жизни надо сделать провеку, т.е. типа если уже отправлено сообщение, то "поднимаем флаг" и больше не отправляем, когда нагрузка спала, "опускаем флаг".

Пример 2:
Задача: Нужно отслеживать все подключения к SSH-серверу.
Решение: Создать файл /etc/ssh/sshrc с содержанием:

Quote
echo "Date:\t\t$(date +%d.%m.%Y\ %H:%M:%S)\nRemote Host:\t$SSH_CONNECTION\nUser:\t\t$USER\nShell:\t\t$SSH_TTY" |\
sendxmpp -s 'SSH Login on GLPI Server' -r 'GLPI Server' -u UserName -j jabber.domain.ru:5222 -p 'PaSSwD' admin@jabber.domain.ru

Теперь при любом подключении будет приходить сообщение в jabber с указанием даты, времени, ip подключившегося, имя этого юзера и на какой шелл он повесился.

Пояснения ключей:
-s - тема сообщения (у меня русские буквы не отображает, в теле все хорошо)
-r - ресурс
-u - имя юзера, для логина на jabber-сервер
-j - адрес jabber-сервера и его порт
-p - пароль

ЗЫЖ: Если у кого бедет проблема с русской кодировкой попробуйте открыть файл sendxmpp, найти строки

Code
use Net::XMPP;
use Getopt::Long;
use strict;

и сразу после них добавить строку

Quote
use encoding 'koi8-r';

или

Quote
use encoding 'utf-8';

Возможно поможет. Я не пробовал, т.к. у меня с русскими в Gajim'е все хорошо, кроме темы сообщения, а тут они мне и не нужны.


 
  • Страница 1 из 1
  • 1
Поиск:
Новый ответ
Имя:
Текст сообщения:
Код безопасности: