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页面

配置-主机群组

zabbix程序监控及告警_zabbix报警

zabbix程序监控及告警_zabbix_02

配置-主机

zabbix程序监控及告警_zabbix报警_03

配置-主机-监控项

1.端口监控(例如nginx,tomcat,redis等 ),直接用系统自带的键值net.tcp.listen[*]就行,格式:net.tcp.listen[进程端口]

zabbix程序监控及告警_zabbix_04

键值-选择添加

zabbix程序监控及告警_zabbix监控程序_05

配置-主机-触发器

zabbix程序监控及告警_zabbix监控程序_06

添加-选择(刚添加好的监控项)-最新的T值=N    N=0

zabbix程序监控及告警_zabbix监控程序_07

2.特殊进程(调用我们服务器上写的Python脚本checkprocess.py)

因为不是zabbix系统自带的所以需要我们去自定义键值,格式:check_process[*],*代表进程名字,因为脚本里边是ps查的进程,如下图的通道进程

zabbix程序监控及告警_zabbix_08

zabbix程序监控及告警_zabbix监控程序_09

触发器,也是找到刚添加的通道监控项,然后当监控项的T值等于0是时触发器就触发

zabbix程序监控及告警_zabbix报警_10

zabbix程序监控及告警_zabbix监控程序_11

配置-动作

zabbix程序监控及告警_zabbix报警_12

动作这个配置,简而言之就是当你的触发器触发之后需要做的事情,是要发短信告诉你还是发邮件告诉你(这里是发短信)

zabbix程序监控及告警_zabbix报警_13

名称:create by ldh sms
默认接收人:{TRIGGER.STATUS}: {TRIGGER.NAME}
默认信息:【联诚智胜】{TRIGGER.NAME},起来干活了!偷偷告诉你服务器IP:{HOST.NAME1}。
恢复主题:{TRIGGER.STATUS}: {TRIGGER.NAME}
恢复信息:【联诚智胜】{TRIGGER.NAME}的问题已解决。

动作-条件

zabbix程序监控及告警_zabbix监控程序_14

动作-操作

zabbix程序监控及告警_zabbix报警_15

可以选择发送给哪个用户

仅送到可以选择你要发送的方式是什么(如短信,邮件等)

这里我们选的是sendsms(就是上边写的那个服务器上的报警脚本)

zabbix程序监控及告警_zabbix监控程序_16

zabbix程序监控及告警_zabbix报警_17

管理-用户群组

zabbix程序监控及告警_zabbix_18

用户群组-用户群组

zabbix程序监控及告警_zabbix监控程序_19

用户群组-权限

zabbix程序监控及告警_zabbix监控程序_20

管理-用户

zabbix程序监控及告警_zabbix监控程序_21

用户-用户

zabbix程序监控及告警_zabbix监控程序_22

用户-报警媒介

zabbix程序监控及告警_zabbix_23

类型选择:sendsms

收件人:手机号

zabbix程序监控及告警_zabbix报警_24

用户-权限

zabbix程序监控及告警_zabbix_25

管理-报警媒介类型

sendsms服务器自定义的监控脚本

zabbix程序监控及告警_zabbix监控程序_26

zabbix程序监控及告警_zabbix_27

名称:sendsms(跟脚本对应)
类型:脚本
脚本名称:sendsms.py(跟脚本名对应)
脚本参数:
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}

zabbix程序监控及告警_zabbix监控程序_28