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

Stella981
• 阅读 815

监控简介:

通过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配置:
Eg挨蒙—Zabbix监控进程占cpu和内存大小及批量监控端口

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

#内存配置:
Eg挨蒙—Zabbix监控进程占cpu和内存大小及批量监控端口
Eg挨蒙—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("\n", "")
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
Eg挨蒙—Zabbix监控进程占cpu和内存大小及批量监控端口
6、配置zabbix页面
Eg挨蒙—Zabbix监控进程占cpu和内存大小及批量监控端口
#添加自动发现规则
#在上新创建的模板中点击-->自动发现规则-->然后选择创建发现规则
Eg挨蒙—Zabbix监控进程占cpu和内存大小及批量监控端口
Eg挨蒙—Zabbix监控进程占cpu和内存大小及批量监控端口
注意:上面的key 一定要和配置文件中的key 保持一致。就是我们在zabbix_agent.conf文件中添加的两行代码中的第二行中添加的参数key

7、创建监控项原型
Eg挨蒙—Zabbix监控进程占cpu和内存大小及批量监控端口
#上面中的键值 中的 {#TCP_PORT} 和我们的脚本 check_port.sh 中的参数一致
8、创建触发器类型
Eg挨蒙—Zabbix监控进程占cpu和内存大小及批量监控端口

添加按钮进入-->选择原型
Eg挨蒙—Zabbix监控进程占cpu和内存大小及批量监控端口

#注意这里的表态示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

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
Nginx + lua +[memcached,redis]
精品案例1、Nginxluamemcached,redis实现网站灰度发布2、分库分表/基于Leaf组件实现的全球唯一ID(非UUID)3、Redis独立数据监控,实现订单超时操作/MQ死信操作SelectPollEpollReactor模型4、分布式任务调试Quartz应用
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这