zabbix
web
zabbix.conf.php配置文件
<?php // Zabbix GUI configuration file. global $DB; $DB['TYPE'] = 'MYSQL'; $DB['SERVER'] = 'localhost'; $DB['PORT'] = '3336'; $DB['DATABASE'] = 'zabbix'; $DB['USER'] = 'zabbix'; $DB['PASSWORD'] = 'zadmin'; // Schema name. Used for IBM DB2 and PostgreSQL. $DB['SCHEMA'] = ''; $ZBX_SERVER = '118.190.141.165'; $ZBX_SERVER_PORT = '10055'; $ZBX_SERVER_NAME = ''; $IMAGE_FORMAT_DEFAULT = IMAGE_FORMAT_PNG;
zabbix_server.conf配置文件
ListenPort=10055 LogFile=/var/log/zabbix/zabbix_server.log LogFileSize=100 PidFile=/var/run/zabbix/zabbix_server.pid DBHost=localhost DBName=zabbix DBUser=zabbix DBPassword=zadmin DBSocket=/var/lib/mysql/mysql.sock DBPort=3336 SNMPTrapperFile=/var/log/snmptrap/snmptrap.log ListenIP=0.0.0.0 Timeout=4 AlertScriptsPath=/usr/lib/zabbix/alertscripts ExternalScripts=/usr/lib/zabbix/externalscripts #FpingLocation=/usr/sbin/fping #Fping6Location=/usr/sbin/fping6 LogSlowQueries=3000 User=zabbix StartPollers=10 #StartPollersUnreachable=10
告警脚本(位置在/usr/lib/zabbix/alertscripts)里
邮件脚本sendmail.py
#!/usr/bin/python import smtplib import sys from email.mime.text import MIMEText SMTPserver = 'vps2.chuixifeng.win' sender = 'lczs@chuixifeng.win' password = "lczs9312" destination = sys.argv[1] adddest='411355158@qq.com' message = sys.argv[3] msg = MIMEText(message) msg['Subject'] = sys.argv[2] msg['From'] = sender mailserver = smtplib.SMTP(SMTPserver, 587) mailserver.ehlo() mailserver.starttls() mailserver.login(sender, password) mailserver.sendmail(sender,destination, msg.as_string()) mailserver.sendmail(sender,adddest, msg.as_string()) mailserver.quit()
短信脚本sendsms.py
#!/usr/bin/env python # -*- coding: utf-8 -*- import sys import urllib import urllib2 smslist=['18232376708','18911407172','18710030645'] def sendsms(phone,subject,message): msgFormat='0' corpID='502741' loginName='zabbix' password='zabbix' gbk_message=message.decode('utf-8').encode('gbk') values = {'msgFormat':msgFormat, 'corpID':corpID, 'loginName':loginName, 'password':password, 'Mobs':phone, 'msg':gbk_message} data = urllib.urlencode(values) post_url = 'http://118.190.135.109:8081/LczsInfer/sms/putMt.do' try: conn = urllib2.urlopen(post_url,data) print conn.read() except Exception , e: print e if __name__ == '__main__': phone = sys.argv[1] subject = sys.argv[2] message = sys.argv[3] for i in smslist: sendsms(i,subject,message)
zabbix-agent
配置文件
PidFile=/var/run/zabbix/zabbix_agentd.pid LogFile=/var/log/zabbix/zabbix_agentd.log LogFileSize=100 Server=10.31.81.127,118.190.141.165 ListenPort=10056 ListenIP=0.0.0.0 Hostname=YiDianTong_115.29.112.119 User=zabbix Include=/etc/zabbix/zabbix_agentd.d/ UserParameter =check_process[*],/usr/bin/python /etc/zabbix/checkprocess.py $1 $2
checkprocess.py查进程的脚本
#!/usr/bin/python #Auth:yangrong #function:check process_nameor check process_port #date:2014-8-18 import os,sys,commands def help(): print "Usage: " print " %s process_name [process_port]"%sys.argv[0] print "Example: " print " %s mysql ;If the process_nameexists, output 1, otherwise 0"%sys.argv[0] print " %s nginx 80 ;If the process_port exists, output 1,otherwise 0"%sys.argv[0] print " %s mysql 3306 "%sys.argv[0] def check_process_name(): process_num=commands.getstatusoutput("ps -ef|grep -v grep |grep -v %s|grep -v '\[%s\]'|grep %s|wc -l "%(sys.argv[0],sys.argv[1],sys.argv[1])) #print process_num if not process_num[1]: print "0" return if int(process_num[1]) >= 1: print "1" else: print "0" def check_process_port(): process_num=commands.getstatusoutput("netstat -lnt|grep -v grep|grep ':%s '|wc -l"%sys.argv[2]) if int(process_num[1]) >=1: print "1" else: print "0" ###start execute if len(sys.argv) == 2: check_process_name() sys.exit() elif len(sys.argv) == 3: check_process_port() sys.exit() else: help() sys.exit()
zabbix页面
配置-主机群组
配置-主机
配置-主机-监控项
1.端口监控(例如nginx,tomcat,redis等 ),直接用系统自带的键值net.tcp.listen[*]就行,格式:net.tcp.listen[进程端口]
键值-选择添加
配置-主机-触发器
添加-选择(刚添加好的监控项)-最新的T值=N N=0
2.特殊进程(调用我们服务器上写的Python脚本checkprocess.py)
因为不是zabbix系统自带的所以需要我们去自定义键值,格式:check_process[*],*代表进程名字,因为脚本里边是ps查的进程,如下图的通道进程
触发器,也是找到刚添加的通道监控项,然后当监控项的T值等于0是时触发器就触发
配置-动作
动作这个配置,简而言之就是当你的触发器触发之后需要做的事情,是要发短信告诉你还是发邮件告诉你(这里是发短信)
名称:create by ldh sms 默认接收人:{TRIGGER.STATUS}: {TRIGGER.NAME} 默认信息:【联诚智胜】{TRIGGER.NAME},起来干活了!偷偷告诉你服务器IP:{HOST.NAME1}。 恢复主题:{TRIGGER.STATUS}: {TRIGGER.NAME} 恢复信息:【联诚智胜】{TRIGGER.NAME}的问题已解决。
动作-条件
动作-操作
可以选择发送给哪个用户
仅送到可以选择你要发送的方式是什么(如短信,邮件等)
这里我们选的是sendsms(就是上边写的那个服务器上的报警脚本)
管理-用户群组
用户群组-用户群组
用户群组-权限
管理-用户
用户-用户
用户-报警媒介
类型选择:sendsms
收件人:手机号
用户-权限
管理-报警媒介类型
sendsms服务器自定义的监控脚本
名称:sendsms(跟脚本对应) 类型:脚本 脚本名称:sendsms.py(跟脚本名对应) 脚本参数: {ALERT.SENDTO} {ALERT.SUBJECT} {ALERT.MESSAGE}