由于需要知道公司资产中的相关服务器是否在zabbix的监控中,有些是不需要监控的,有些是资产更新之后zabbix没有监控的,要是一个个的去对比,比较麻烦,闲来无事,写了一个脚本,对比资产中的机器是否需要zabbix监控,然后发邮件给相关的负责人,及时的更新zabbix监控主机。主要原理是用MySQLdb模块查出zabbix中的主机和资产数据库中的主机列表,然后用列表的集合比较set来找出两个列表中不同的值,然后查看确定是在那个列表中,以不同的信息标识发邮件给负责人。

  1. #!/bin/env python  
  2. # -*- coding: utf-8 -*-  
  3.  
  4. import os,sys,MySQLdb,smtplib,datetime,time  
  5. from email.mime.text import MIMEText  
  6.  
  7. def send_mail(content):  
  8.     #############  
  9.     #要发给谁,这里发给1个人  
  10.     mailto_list=["xxxxx@139.com"]  
  11.     #####################  
  12.     #设置服务器,用户名、口令以及邮箱的后缀  
  13.     mail_host="mail.xxx.cn" 
  14.     mail_user="zabbix" 
  15.     mail_pass="xxx" 
  16.     mail_postfix="xxxx.cn" 
  17.     ######################  
  18.     '''''  
  19.     to_list:发给谁  
  20.     sub:主题  
  21.     content:内容  
  22.     send_mail("aaa@126.com","sub","content")  
  23.     ''' 
  24.     me=mail_user+"<"+mail_user+"@"+mail_postfix+">" 
  25.     msg = MIMEText(content,_charset='utf8')  
  26.     msg['Subject'] = u"zabbix主机检查-%s" % datetime.date.today()  
  27.     msg['From'] = me  
  28.     msg['To'] = ";".join(mailto_list)  
  29.     try:  
  30.         s = smtplib.SMTP()  
  31.         s.connect(mail_host)  
  32.         s.login(mail_user,mail_pass)  
  33.         s.sendmail(me, mailto_list, msg.as_string())  
  34.         s.close()  
  35.     except Exception, e:  
  36.         sys.exit()  
  37.  
  38. def conn_mysql(ip,user,passwd,sql):  
  39.     try:  
  40.         conn = MySQLdb.connect(host = ip,user = user,passwd = passwd,connect_timeout=20)  
  41.         cursor = conn.cursor()   
  42.         cursor.execute(sql)  
  43.         alldata = cursor.fetchall()  
  44.         cursor.close()  
  45.         conn.close()  
  46.         return alldata  
  47.     except:  
  48.         return 0 
  49.  
  50. def center_host():#查出资产中需要监控的IP  
  51.     ip = '192.168.1.11' 
  52.     user = 'root' 
  53.     passwd = 'xxxxx' 
  54.     sql="SELECT ip FROM zichan.hosts WHERE STATUS=0" 
  55.     center_hostlist = conn_mysql(ip,user,passwd,sql)  
  56.     center = []  
  57.     for center_host in center_hostlist:  
  58.         center.append(center_host[0])  
  59.     center.sort()  
  60.     return center  
  61.  
  62. def zabbix_host():#查出zabbix数据库中正在监控的IP  
  63.     ip = '192.168.1.2' 
  64.     user = 'root' 
  65.     passwd = '1q2w3e4r' 
  66.     sql="SELECT HOST FROM zabbix.hosts WHERE STATUS=0" 
  67.     zabbix_hostlist = conn_mysql(ip,user,passwd,sql)  
  68.     zabbix = []  
  69.     for zabbix_host in zabbix_hostlist:  
  70.         zabbix.append(zabbix_host[0])  
  71.     zabbix.sort()  
  72.     return zabbix  
  73.  
  74. def main():  
  75.     center_hostlist = center_host()  
  76.     zabbix_hostlist = zabbix_host()  
  77.     #center_hostlist = ['192.168.1.21']  
  78.     #zabbix_hostlist = ['192.168.1.43']  
  79.     difference = list(set(center_hostlist) ^ set(zabbix_hostlist))  
  80.     content = "\n" 
  81.     if len(difference) != 0:  
  82.         for host in difference:  
  83.             if host in center_hostlist:  
  84.                 content = content + "%s_not_In_zabbix" % host + "\n" 
  85.             elif host in zabbix_hostlist:  
  86.                 content = content + "%s_not_Out_zabbix" % host + "\n" 
  87.     else:  
  88.         sys.exit()  
  89.     send_mail(content)  
  90.  
  91. if __name__ == "__main__":  
  92.     main()