zabbix_agtend端自定义监控脚本

这是一个用于Zabbix的自定义监控脚本,能够获取系统资源、网络信息、TCP连接、磁盘使用率等关键指标。通过传入不同参数,脚本可以输出如系统运行时间、CPU和内存占用率、网络接口的IPv4和IPv6地址、磁盘I/O等详细信息。
摘要由CSDN通过智能技术生成

或许会有些数据计算多余情况,因为刚写好,还有很多需要完善的地方

#!/bin/bash
#zabbix自定义通用监控脚本
#VERSION:1.0.7
#定义传入参数
#COM1为函数匹配参数
#COM2为查询参数
COM1=$1
COM2=$2
case $COM1 in 
################系统资源################
    time)
    uptime |awk -F "[ up,]+" '{print $3}'
    #系统运行时间
    ;;
    user)
    who | awk '{print $5}' | sort | uniq | wc -l
    #当前系统已经登录数量
    ;;
    address)
    who | awk '{print $1,$NF}'
    #用户登录地址
    ;;
    osinfo)
    cat /etc/redhat-release
    #当前操作系统信息
    ;;
    cpu)
    ps -aux|awk -F '[ ]+' 'BEGIN{sum=0}{sum+=$3}END{print sum}'
    #CPU占用率
    ;;
    mem)
    ps -aux|awk -F '[ ]+' 'BEGIN{sum=0}{sum+=$4}END{print sum}'
    #MEN占用率
    ;;
    cpuh)
    ps aux|sort -nr -k3|awk 'NR==1{print $2}'
    #查看占用CPU最高的进程号
    ;;
    memh)
    ps aux|sort -nr -k4|awk 'NR==1{print $2}'
    #查看占用MEM最高的进程号
    ;;
    cpuload)
    [ ! -n "$COM2" ] && COM2=3
    cores=`grep 'cpu cores' /proc/cpuinfo|awk 'NR==1{print $NF}'`
    cpumax=`echo "$cores*0.7"|bc`
    [ $COM2 -eq 1 ]  && COM2=1
    [ $COM2 -eq 5 ]  && COM2=2
    [ $COM2 -eq 15 ] && COM2=3
    [ $COM2 -ne 1 ] && [ $COM2 -ne 3 ] && [ $COM2 -ne 15 ] && COM2=3
    cpuload=`cat /proc/loadavg|awk '{print $'$COM2'}'`
    echo "$cpuload >= $cpumax"|bc
    #cpu前1、5、15分钟的负载
    ;;
################网卡信息################
    IPv4)
    [ ! -n "$COM2" ] && COM2=`ifconfig |egrep -v "^ |^$|docker"|awk -F ":" 'NR==1{print $1}'`
    ifconfig $COM2|awk 'NR==2{print $2}'
    #显示IPv4信息
    ;;
    IPv6)
    [ ! -n "$COM2" ] && COM2=`ifconfig |egrep -v "^ |^$|docker"|awk -F ":" 'NR==1{print $1}'`
    ifconfig $COM2|awk 'NR==3{print $2}'
    #显示IPv6信息
    ;;
    ehter)
    [ ! -n "$COM2" ] && COM2=`ifconfig |egrep -v "^ |^$|docker"|awk -F ":" 'NR==1{print $1}'`
    ifconfig $COM2|awk 'NR==4{print $2}'
    #显示物理网卡信息
    ;;
################TCP连接数################
    tcp)
    cat /proc/net/snmp|awk 'NR==8{print $10}'
    #打开的TCP连接数
    ;;
    opens)
    echo $((`cat /proc/net/snmp|awk 'NR==8{print $7}'`/240))
    #每秒被动打开TCP连接数
    ;;
################流量监控################
#接受流量/下行/入口/上传
    net_in)
    [ ! -n "$COM2" ] && COM2=`ifconfig |egrep -v "^ |^$|docker"|awk -F ":" 'NR==1{print $1}'`
    TIME_1=`cat /proc/net/dev|grep $COM2|awk '{print $2}'`
    sleep 1
    TIME_2=`cat /proc/net/dev|grep $COM2|awk '{print $2}'`
    echo "($TIME_2-$TIME_1)/1024*1000"|bc
    ;;
#发送流量/上行/出口/下载
    net_out)
    [ ! -n "$COM2" ] && COM2=`ifconfig |egrep -v "^ |^$|docker"|awk -F ":" 'NR==1{print $1}'`
    TIME_3=`cat /proc/net/dev|grep $COM2|awk '{print $10}'`
    sleep 1
    TIME_4=`cat /proc/net/dev|grep $COM2|awk '{print $10}'`
    echo "($TIME_4-$TIME_3)/1024*1000"|bc
    ;;
################磁盘监控################
    /)
    df -hT | grep  "/$"|awk -F '[ %]+' '{print $6}'
    #磁盘[ / ] 使用率
    ;;
    /home)
    df -hT | grep  "/home$"|awk -F '[ %]+' '{print $6}'
    #磁盘[ /home ] 使用率
    ;;
    /opt)
    df -hT | grep  "/opt$"|awk -F '[ %]+' '{print $6}'
    #磁盘[ /opt ] 使用率
    ;;
    /var)
    df -hT | grep  "/var$"|awk -F '[ %]+' '{print $6}'
    #磁盘[ /var ] 使用率
    ;;
    rKBps)
    [ ! -n "$COM2" ] && COM2=`awk '{print $3}' /proc/diskstats|grep -v "[0-9]$"`
    iostat -dxkt 1 2|grep "\b$COM2\b" |tail -1|awk '{print $6}'
    #每秒完成读数据量
    ;;
    wKBps)
    [ ! -n "$COM2" ] && COM2=`awk '{print $3}' /proc/diskstats|grep -v "[0-9]$"`
    iostat -dxkt 1 2|grep "\b$COM2\b" |tail -1|awk '{print $7}'
    #每秒完成写数据量
    ;;
    avgrq-sz)
    [ ! -n "$COM2" ] && COM2=`awk '{print $3}' /proc/diskstats|grep -v "[0-9]$"`
    iostat -dxkt 1 2|grep "\b$COM2\b" |tail -1|awk '{print $8}'
    #平均每次IO操作的数据量
    ;;
    avgqu-sz)
    [ ! -n "$COM2" ] && COM2=`awk '{print $3}' /proc/diskstats|grep -v "[0-9]$"`
    iostat -dxkt 1 2|grep "\b$COM2\b" |tail -1|awk '{print $9}'
    #平均等待处理IO请求队列长度
    ;;
    await)
    [ ! -n "$COM2" ] && COM2=`awk '{print $3}' /proc/diskstats|grep -v "[0-9]$"`
    iostat -dxkt 1 2|grep "\b$COM2\b" |tail -1|awk '{print $10}'
    #平均每次IO请求等待时间(单位毫秒)
    ;;
    svctm)
    [ ! -n "$COM2" ] && COM2=`awk '{print $3}' /proc/diskstats|grep -v "[0-9]$"`
    iostat -dxkt 1 2|grep "\b$COM2\b" |tail -1|awk '{print $11}'
    #平均每次IO请求的处理时间(单位毫秒)
    ;;
    util)
    [ ! -n "$COM2" ] && COM2=`awk '{print $3}' /proc/diskstats|grep -v "[0-9]$"`
    echo "`iostat -dxkt 1 2|grep "\b$COM2\b" |tail -1|awk '{print $NF}'`"
    #磁盘忙碌情况,采用周期内用于IO操作的时间比率,即IO队列非空的时间比率
    #一般超过80%表示该磁盘可能处于繁忙状态
    ;;
    help|*)
    echo -e "    VERSION:1.0.1
=======================================================================
    setup:key=agent_status[time]|默认第一网卡|
    setup:key=agent_status[IPv4,]
    setup:key=agent_status[IPv4,em1]
    setup:key=agent_status[cpuload,5]
    time:      系统运行时间
    user:      当前系统已经登录数量
    address:   用户登录地址
    osinfo:    当前操作系统信息
    cpu:       查看CPU占用率
    mem:       查看内存占用率
    cpuh:      查看占用CPU最高的进程号
    memh:      查看占用MEM最高的进程号
    cpuload:    显示最近时间CPU负载,参数2为1时,为前一分钟负载,仅支持1,5,15
    IPv4:  	显示IPv4信息
    IPv6: 	    显示IPv6信息
    ehter: 	显示物理网卡信息
    tcp:       打开的TCP连接数
    opens:     每秒被动打开的TCP连接数
    net_in:    接受流量/下行/入口(对于服务器而言)
    net_out:   发送流量/上行/出口(对于服务器而言)
=======================================================================
    setup:key=agent_status[/,]
    setup:key=agent_status[/,vda]
    /:         磁盘 [ /     ] 使用率
    /home:     磁盘 [ /home ] 使用率
    /opt:      磁盘 [ /opt  ] 使用率
    /var:      磁盘 [ /var  ] 使用率
=======================================================================
    setup:key=agent_status[rKBps,]|默认第一磁盘|
    setup:key=agent_status[rKBps,vda]
    rKBps:     每秒完成读数据量
    wKBps:     每秒完成写数据量
    avgrq-sz:  平均每次IO操作的数据量
    avgqu-sz:  平均等待处理IO请求队列长度
    await:     平均每次IO请求等待时间(单位毫秒)
    svctm:     平均每次IO请求的处理时间(单位毫秒	
    util:      磁盘忙碌情况,采用周期内用于IO操作的时间比率
		即IO队列非空的时间比率				
=======================================================================
    "
    ;;
esac
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值