目前生产环直要监控指标

1、zabbix_agentd.conf

UserParameter=system1.uname,/bin/uname -r
###Recv-q
#UserParameter=recv-q,ss -nl|awk '{print $2}'|grep -v "Recv-Q"|awk '{if($1>0) {print 1}}'|wc -l
####memory
UserParameter=master.memtotal,echo "scale=2;`/usr/local/zabbix/script/memory.sh Memtotal` /1024" | bc
UserParameter=master.memuse,echo "scale=2;`/usr/local/zabbix/script/memory.sh Memuse` /1024" | bc
UserParameter=master.memfree,echo "scale=2;`/usr/local/zabbix/script/memory.sh Memfree` /1024" | bc
UserParameter=master.bufferuse,echo "scale=2;`/usr/local/zabbix/script/memory.sh Bufferuse` /1024" | bc
UserParameter=master.bufferfree,echo "scale=2;`/usr/local/zabbix/script/memory.sh Bufferfree` /1024" | bc
####disk
#UserParameter=dcserver4.root.total,/bin/df -lh  | sed -n 2p | awk '{print $2}' | sed s/G//g
#UserParameter=dcserver4.root.use,/bin/df -lh  | sed -n 2p | awk '{print $3}' | sed s/G//g
#UserParameter=dcserver4.root.use_per,/bin/df -lh  | sed -n 2p | awk '{print $(NF-1)}' | sed s/%//g
 
#UserParameter=dcserver4.data0.total,/bin/df -lh  | sed -n 5p | awk '{print $2}' | sed s/G//g 
#UserParameter=dcserver4.data0.use,/bin/df -lh  | sed -n 5p | awk '{print $3}' | sed s/G//g 
#UserParameter=dcserver4.data0.use_per,/bin/df -lh  | sed -n 5p | awk '{print $(NF-1)}' | sed s/%//g
#UserParameter=dcserver4.data1.total,/bin/df -lh  | sed -n 6p | awk '{print $2}' | sed s/G//g 
#UserParameter=dcserver4.data1.use,/bin/df -lh  | sed -n 6p | awk '{print $3}' | sed s/M//g
#UserParameter=dcserver4.data1.use_per,/bin/df -lh  | sed -n 6p | awk '{print $(NF-1)}' | sed s/%//g
 
###CPU load
UserParameter=master.cpu1,/usr/bin/w  | sed -n 1p | awk -F ":"  '{print $5}' | awk -F "," '{print $1}'
UserParameter=master.cpu5,/usr/bin/w  | sed -n 1p | awk -F ":"  '{print $5}' | awk -F "," '{print $2}'
UserParameter=master.cpu15,/usr/bin/w  | sed -n 1p | awk -F ":"  '{print $5}' | awk -F "," '{print $3}'

###### uptime
UserParameter=master.uptime,/usr/bin/w | sed -n 1p | awk -F ","  '{print $1}' | awk -F  " " '{print $(NF-1)}'
####DISK IO
UserParameter=disk.pgpgin,cat /proc/vmstat | grep pgpgin | awk -F " " '{print $2}'
UserParameter=disk.pgpgout,cat /proc/vmstat | grep pgpgout| awk -F " " '{print $2}'
UserParameter=disk.pswpin,cat /proc/vmstat | grep pswpin |awk '{print $2}'
UserParameter=disk.pswpout,cat /proc/vmstat | grep pswpout |awk '{print $2}'
###TCP,UDP
UserParameter=passive.tcp.conn,cat /proc/net/snmp | grep Tcp | awk -F: '{print $2}'|awk -F " " '{print $6}'| grep -v PassiveOpens
UserParameter=tcp.conn,cat /proc/net/snmp | grep Tcp | awk -F: '{print $2}'|awk -F " " '{print $9}'| grep -v CurrEstab
UserParameter=udp.receive,cat /proc/net/snmp | grep Udp:|awk -F: '{print $2}'|awk -F " " '{print $1}'|grep -v InDatagrams
UserParameter=udp.send,cat /proc/net/snmp | grep Udp:|awk -F: '{print $2}'|awk -F " " '{print $4}'|grep -v OutDatagrams
UserParameter=custom.vfs.dev.read.ms[*],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$7}'
UserParameter=custom.vfs.dev.io.active[*],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$12}'
UserParameter=custom.vfs.dev.io.ms[*],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$13}'
UserParameter=custom.vfs.dev.read.sectors[*],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$6}'
####Dynamic monitoring of disk performance
UserParameter=io.avgrq-sz[*],/usr/bin/tail /tmp/iostat_output | grep $1 |tail -1|awk '{print $$8}'
UserParameter=io.avgqu-sz[*],/usr/bin/tail /tmp/iostat_output | grep $1 | tail -1 | awk '{print $$9}'
UserParameter=io.util[*],/usr/bin/tail /tmp/iostat_output |grep $1 | tail -1 | awk '{print $$12}'
###vmstat Performance status

####check disk status##
UserParameter=check_disk_status,mount | awk '{print $NF}'|cut -c 2-3|awk '{if($1~/ro/) {print 1}}'|wc -l|awk '{if($1<=0) {print 0 } else {print 1}}'

######check servers status###
UserParameter=check_ip_exsit[*],nmap -sn $1 | grep down | wc -l
####mysql
#UserParameter=zabbix_low_discovery[*],/bin/bash /usr/local/zabbix/script/zabbix_low_discovery.sh $1
#UserParameter=mysql_stats[*],mysql -h 127.0.0.1 -P $1 -uzabbix -phuidong2013 -e "show global status"|grep "\<$2\>"|cut  -f2
UserParameter=mysql_stats[*],sudo /usr/local/mysql/bin/mysql --login-path=local -P $1 -e "show global status" |grep "\<$2\>" |cut -f2
UserParameter=mysql_stats_slave[*],sudo /usr/local/mysql/bin/mysql --login-path=local -P $1 -e "show slave global status\G" |grep "\<$2\>" |awk '{if($NF=="Yes"){print 1} else {print 0}}'
#####redis
UserParameter=redis_stats[*],(echo info;sleep 1) | telnet 192.168.1.205 $1 2>&1 | grep $2|cut -d : -f2

#######follow is monitor hardware 
UserParameter=hardware_battery,omreport chassis batteries|awk '/^Status/{if($NF=="Ok") {print 1} else {print 0}}'
UserParameter=hardware_cpu_model,awk -v hardware_cpu_crontol=`sudo omreport  chassis biossetup|awk '/C State/{if($NF=="Enabled") {print 0} else {print  1}}'` -v hardware_cpu_c1=`sudo omreport chassis biossetup|awk '/C1[-|E]/{if($NF=="Enabled") {print 0} else {print 1}}'` 'BEGIN{if(hardware_cpu_crontol==0 && hardware_cpu_c1==0) {print 0} else {print 1}}'
UserParameter=hardware_fan_health,awk -v hardware_fan_number=`omreport chassis fans|grep -c "^Index"` -v hardware_fan=`omreport chassis fans|awk '/^Status/{if($NF=="Ok") count+=1}END{print count}'` 'BEGIN{if(hardware_fan_number==hardware_fan) {print 1} else {print 0}}'
UserParameter=hardware_memory_health,awk -v hardware_memory=`omreport chassis memory|awk '/^Health/{print $NF}'` 'BEGIN{if(hardware_memory=="Ok") {print 1} else {print 0}}'
UserParameter=hardware_nic_health,awk -v hardware_nic_number=`omreport chassis nics |grep -c "Interface Name"` -v hardware_nic=`omreport chassis nics |awk '/^Connection Status/{print $NF}'|wc -l` 'BEGIN{if(hardware_nic_number==hardware_nic) {print 1} else {print 0}}'
UserParameter=hardware_cpu,omreport chassis processors|awk '/^Health/{if($NF=="Ok") {print 1} else {print 0}}'
UserParameter=hardware_power_health,awk -v hardware_power_number=`omreport chassis pwrsupplies|grep -c "Index"` -v hardware_power=`omreport chassis pwrsupplies|awk '/^Status/{if($NF=="Ok") count+=1}END{print count}'` 'BEGIN{if(hardware_power_number==hardware_power) {print 1} else {print 0}}'
UserParameter=hardware_temp,omreport chassis temps|awk '/^Status/{if($NF=="Ok") {print 1} else {print 0}}'|head -n 1
UserParameter=hardware_physics_health,awk -v hardware_physics_disk_number=`omreport storage pdisk controller=0|grep-c "^ID"` -v hardware_physics_disk=`omreport storage pdisk controller=0|awk '/^Status/{if($NF=="Ok") count+=1}END{print count}'` 'BEGIN{if(hardware_physics_disk_number==hardware_physics_disk) {print 1} else {print 0}}'
UserParameter=hardware_virtual_health,awk -v hardware_virtual_disk_number=`omreport storage vdisk controller=0|grep -c "^ID"` -v hardware_virtual_disk=`omreport storage vdisk controller=0|awk '/^Status/{if($NF=="Ok") count+=1}END{print count}'` 'BEGIN{if(hardware_virtual_disk_number==hardware_virtual_disk) {print 1} else {print 0}}'

2、用到lld发现脚本

[root@dcserver2 script]# vim zabbix_low_discovery.sh
#!/bin/bash
#Fucation:zabbix low-level discovery
memcache() {
            port=($(sudo netstat -tpln | awk -F "[ :]+" '/[m]emcached/ && /0.0.0.0/ {print $5}'))
            printf '{\n'
            printf '\t"data":[\n'
               for key in ${!port[@]}
                   do
                       if [[ "${#port[@]}" -gt 1 && "${key}" -ne "$((${#port[@]}-1))" ]];then
                          printf '\t {\n'
                          printf "\t\t\t\"{#MEMPORT}\":\"${port[${key}]}\"},\n"
 
                     else [[ "${key}" -eq "((${#port[@]}-1))" ]]
                          printf '\t {\n'
                          printf "\t\t\t\"{#MEMPORT}\":\"${port[${key}]}\"}\n"
 
                       fi
               done
 
                          printf '\t ]\n'
                          printf '}\n'
}
 
redis() {
            port=($(sudo netstat -tpln | awk -F "[ :]+" '/[r]edis/ && /0.0.0.0/ {print $5}'|grep ^7))
            printf '{\n'
            printf '\t"data":[\n'
               for key in ${!port[@]}
                   do
                       if [[ "${#port[@]}" -gt 1 && "${key}" -ne "$((${#port[@]}-1))" ]];then
                          printf '\t {\n'
                          printf "\t\t\t\"{#REDISPORT}\":\"${port[${key}]}\"},\n"
 
                     else [[ "${key}" -eq "((${#port[@]}-1))" ]]
                          printf '\t {\n'
                          printf "\t\t\t\"{#REDISPORT}\":\"${port[${key}]}\"}\n"
 
                       fi
               done
 
                          printf '\t ]\n'
                          printf '}\n'
}
node() {
            port=($(sudo netstat -tpln | awk -F "[ :]+" '/[n]ode/ && /0.0.0.0/ {print $5}'))
            printf '{\n'
            printf '\t"data":[\n'
               for key in ${!port[@]}
                   do
                       if [[ "${#port[@]}" -gt 1 && "${key}" -ne "$((${#port[@]}-1))" ]];then
                          printf '\t {\n'
                          printf "\t\t\t\"{#NODEPORT}\":\"${port[${key}]}\"},\n"
                     else [[ "${key}" -eq "((${#port[@]}-1))" ]]
                          printf '\t {\n'
                          printf "\t\t\t\"{#NODEPORT}\":\"${port[${key}]}\"}\n"
                       fi
               done
                          printf '\t ]\n'
                          printf '}\n'
}
mysql() {
            port=($(sudo netstat -tpln | awk -F "[ :]+" '/[m]ysql/ {print $4}'))
            printf '{\n'
            printf '\t"data":[\n'
               for key in ${!port[@]}
                   do
                       if [[ "${#port[@]}" -gt 1 && "${key}" -ne "$((${#port[@]}-1))" ]];then
                          printf '\t {\n'
                          printf "\t\t\t\"{#MYSQLPORT}\":\"${port[${key}]}\"},\n"
                     else [[ "${key}" -eq "((${#port[@]}-1))" ]]
                          printf '\t {\n'
                          printf "\t\t\t\"{#MYSQLPORT}\":\"${port[${key}]}\"}\n"
                       fi
               done
                          printf '\t ]\n'
                          printf '}\n'
}
sshd() {
            port=($(sudo netstat -tpln | awk -F "[ :]+" '/sshd/ && /0.0.0.0/ {print $5}'))
            printf '{\n'
            printf '\t"data":[\n'
               for key in ${!port[@]}
                   do
                       if [[ "${#port[@]}" -gt 1 && "${key}" -ne "$((${#port[@]}-1))" ]];then
                          printf '\t {\n'
                          printf "\t\t\t\"{#SSHDPORT}\":\"${port[${key}]}\"},\n"
                     else [[ "${key}" -eq "((${#port[@]}-1))" ]]
                          printf '\t {\n'
                          printf "\t\t\t\"{#SSHDPORT}\":\"${port[${key}]}\"}\n"
                       fi
               done
                          printf '\t ]\n'
                          printf '}\n'
}
mongodb() {
            port=($(sudo netstat -tpln | awk -F "[ :]+" '/mongo/ && /0.0.0.0/ {print $5}'))
            printf '{\n'
            printf '\t"data":[\n'
               for key in ${!port[@]}
                   do
                       if [[ "${#port[@]}" -gt 1 && "${key}" -ne "$((${#port[@]}-1))" ]];then
                          printf '\t {\n'
                          printf "\t\t\t\"{#MONGODBPORT}\":\"${port[${key}]}\"},\n"
                     else [[ "${key}" -eq "((${#port[@]}-1))" ]]
                          printf '\t {\n'
                          printf "\t\t\t\"{#MONGODBPORT}\":\"${port[${key}]}\"}\n"
                       fi
               done
                          printf '\t ]\n'
                          printf '}\n'
}
partition() {
            port=($(grep -E "(vd[a-z]$|sd[a-z]$)" /proc/partitions|awk '{print $4}'))
            printf '{\n'
            printf '\t"data":[\n'
               for key in ${!port[@]}
                   do
                       if [[ "${#port[@]}" -gt 1 && "${key}" -ne "$((${#port[@]}-1))" ]];then
                          printf '\t {\n'
                          printf "\t\t\t\"{#PARTITIONNAME}\":\"${port[${key}]}\"},\n"
                     else [[ "${key}" -eq "((${#port[@]}-1))" ]]
                          printf '\t {\n'
                          printf "\t\t\t\"{#PARTITIONNAME}\":\"${port[${key}]}\"}\n"
                       fi
               done
                          printf '\t ]\n'
                          printf '}\n'
}
twemproxy() {
            port=($(sudo netstat -tpln | awk -F "[ :]+" '/nutcracker/ && /0.0.0.0/ {print $5}'|uniq))
            printf '{\n'
            printf '\t"data":[\n'
               for key in ${!port[@]}
                   do
                       if [[ "${#port[@]}" -gt 1 && "${key}" -ne "$((${#port[@]}-1))" ]];then
                          printf '\t {\n'
                          printf "\t\t\t\"{#TWEMPROXYPORT}\":\"${port[${key}]}\"},\n"
                     else [[ "${key}" -eq "((${#port[@]}-1))" ]]
                          printf '\t {\n'
                          printf "\t\t\t\"{#TWEMPROXYPORT}\":\"${port[${key}]}\"}\n"
                       fi
               done
                          printf '\t ]\n'
                          printf '}\n'
}
check_ip_exsit() {
            ip=($(sudo nmap -sn 192.168.1.162-210|grep "192.168.1"|awk -F " " '{print $NF}'|awk -F "[()]" '{print $2}'))
            printf '{\n'
            printf '\t"data":[\n'
               for key in ${!ip[@]}
                   do
                       if [[ "${#ip[@]}" -gt 1 && "${key}" -ne "$((${#ip[@]}-1))" ]];then
                          printf '\t {\n'
                          printf "\t\t\t\"{#IPNAME}\":\"${ip[${key}]}\"},\n"
                     else [[ "${key}" -eq "((${#ip[@]}-1))" ]]
                          printf '\t {\n'
                          printf "\t\t\t\"{#IPNAME}\":\"${ip[${key}]}\"}\n"
                       fi
               done
                          printf '\t ]\n'
                          printf '}\n'
}
case $1 in
memcache)
memcache
;;
redis)
redis
;;
node)
node
;;
mysql)
mysql
;;
sshd)
sshd
;;
mongodb)
mongodb
;;
partition)
partition
;;
twemproxy)
twemproxy
;;
check_ip_exsit)
check_ip_exsit
;;
*)
echo "Usage:`basename $0` {memcache|redis|node|mysql|sshd|mongodb|partition|twemproxy|check_ip_exsit}"
;;
esac

3、发送邮件脚本

[root@dcserver2 script]# vim zabbix_sendmail
#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
Zabbix SMTP Alert script from 126.
"""
import sys
import smtplib
from email.mime.text import MIMEText
 
 
mail_host="smtp.163.com"
mail_user="******@163.com"
mail_pass="*****"
mail_postfix="pop.163.com"
 
def send_mail(to_list,sub,content):
    '''
    to_list:sent to who
    sub:subject
    content:content
    send_mail("[email protected]","sub","content")
    '''
    address=mail_user+"<"+mail_user+"@"+mail_postfix+">"
    msg = MIMEText(content)
    msg['Subject'] = sub
    msg['From'] = address
    msg['To'] =to_list
    try:
        s = smtplib.SMTP()
        s.connect(mail_host)
        s.login(mail_user,mail_pass)
        s.sendmail(address, to_list, msg.as_string())
        s.close()
        return True
    except Exception, e:
        print str(e)
        return False
if __name__ == '__main__':
        send_mail(sys.argv[1], sys.argv[2], sys.argv[3])