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 = {
'webovastranka.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>