Monday, September 10, 2012

Мониторинг ssh в твиттере

http://thefrolov.livejournal.com/18600.html
http://blog.frolov.at/


Мониторинг ssh в твиттере
twitter 150x150 Долго хотел этим заняться и наконец-то сделал – научил свой сервер писать в твиттер. Все будет делаться на питоне.
Для начала необходимо скачать библиотеку tweepy, которая просто и прозрачно позволяет использовать api твиттера. Предварительная настройка подробно описана тут. После получения 4 магических переменных CONSUMER_KEY, CONSUMER_SECRET, ACCESS_KEY и ACCESS_SECRET можно использовать twitter api.
Для начала напишем скрипт, который будет добавлять твиты в ленту.
#!/usr/bin/env python
 
import sys
import tweepy
 
CONSUMER_KEY = '*****************************'
CONSUMER_SECRET = '***********************'
ACCESS_KEY = '*****************************'
ACCESS_SECRET = '****************************'
 
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_KEY, ACCESS_SECRET)
api = tweepy.API(auth)
 
# Оформляем в виде функции для удобства импортирования из других модулей
def do(text):
    try:
        api.update_status(text)
    except Exception, ex:
        print ex
Второй скрипт будет мониторить лог-файл /var/log/auth.log и сообщать, если кто-то ошибается паролем.
#!/usr/bin/env python
 
import sys
import tweepy
import time
 
from tweet import do as tweet
 
# хитро реализуем tail -f на python
def follow(thefile):
 thefile.seek(0,2)
 while True:
  line = thefile.readline()
  if not line:
   time.sleep(0.1)
   continue
  if ('Failed password' in line):
   yield line.split(': ')[1].split('port')[0]
 
logfile = open('/var/log/auth.log')
loglines = follow(logfile)
 
for line in loglines:
 line = line.replace('invalid user ', '', 1)
 print line
 tweet(line)
Теперь можно запустить скрипт в фоне (например использовать screen, либо демонизировать) и зафоловить сервак в твиттере. Теперь не придется лезть в логи, сервак твитанет вам.
Существует масса различных способов применения этой фишке, буду придумывать что-нибудь интересное. Бонус – скрипт вывода uptime сервера.
#!/usr/bin/env python
 
import sys
import tweepy
from os import popen2
from tweet import do as tweet
 
stdin, stdout = popen2('uptime')
uptime = stdout.read().split(',')[0].strip().split()
days = uptime[2]
time = uptime[0]
hours, minutes, seconds = time.split(':')
uptime = 'My uptime is %s days, %s hours, %s minutes, %s seconds' % (days, hours, minutes, seconds)
tweet(uptime)
P.S. Результат моих трудов здесь, буду обучать его чему-нибудь новому.

No comments:

Post a Comment