Monitoring líný chorýš
Skript pro monitorování serveru a zasílání emailu v případě výpadku
<source lang="python">
- !/usr/bin/python
- -*- coding: utf-8 -*-
import socket import telnetlib import os import smtplib import time import datetime import urllib
- nastavení serverů pro kontrolu
server = {
'websites.cz':[ [21,22,110,443,993,3306,995,80], 'http://webovastranka.cz'], #web
- 'localhost':8192,8194,8197, #holmes server
'localhost':8192, #holmes server }
- email pro odeslání
emails = ("ja@email.cz","nekdo@email.cz",)
- nastavení
limit1 = 9.0 #hranice pro nacítání stránek (load + konektivita) limit2 = 4.5 #hranice pro nacítání stránek (mysql) limit3 = 4.5 #hranice pro nacítání stránek (apache)
TIME_OUT = 3600
- cas nacítání strá
def test_url(url):
#načení souboru timer_http = time.time() try: htmlpage = urllib.urlopen(url) data = htmlpage.read() timer = data.split("\t") tim1 = float(timer[0]) tim2 = float(timer[1]) except: tim1 = 0.0 tim2 = 0.0 timer2 = time.time() - timer_http return [timer2,tim1,tim2]
timeout_error = []
def islock():
if os.path.exists("lock"): f = open("lock") data = f.read() if time.time() - float(data) > TIME_OUT: return False else: return True return False
def lock():
if os.path.exists("lock"): if islock():
return False
f = open("lock","w") f.write("%f" % time.time()) f.close() return True
def unlock():
f = open("lock","w") f.write("0") f.close()
- kontrola nacítání všech stránek s port
for host in server.keys():
if 80 in server[host][0]: timer = test_url(server[host][1]) print timer if timer[0] > limit1: text = "%s %s" % ("konektivita",host) timeout_error.append([text,timer[0],limit1]) if timer[1] > limit2: text = "%s %s" % ("mysql",host) timeout_error.append([text,timer[1],limit2]) if timer[2] > limit3: text = "%s %s" % ("apache",host) timeout_error.append([text,timer[2],limit3])
error = []
- skenování portu
for host in server.keys():
for port in server[host][0]: try: tn = telnetlib.Telnet(host,port) except: #print "ERROR",host, port error.append([host,port])
def send_email(body,emails):
"""funkce na odesílání zpráv""" # nastavení a odeslání zprávy fromaddr = 'server.websites@gmail.com' subject = "Vypadek serveru websites.cz" username = 'server.websites@gmail.com' password = 'server123456'
for toaddrs in emails:
msg = "\n".join( ("From: %s" % fromaddr, "To: %s" % toaddrs, "Subject: %s" % subject, "", body, "\r\n") )
server = smtplib.SMTP('smtp.gmail.com:587') server.ehlo() #FIX python 2.5 server.starttls() server.ehlo() #FIX python 2.5 server.login(username,password) server.sendmail(fromaddr, toaddrs, msg) server.quit()
- neposilat se zpravu
if len(error)==0 and len(timeout_error)==0: if islock(): print emails send_email("Výpadek serveru už pominul..",emails) unlock()
exit(0)
if islock():
exit(0)
else:
lock()
- vytvorení zprávy pro email
tmp = ["Time: %s " % datetime.datetime.now(),
"---------------------------------------"]
for item in error:
tmp.append("Sluzba nefunguje %s:%d" % (item[0],item[1]))
for item in timeout_error:
tmp.append( "%s presahla limit (%f s.) %f s." % (item[0],item[2],item[1]))
body = "\n".join( tmp )
- odesílám zprávy
send_email(body,emails)
</source>