2009年7月10日金曜日

nagiosでURLが正常に表示できるかをチェックするプラグイン

nagiosプラグイン「check_url」

#!/usr/bin/python -Wignore::FutureWarning
# -*- encoding: utf-8 -*-
import urllib, re, sys, md5, time
from optparse import OptionParser

parser = OptionParser()
parser.add_option('-H', type='string')
parser.add_option('-u', type='string')
parser.add_option('-w', type='int')
parser.add_option('-c', type='int')
(options, args) = parser.parse_args()

## 定数
STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
STATE_UNKNOWN=3
STATE_DEPENDENT=4
##

comp=re.compile("(.*)")

def genmd5(str): return md5.new(str).hexdigest()

def check_url(url, str):
check = None
pre = time.time()
res = urllib.urlopen(url)
post = time.time()
exec_time = post-pre
if options.c > exec_time:
for i in res:
line = i.rstrip('\n')
#print line
if comp.match(line):
check = comp.split(line)[1]
#print check
if check == str:
return ("OK", check, exec_time, STATE_OK)
#return ("CRITICAL", check, exec_time, STATE_CRITICAL)
return ("CRITICAL", "mismatch", exec_time, STATE_CRITICAL)
else: return ("CRITICAL", "TIMEOUT", exec_time, STATE_CRITICAL)

def main():
scheme = "http://"
uri = options.u
host = options.H
url = scheme + host + uri
genstr = genmd5(host)
try:
(state, str, exec_time, flag) = check_url(url, genstr)
except:
state = "HTTP_ERROR"
exec_time = None
str = None
flag = STATE_WARNING
print "URL %s %s %s %s %s" % (state, exec_time, str, genstr, url)
sys.exit(flag)

if __name__ == '__main__':
main()


監視対処サーバにおくCGI

#!/usr/bin/python
import md5, socket
def genmd5(str): return md5.new(str).hexdigest()
host = socket.gethostbyname(socket.gethostname())
print "Content-type: text/html\n\n";
print "%s" % genmd5(host)


-Hオプションでプラグインに渡されたホスト名からMD5値を算出。
CGIが実行されているホストでもMD5値を算出して、合っているかを確認する。

./check_url -H example.com -u /example.cgi -c 10 -w 5
URL OK 0.0720520019531 5ababd603b22780302dd8d83498e5172 5ababd603b22780302dd8d83498e5172 http://example.com/example.cgi

0 件のコメント: