监控需求
某项目的应用服务器CPU和内存使用率的监控,通过zabbix系统监控记录应用服务器上进程的CPU和内存的使用情况,并以图表的形式实时展现,以便于我们分析服务器的性能瓶颈。
监控方式
利用zabbix监控系统的自动发现功能,首先编写shell脚本获取服务器的CPU和内存资源使用率最大的进程,以json的格式输出,然后对这些进程的CPU和内存资源使用情况进行监控。(本文监控的进程为Linux服务器中资源使用率最高的10个进程。)
缺点
不适用于监控固定的进程
首先使用top命令查看进程状态,再取出进程的%CPU(该值表示单个CPU的进程从上次更新到现在的CPU时间占用百分比) 和%MEM值。
1
2
3
4
5
6
7
8
9
10
11
12
13
14hmracdb2:~ # 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 cached
PID 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自动发现进程
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19# 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
do
printf "\n\t\t{"
printf "\"{#PROCESS_NAME}\":\"${proc_array[$i]}\"}"
if [ $i -lt $[$length-1] ];then