zabbix自动发现与监控内存和CPU使用率最高的进程
监控需求
某项目的应用服务器CPU和内存使用率的监控,通过zabbix系统监控记录应用服务器上进程的CPU和内存的使用情况,并以图表的形式实时展现,以便于我们分析服务器的性能瓶颈。
监控方式
利用zabbix监控系统的自动发现功能,首先编写shell脚本获取服务器的CPU和内存资源使用率最大的进程,以json的格式输出,然后对这些进程的CPU和内存资源使用情况进行监控。(本文监控的进程为Linux服务器中资源使用率最高的10个进程。)
缺点
不适用于监控固定的进程
首先使用top命令查看进程状态,再取出进程的%CPU(该值表示单个CPU的进程从上次更新到现在的CPU时间占用百分比) 和%MEM值。
hmracdb2:~ # top
top - 13:57:01 up 32 days, 5:21, 2 users, load average: 0.14, 0.26, 0.34
Tasks: 206 total, 1 running, 205 sleeping, 0 stopped, 0 zombie
Cpu(s): 3.7%us, 2.7%sy, 0.0%ni, 87.2%id, 6.3%wa, 0.0%hi, 0.1%si, 0.0%st
Mem: 3926096k total, 3651612k used, 274484k free, 788120k buffers
Swap: 4193276k total, 1369968k used, 2823308k free, 1443884k cachedPID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2365 root 20 0 854m 315m 12m S 3 8.2 1252:49 ohasd.bin 5307 oracle 20 0 1783m 22m 22m S 3 0.6 1106:03 oracle 4532 root 20 0 676m 31m 13m S 2 0.8 853:35.32 crsd.bin 4272 grid RT 0 437m 282m 52m S 2 7.4 1006:47 ocssd.bin 5279 oracle 20 0 1771m 60m 48m S 2 1.6 477:11.19 oracle 5122 oracle 20 0 654m 15m 12m S 1 0.4 537:40.85 oraagent.bin
由于top是交互的命令,我们把top命令的结果输出到一个文件上
hmracdb2:~ # top -b -n 1 > /tmp/.top.txt
第一个脚本,获取监控进程内存资源占有率前10的进程,输出格式为json格式,用于zabbix自动发现进程
# 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++))
doprintf "\n\t\t{"printf "\"{#PROCESS_NAME}\":\"${proc_array[$i]}\"}"if [ $i -lt $[$length-1] ];thenprintf ","fi
doneprintf "\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
doecho -en '\t\t{"{#PROCESS_NAME}":"'$line'"}'count=$(( $count + 1 ))if [ $count -lt $length ];thenecho ','fi
done
echo -e '\n\t]'
echo '}'
输出的效果如下
[root@Zabbix_19F ~]# ./discovery_process.sh
{
"data":[
{"{#PROCESS_NAME}":"mysqld"},
{"{#PROCESS_NAME}":"php-fpm"},
{"{#PROCESS_NAME}":"zabbix_server"},
{"{#PROCESS_NAME}":"nginx"},
{"{#PROCESS_NAME}":"sshd"},
{"{#PROCESS_NAME}":"bash"},
{"{#PROCESS_NAME}":"zabbix_agentd"},
{"{#PROCESS_NAME}":"qmgr"},
{"{#PROCESS_NAME}":"pickup"},
{"{#PROCESS_NAME}":"master"}
]
}
第二个脚本,用于zabbix监控的具体监控项目(item)的key,通过脚本获取第一个脚本自动发现的进程的CPU和内存的具体使用情况与使用率。
#!/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 inmem)if [ "$mode" = "pre" ];thenmempreelif [ "$mode" = "avg" ];thenmemusefi;;cpu)if [ "$mode" = "pre" ];thencpupreelif [ "$mode" = "avg" ];thencpuusefi;;*)echo -e "Usage: $0 [mode : pre|avg] [mem|cpu] [process]"
esac
我们先来查看一下当前系统的内存和CPU大小情况:
-- 内存
[root@Zabbix_19F ~]# cat /proc/meminfo | grep "MemTotal" | awk '{printf "%.f",$2/1024}'
3832
-- CPU
[root@Zabbix_19F ~]# cat /proc/cpuinfo | grep "processor" | wc -l
8
执行脚本运行效果如下(获取监控项key值)
[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
配置zabbix_agentd,在agentd客户端的etc/zabbix_agentd.conf中增加userparameter配置,增加进程自动发现的key,和进程资源检测的key。
hmracdb2:/opt/zabbix # vim etc/zabbix_agentd.conf.d/userparameter_script.conf
UserParameter=discovery.process,/opt/zabbix/scripts/discovery_process.sh
UserParameter=process.check[*],/opt/zabbix/scripts/process_check.sh $1 $2 $3
配置完之后重启agentd服务
hmracdb2:/opt/zabbix # service zabbix_agentd restart
Shutting down zabbix_agentd done
Starting zabbix_agentd done
在zabbix服务器端手动获取监控项key值数据
[root@Zabbix_19F ~]# zabbix_get -p10050 -k 'discovery.process' -s 10.xxx.xxx.xxx
{
"data":[
{"{#PROCESS_NAME}":"ohasd.bin"},
{"{#PROCESS_NAME}":"ocssd.bin"},
{"{#PROCESS_NAME}":"oracle"},
{"{#PROCESS_NAME}":"oraagent.bin"},
{"{#PROCESS_NAME}":"crsd.bin"},
{"{#PROCESS_NAME}":"orarootagent.bi"},
{"{#PROCESS_NAME}":"watchdog/3"},
{"{#PROCESS_NAME}":"watchdog/2"},
{"{#PROCESS_NAME}":"watchdog/1"},
{"{#PROCESS_NAME}":"watchdog/0"}
]
}[root@Zabbix_19F ~]# zabbix_get -p10050 -k 'process.check[pre,mem,oracle]' -s 10.xxx.xxx.xxx
2.9
[root@Zabbix_19F ~]# zabbix_get -p10050 -k 'process.check[avg,mem,oracle]' -s 10..xxx.xxx.xxx
111.186
[root@Zabbix_19F ~]# zabbix_get -p10050 -k 'process.check[avg,cpu,oracle]' -s 10..xxx.xxx.xxx
4
[root@Zabbix_19F ~]# zabbix_get -p10050 -k 'process.check[pre,cpu,oracle]' -s 10..xxx.xxx.xxx
0.01
配置完agentd后,在zabbix服务器配置Web端的模版与监控项目item
Configuration --> Templates --> Create template -->
创建完模版之后,添加自动发现规则
Discovery rules -->Create discovesy rule
Item prototypes --> Create item prototype
也可以继续添加监控的主机和所需监控项,添加完后我们可以查看下监控的历史数据
添加一个进程的CPU使用率的监控项
查看历史数据
当然还可以获取进程内存使用的具体大小情况
至此,zabbix自动发现进程内存和CPU使用情况并实时监控配置就完成了
转载自HMLinux >>> 原帖http://blog.51cto.com/7424593/1908930
zabbix自动发现与监控内存和CPU使用率最高的进程相关推荐
- zabbix自动发现并监控GPU
配置zabbix监控模板(只需要在darshboard上操作一次) 创建监控模板 在配置->模板页面,选择创建模板: 如下填写: 模板名称:自定义,我们命名为gpu discovery 群组:放 ...
- centos中bash占用cpu,Linux中显示内存和CPU使用率最高的进程和SHELL脚本例子
显示CPU占用率最高的十个进程信息 # ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head USER PID %CPU %MEM ...
- 查找Linux中内存和CPU使用率最高的进程
需求:创建一个定时任务,每30分钟输出该时刻(年月日分秒)系统中内存占用最大的四个进程名及进程占用内存 打印当前系统时间(年月日分秒) [root@localhost /]# date "+ ...
- ZABBIX自动发现Redis端口并监控
转载来源 :ZABBIX自动发现Redis端口并监控 : https://mp.weixin.qq.com/s/UDeRYn6376MBzNyRt48aAw ZABBIX自动发现Redis端口并监控 ...
- 5 zabbix 添加host_运维监控实战篇,zabbix自动发现和自动注册图文详解
一.介绍 自动发现 Zabbix自动发现就是为了解决批量监控而设计的功能之一,什么是自动发现呢,简单来说就是Zabbix Server端可以基于设定的规则,自动批量的去发现局域网若干服务器,并自动把服 ...
- zabbix自动发现oracle表空间并监控其使用率
监控需求 Oracle表空间使用率实时监控,当表空间使用率达到95%时触发告警机制.Oracle表空间分为系统默认表空间和用户创建的表空间,而表空间又有自动扩展和非自动扩展两种类型,用户(DBA)在创 ...
- zabbix 自动发现规则 触发器_运维监控实战篇,zabbix自动发现和自动注册图文详解...
一.介绍 自动发现 Zabbix自动发现就是为了解决批量监控而设计的功能之一,什么是自动发现呢,简单来说就是Zabbix Server端可以基于设定的规则,自动批量的去发现局域网若干服务器,并自动把服 ...
- 利用zabbix自动发现监控mongo数据库
但如果公司使用mongo的端口如果不一致的话,那建议使用zabbix的自动发现的功能,自动发现mongo监听的端口,并对它进行相关数据的收集. 先看一下效果图, 教你如何利用zabbix自动发现监控m ...
- zabbix自动发现规则实现批量监控主机的TCP监听端口
检查服务器所有监听端口和其对应的服务名称的脚本可以参考https://blog.zzyyxx.top/blog/post/gordy/acf57f04f9e1 现在准备加入zabbix自动发现规则并 ...
最新文章
- 深入理解 Spring Cloud 核心组件与底层原理
- Swift中使用正则表达式
- iOS 点击推送消息跳转指定界面 —总结篇
- 【笛卡尔树】【树状数组】Beautiful Pair(P4755)
- linux多线程编程之互斥锁
- 《财富》世界500强想到的
- FailSafe双机方案
- 银河麒麟v10sp1桌面安装远程控制工具todesk
- ArcGIS之栅格地图配准
- QQ空间说说自动删除代码-真的自动
- 虚拟机linux删除文件后未释放空间,【Linux命令】删除大文件后磁盘空间未释放问题...
- 概率论与数理统计期末考试复习总结
- 唯品会web前端实习生一面二面经
- 假期培训总结——初三寒假
- 新零售saas小程序如何探索数字化门店的破局之路?
- .tar和.tar.gz的区别
- java libusb_libusb中断传输
- c语言怎样计算栈的长度,C语言 栈的表示和实现详细介绍
- H网、某播放器、某数字公司是一根绳上的三个蚂蚱
- pymysql——Python连接SQL
热门文章
- html5教学案例撰写,如何撰写教学案例
- Spring中IOC和AOP的详细解释
- oracle 语句between,SQL语句:between关键词的使用
- 高速运放型号 常用轨到轨运放型号 高精密 零温漂
- Apache Pulsar 祝大家元旦快乐!(点开获取精美 Pulsar 壁纸)
- [石青微博群发软件 v2.1.8.6] 集新浪微博和腾讯微博为一体的营销工具+自动群发消息
- 游泳耳机哪个牌子好、分享几款游泳听音乐最好的耳机推荐
- 克服浮躁_克服品味差距
- php向用户发送电子邮件确认注册,php – 发送电子邮件以确认注册FOSUserBundle
- Neovim插件NvChad踩坑实录