включить редактирование

Отчеты о состоянии сервера через Twitter или JABBER

Создан:

Отправлять отчеты будем с помощью ttytter.
Используем ОС Debian
Ставим:

# apt-get install ttytter

Запускаем клиент, получаем OAuth-токен, соглашаемся нажатием <Enter>. Далее будет ссылка, открываем ее в браузере и нажимаем кнопку «Авторизовать». Получив PIN-код, который следует скопировать и ввести в ответ на приглашение TTYtter.
В общем виде команда выглядит так: $ command | ttytter -script
TTYtter используем от имени того юзера, от которого получен токен.
Например: $ free | grep Mem | ttytter -script
Таким образом мы можем отправлять вывод любой команды в данном случае в twitter.
Сделаем простенький скрипт, который будет отсылать нам отчет о состоянии сервера;

HOST=`hostname -s` #Имя хоста
UP=`uptime | cut -d " " -f4,5 | cut -d "," -f1` # Аптайм машины
LOAD=`uptime | cut -d ":" -f5,6` # Средняя нагрузка
PING='ping -q -c 3 info-linux.ru | tail -n1 | cut -d "/" -f5 | cut -d "." -f1' # Скорость пинга
MEM=`free -m | head -n2|tail -n1|awk '{print $3}'` # Количество занятой памяти
CPU=`ps aux | awk '{ sum += $4 }; END { print sum }’` # Нагрузка на процессор
TWEET="(HOST) ${HOST} (UP) ${UP} (CPU) ${CPU}% (MEM) ${MEM}% (LOAD) ${LOAD} (PING) ${PING}ms" # присваиваем все одной переменной

# Отправляем твит

$ echo $TWEET | ttytter -script

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

$ echo $TWEET | wc -с

Скрипт можно теперь каждый час крутить кроном

$ crontab -е
0 * * * * /yourScript.sh

Управление через Twitter

Также утилиту TTYtter можно использовать для автоматического получения личных сообщений и твитов от других пользователей.
Таким образом, можно организовать управление сервером если учитывать то, что в друзьях этой учетки будете только Вы.
Последнее приватное сообщение с помощью TTYtter получаем так:

$ echo "/dma +1" | ttytter -script

Создадим небольшой скрипт, который будет в цикле читать приватные сообщения, обрезать всю лишнюю инфу из вывода и выполнять В общем случае скрипт будет выглядеть так:

$ vi ~/bin/twitter-command.sh
#!/bin/sh
CMD=`echo "/dma +1" | ttytter -script | sed 's/\[.*\]\ //'`
sh $CMD
sleep 60
done

Недостатки: скрипт не знает, выполнил ли он уже команду, и будет делать это при каждой итерации цикла, даже если новых сообщений не поступало; у скрипта нет обратной связи.
Доработаем скрипт:

$ vi ~/bin/twitter-command.sh
#!/usr/bin/bash
# Имя твиттер-юзера для ответов
USER="user"
while true; do
# Получаем сообщение-команду
CMD=`echo "/dma +1" | ttytter -script | sed 's/\[.*\]\ //`
# Проверяем, выполняли ли такую команду в прошлый раз
if [ $CMD != $OLD_CMD ]; then
# Если нет - выполняем
# и отправляем ответ команды юзеру
echo "/dm $USER ${REPL:0:140}" | ttytter -script
# Сохраняем команду, чтобы не выполнять ее снова
CMP = $OLD_CMD
fi
sleep 60
done

Cкрипт более практичен: он отправляет результат выполнения команды юзеру, автоматически сокращая его до 140 символов, и запоминает последнюю выполненную команду, чтобы не запускать ее снова. Один нюанс, при запуске скрипт все равно выполнит последнюю отправленную ему команду.

Управление через JABBER/GTALK

Давайте посмотрим теперь как использовать Jabber и отдавать удаленные команды.
В Linux есть несколько инструментов, позволяющих отсылать и принимать Jabber-сообщения из консоли (например, CJC).
Для реализации нашей задачи будем делать свой скрипт и нам подойдет Ruby-библиотека xmpp4r-simple, позволяющая реализовать Jabber-клиент. Библиотека есть в репозитории Ruby Gems.
 

# apt-get install ruby rubygems xmpp4r-simple session

Чтобы убедиться в работоспособности, можно выполнить такой скрипт:
 

$ vi send-message.rb
#!/usr/bin/env ruby
require 'rubygems'
require 'xmpp4r-simple'
jabber = Jabber:: Simple. new( 'user@gmail. com', 'пароль')
jabber.deliver("addres@gmail.com", "Hello, Gmail!")

Для решения нашей задачи:

$ vi jabber-bot.rb
#!/usr/bin/env ruby
require 'rubygems'
require 'xmpp4r-simple'
require ‘session’
bot.deliver(msg.from, "\n" +
stdout.chomp) unless stdout.empty?
# Запускаем сеанс sh, в котором будет происходить выполнение команд
@sh = Session::new
# Коннектимся к Jabber-серверу
bot = Jabber::Simple.new(user@gmail.com, pas)
while true
# Ожидаем сообщение
bot.received_messages do |msg|
#проверяем что сообщение пришло от юзера user@gmail.com
if msg && msg.from.to_s.include?(user@gmail.com)
# Выполняем команды в сеансе sh
stdout, stderr = @sh.execute(msg.body) if msg.body
# Отправляем в ответном сообщении вывод команды
bot.deliver(msg.from, "\n" + stdout.chomp) unless stdout.empty?
# Отправляем поток ошибок
bot.deliver(msg.from, "\n" +stderr.chomp) unless stderr.empty?
end
end

Приведенный бот прост, но отлично справляется со своей работой. Заводим юзера для бота, прописываем его логин и пароль, а также адрес своего основного Jabber-аккаунта, затем запустить скрипт и написать на адрес бота нужную команду. Результат запуска придет в ответном сообщении. Используем как экстравагантную альтернативу SSH, только проблема в отсутствии шифрования.

Автор: xvzL Просмотров: 2423


Рейтинг статьи: 0

Общий рейтинг из всех статей автора :
{0 [724]} [ - - - - - - - - - - ]

Общий рейтинг из всех статей на сайте :
{0 [888]} [ - - - - - - - - - - ]

[?]
комментариев к данной статье нет

Добавить комментарий к статье


Ctrl+Enter

Для активации кнопки, введите символы, которые Вы видите на картинки.

новая

тема

Заметки на тему IT

Монитор поиска
[x]
Новое сообщение

Сообщения в чате

Вы спрашиваете у гостей/у зарегистрированных/ У Вас спрашивают
всем Ctrl+Enter
зарегистрированным Ctrl+Enter
Ctrl+Enter

Краткая инструкция по работе с чатом

  • Вы должны ввести имя, которое будет запомнено и применяться для чата и комментариев на сайте.
  • Выбрать одну из возможностей
    "Вы спрашиваете у гостей/
    у зарегистрированных/
    У Вас спрашивают"
  • Кликните на один из способов и появиться дополнительная информация