Eg挨蒙—Zabbix监控进程占cpu和内存大小及批量监控端口

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Eg挨蒙—Zabbix监控进程占cpu和内存大小及批量监控端口相关的知识,希望对你有一定的参考价值。

监控简介:

通过shell脚本的方式,实现对进程占cpu百分比和内存大小的监控,通过python脚本方式,实现批量监控服务器端口。

一、监控进程占cpu的百分比和内存的大小

1、在agent端编写脚本
[root@monitor sbin]$ cat /usr/local/zabbix/scripts/processtatus.sh
#!/bin/bash
#date:2020.05.21

nginx(){
ps aux|grep "nginx"|grep -v "grep"|grep -v "processstatus.sh"|awk ‘{sum+=$6}; END{print sum}‘
}
nginxcpu(){
ps aux|grep "nginx"|grep -v "grep"|grep -v "processstatus.sh"|awk ‘{sum+=$3}; END{print sum}‘
}

redis(){
ps aux|grep "redis"|grep -v "grep"|grep -v "processstatus.sh"|awk ‘{sum+=$6}; END{print sum}‘
}
rediscpu(){
ps aux|grep "redis"|grep -v "grep"|grep -v "processstatus.sh"|awk ‘{sum+=$3}; END{print sum}‘
}

tomcat_billing(){
ps aux|grep "tomcat_billing"|grep -v "grep"|grep -v "processstatus.sh"|awk ‘{sum+=$6}; END{print sum}‘
}
tomcat_billingcpu(){
ps aux|grep "tomcat_billing"|grep -v "grep"|grep -v "processstatus.sh"|awk ‘{sum+=$3}; END{print sum}‘
}

tomcat_client(){
ps aux|grep "tomcat_client"|grep -v "grep"|grep -v "processstatus.sh"|awk ‘{sum+=$6}; END{print sum}‘
}
tomcat_clientcpu(){
ps aux|grep "tomcat_client"|grep -v "grep"|grep -v "processstatus.sh"|awk ‘{sum+=$3}; END{print sum}‘
}

tomcat_ipcboss(){
ps aux|grep "tomcat_ipcboss"|grep -v "grep"|grep -v "processstatus.sh"|awk ‘{sum+=$6}; END{print sum}‘
}
tomcat_ipcbosscpu(){
ps aux|grep "tomcat_ipcboss"|grep -v "grep"|grep -v "processstatus.sh"|awk ‘{sum+=$3}; END{print sum}‘
}

tomcat_shuanghu(){
ps aux|grep "tomcat_shuanghu"|grep -v "grep"|grep -v "processstatus.sh"|awk ‘{sum+=$6}; END{print sum}‘
}
tomcat_shuanghucpu(){
ps aux|grep "tomcat_shuanghu"|grep -v "grep"|grep -v "processstatus.sh"|awk ‘{sum+=$3}; END{print sum}‘
}

SBC(){
ps aux|grep "SBC"|grep -v "grep"|grep -v "processstatus.sh"|awk ‘{sum+=$6}; END{print sum}‘
}
SBCcpu(){
ps aux|grep "SBC"|grep -v "grep"|grep -v "processstatus.sh"|awk ‘{sum+=$3}; END{print sum}‘
}

freeswitch(){
ps aux|grep "freeswitch"|grep -v "grep"|grep -v "processstatus.sh"|awk ‘{sum+=$6}; END{print sum}‘
}
freeswitchcpu(){
ps aux|grep "freeswitch"|grep -v "grep"|grep -v "processstatus.sh"|awk ‘{sum+=$3}; END{print sum}‘
}

case "$1" in
nginx)
nginx
;;
nginxcpu)
nginxcpu
;;
redis)
redis
;;
rediscpu)
rediscpu
;;
tomcat_billing)
tomcat_billing
;;
tomcat_billingcpu)
tomcat_billingcpu
;;
tomcat_client)
tomcat_client
;;
tomcat_clientcpu)
tomcat_clientcpu
;;
tomcat_ipcboss)
tomcat_ipcboss
;;
tomcat_ipcbosscpu)
tomcat_ipcbosscpu
;;
tomcat_shuanghu)
tomcat_shuanghu
;;
tomcat_shuanghucpu)
tomcat_shuanghucpu
;;
SBC)
SBC
;;
SBCcpu)
SBCcpu
;;
freeswitch)
freeswitch
;;
freeswitchcpu)
freeswitchcpu
;;
*)
echo "Usage: $0 {nginx|nginxcpu|redis|rediscpu|tomcat_billing|tomcat_billingcpu|tomcat_client|tomcat_clientcpu|tomcat_ipcboss|tomcat_ipcbosscpu|tomcat_shuanghu|tomcat_shuanghucpu|SBC|SBCcpu|freeswitch|freeswitchcpu}"
esac

2、编辑agent配置文件调用脚本
[root@vvh-fs01 scripts]# vim /etc/zabbix/zabbix_agentd.conf

#将UnsafeUserParameters设置为1

UnsafeUserParameters=1
UserParameter=process.nginx.memory,/usr/local/zabbix/scripts/processtatus.sh nginx
UserParameter=process.nginx.cpu,/usr/local/zabbix/scripts/processtatus.sh nginxcpu
UserParameter=process.redis.memory,/usr/local/zabbix/scripts/processtatus.sh redis
UserParameter=process.redis.cpu,/usr/local/zabbix/scripts/processtatus.sh rediscpu
UserParameter=process.tomcat_billing.memory,/usr/local/zabbix/scripts/processtatus.sh tomcat_billing
UserParameter=process.tomcat_billing.cpu,/usr/local/zabbix/scripts/processtatus.sh tomcat_billingcpu
UserParameter=process.tomcat_client.memory,/usr/local/zabbix/scripts/processtatus.sh tomcat_client
UserParameter=process.tomcat_client.cpu,/usr/local/zabbix/scripts/processtatus.sh tomcat_clientcpu
UserParameter=process.tomcat_ipcboss.memory,/usr/local/zabbix/scripts/processtatus.sh tomcat_ipcboss
UserParameter=process.tomcat_ipcboss.cpu,/usr/local/zabbix/scripts/processtatus.sh tomcat_ipcbosscpu
UserParameter=process.tomcat_shuanghu.memory,/usr/local/zabbix/scripts/processtatus.sh tomcat_shuanghu
UserParameter=process.tomcat_shuanghu.cpu,/usr/local/zabbix/scripts/processtatus.sh tomcat_shuanghucpu
UserParameter=process.SBC.memory,/usr/local/zabbix/scripts/processtatus.sh SBC
UserParameter=process.SBC.cpu,/usr/local/zabbix/scripts/processtatus.sh SBCcpu
UserParameter=process.freeswitch.memory,/usr/local/zabbix/scripts/processtatus.sh freeswitch
UserParameter=process.freeswitch.cpu,/usr/local/zabbix/scripts/processtatus.sh freeswitchcpu

3、重启agent
systemctl restart zabbix-agent

4、在zabbix服务端测试

然后在zabbix服务端使用zabbix_get看能否取到相应的数据,像下面这样就是成功获取到了数据。

[root@localhost zabbix]# bin/zabbix_get -s 172.16.1.20 -p 10050 -k process.nginx.memory
184876

5、配置zabbix界面
#创建模板—创建监控项
#CPU配置:
技术图片

技术图片

#内存配置:
技术图片
技术图片
需要注明的是内存取到的值得单位是KB,所以定义item的时候使用自定义倍数乘以1000,单位改成Byte,另外CPU占用率的值是带有小数点的一个数,所以在定义item的时候需要定义值得类型是浮点型,并且该值是占用逻辑单核的CPU占用率,所以需要定义自定义倍数,我实验中的服务器是1颗CPU,每颗CPU是1核2线程,所以自定义倍数是原来的基础上除以2,单位改成%就好。

名称:freeswitch_process_MEM
键值:process.freeswitch.memory

二、批量监控端口

1、编写监控脚本
[root@vvh-fs01 scripts]# cat /usr/local/zabbix/scripts/check_port.py
#!/usr/bin/env python
#coding:utf-8

import os, json

port_list=[]
port_dict={"data":None}
cmd=‘‘‘netstat -tnlp|egrep -i "$1"|awk {‘print $4‘}|awk -F‘:‘ ‘{if ($NF~/^[0-9]*$/) print $NF}‘|sort |uniq 2>/dev/null‘‘‘
local_ports=os.popen(cmd).readlines()

for port in local_ports:
pdict={}
pdict["{#TCP_PORT}"]=port.replace(" ", "")
port_list.append(pdict)

port_dict["data"]=port_list
jsonStr = json.dumps(port_dict, sort_keys=True, indent=4)

print jsonStr

2、更改netstat命令权限。
chmod +s /bin/netstat

3、修改被监控端的zabbix_agent.conf配置文件
添加如下内容:
UserParameter=tcpportlisten,/usr/lib/zabbix/alertscripts/check_port.sh

4、重启zabbix-agent
systemctl restart zabbix-agent

5、服务端测试
执行命令:zabbix_get -s 192.168.92.9 -p 10050 -k tcpportlisten
技术图片
6、配置zabbix页面
技术图片
#添加自动发现规则
#在上新创建的模板中点击-->自动发现规则-->然后选择创建发现规则
技术图片
技术图片
注意:上面的key 一定要和配置文件中的key 保持一致。就是我们在zabbix_agent.conf文件中添加的两行代码中的第二行中添加的参数key

7、创建监控项原型
技术图片
#上面中的键值 中的 {#TCP_PORT} 和我们的脚本 check_port.sh 中的参数一致
8、创建触发器类型
技术图片

添加按钮进入-->选择原型
技术图片

#注意这里的表态示count(#3,0,eq) > 1表示最近3次的返回值为0,这个条件触发一次则报警.

至此Python脚本批量监控端口已配置完成。

如需批量监控指定端口,可用下面这个脚本:
#!/usr/bin/env python

import json

port_list = ["80",

     "10050",

     "3306",

     "22",

     "8080"]

new_port = []

port_dict = {"data":None}

for port in port_list:

pdict = {}

pdict["{#TCP_PORT}"] = port

new_port.append(pdict)

port_dict["data"] = new_port

jsonStr = json.dumps(port_dict,sort_keys=True,indent=4)

#python3

#print(jsonStr)

#python2

print jsonStr

以上是关于Eg挨蒙—Zabbix监控进程占cpu和内存大小及批量监控端口的主要内容,如果未能解决你的问题,请参考以下文章

Eg挨蒙—Zabbix4.2.8+Grafana6.7.3进行整合绘图

四配置及使用Zabbix监控系统

zabbix自动发现与监控内存和CPU使用率最高的进程

zabbix监控进程的CPU和内存占用量,进程数量

Zabbix监控进程的内存占用和CPU使用率

zabbix监控进程的CPU和内存占用量,进程数量