Zabbix监控进程CPU及内存

本文以写脚本至zabbix中的配置思路为主 其中一些必要的脚本及命令经供参考  最后会附上一个自动发现服务器中最占用资源的监控脚本

 

简单的zabbix搭建(docker容器内):

# docker run --name zabbix-appliance -t \
      -p 10051:10051 \
      -p 80:80 \
      -d zabbix/zabbix-appliance:latest

比较简单的4.0版本  5.0版本需要增加一些步骤  官网文档很详细 而且支持简中:https://www.zabbix.com/documentation/4.0/zh/manual/installation/containers 

 

以监控nginx进程为例:

1 脚本 截取出现在服务器中nginx的CPU利用率

#!/bin/bash
cpu=`ps aux|grep "nginx"|grep -v "grep"|awk '{sum+=$3}; END{print sum}'`
echo  $cpu

 给1脚本zabbix的权限及可执行权限。

2 进入zabbix配置文件中:/etc/zabbix/zabbix_agentd.conf(此为ubuntu路径 Centos及其他需自行查询)

增加(可在空白处直接增加或者在# UnsafeUserParameters=0下一行增加):

UserParameter=XXX,/opt/zabbix/scripts/脚本名.sh(此处XXX赋值自己起名即可,此赋值以后需要)

 

顺便修改agent的几个参数:
Server=xx.xx.xx.xx(服务端的IP)
Hostname=xx.xx.xx.xx(agent的IP)

重启zabbix_agent

3 去zabbix服务端测试脚本是否能被读取:

 zabbix_get -p10050 -k 'XXX' -s IP

-p的10050是默认端口 如果更改则输入更改后的端口号

-k 'XXX'   这里XXX是刚才在agent端的zabbix配置文件中赋的值 

IP 填写agent端的IP  “这里注意 需要查看agent配置文件中写服务端IP的格式 如果写的公网这里就要用公网 写的内网这里就是用内网

4 上一步在zabbix server端能成功返回值后就可以进入zabbix中设置:

(1)配置模板

在配置--模板--创建模板

 创建完模板后 点击刚创建的模板 然后开始配置监控项

(2)配置监控项:

配置--模板--leo--监控项--创建监控项

这一步中 键值就需要写你在agent中设置的XXX 名称和间隔和新的应用集自己起名即可 

然后去设置模板连接到主机

配置--主机--点击主机名--模板--搜索框--选择自己的模板-确定-更新

 

设置完后就可以查看数据  需要等几分钟  

先去最新数据看是否有数据产生

选择主机 选择应用集 等一分钟左右刷新一下 就可以看到最新数据。然后其他就可以在仪表盘创建图像了

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

最后附上一个转载的自动发现占资源的脚本及监控:

脚本1:

# cat discovery_process.sh 
#!/bin/bash
#system process discovery script
top -b -n 1 > /tmp/.top.txt && chown zabbix. /tmp/.top.txt
proc_array=(`tail -n +8 /tmp/.top.txt | awk '{a[$NF]+=$10}END{for(k in a)print a[k],k}'|sort -gr|head -10|cut -d" " -f2`)
length=${#proc_array[@]}
 
printf "{\n"
printf '\t'"\"data\":["
for ((i=0;i<$length;i++))
do
    printf "\n\t\t{"
    printf "\"{#PROCESS_NAME}\":\"${proc_array[$i]}\"}"
    if [ $i -lt $[$length-1] ];then
        printf ","
    fi
done
    printf "\n\t]\n"
printf "}\n"

或者(这两个脚本效果一样)

# cat discovery_process2.sh 
#!/bin/bash
#system process discovery script
top -b -n 1 > /tmp/.top.txt && chown zabbix. /tmp/.top.txt
proc_array=`tail -n +8 /tmp/.top.txt | awk '{a[$NF]+=$10}END{for(k in a)print a[k],k}'|sort -gr|head -10|cut -d" " -f2`
 
length=`echo "${proc_array}" | wc -l`
count=0
echo '{'
echo -e '\t"data":['
echo "$proc_array" | while read line
do
    echo -en '\t\t{"{#PROCESS_NAME}":"'$line'"}'
    count=$(( $count + 1 ))
    if [ $count -lt $length ];then
        echo ','
    fi
done
echo -e '\n\t]'
echo '}'

执行一下  会输出最占用资源的进程名

 

第二脚本 用于zabbix监控具体项目 

#!/bin/bash
#system process CPU&MEM use information
#mail: mail@huangming.org
mode=$1
name=$2
process=$3
mem_total=$(cat /proc/meminfo | grep "MemTotal" | awk '{printf "%.f",$2/1024}')
cpu_total=$(( $(cat /proc/cpuinfo | grep "processor" | wc -l) * 100 ))
 
function mempre {
    mem_pre=`tail -n +8 /tmp/.top.txt | awk '{a[$NF]+=$10}END{for(k in a)print a[k],k}' | grep "\b${process}\b" | cut -d" " -f1`
    echo "$mem_pre"
}
 
function memuse {
    mem_use=`tail -n +8 /tmp/.top.txt | awk '{a[$NF]+=$10}END{for(k in a)print a[k]/100*'''${mem_total}''',k}' | grep "\b${process}\b" | cut -d" " -f1`
    echo "$mem_use" | awk '{printf "%.f",$1*1024*1024}'
}
 
function cpuuse {
    cpu_use=`tail -n +8 /tmp/.top.txt | awk '{a[$NF]+=$9}END{for(k in a)print a[k],k}' | grep "\b${process}\b" | cut -d" " -f1`
    echo "$cpu_use"
}
 
function cpupre {
    cpu_pre=`tail -n +8 /tmp/.top.txt | awk '{a[$NF]+=$9}END{for(k in a)print a[k]/('''${cpu_total}'''),k}' | grep "\b${process}\b" | cut -d" " -f1`
    echo "$cpu_pre"
}
 
 
case $name in
    mem)
        if [ "$mode" = "pre" ];then
            mempre
        elif [ "$mode" = "avg" ];then
            memuse
        fi
    ;;
    cpu)
        if [ "$mode" = "pre" ];then
            cpupre
        elif [ "$mode" = "avg" ];then
            cpuuse
        fi
    ;;
    *)
        echo -e "Usage: $0 [mode : pre|avg] [mem|cpu] [process]"
esac

 执行一下第二个脚本试试:

[root@Zabbix_19F ~]# ./process_check.sh avg mem mysqld   #输出mysqld进程使用的内存(计算公式:3832*18.5/100)
708.92
[root@Zabbix_19F ~]# ./process_check.sh pre mem mysqld   #输出mysqld进程内存的使用率
18.5
[root@Zabbix_19F ~]# ./process_check.sh avg cpu mysqld   #单个CPU的mysqld进程使用率
3.9
[root@Zabbix_19F ~]# ./process_check.sh pre cpu mysqld   #所有CPU的mysqld进程的使用率
0.004875

没问题后配置agent 还是在agent的conf中配置UserParameter

UserParameter=discovery.process,/opt/zabbix/scripts/discovery_process.sh
UserParameter=process.check[*],/opt/zabbix/scripts/process_check.sh $1 $2 $3

配置完后重启 

 

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值