赞
踩
本文以写脚本至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
配置完后重启
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。