http://thefrolov.livejournal.com/18600.html
http://blog.frolov.at/
Мониторинг ssh в твиттере Долго хотел этим заняться и наконец-то сделал – научил свой сервер писать в твиттер. Все будет делаться на питоне.
Для начала необходимо скачать библиотеку 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