zabbix 通过 agent 监控进程端口
Posted 菜鸟运维笔记
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了zabbix 通过 agent 监控进程端口相关的知识,希望对你有一定的参考价值。
作者:SRE运维博客
博客地址: https://www.cnsre.cn
环境介绍
操作系统:centos 7.4
zabbix版本:zabbix server 3.4.7
客户端:zabbix-agent 3.4.7
监控进程:mysqld
监控端口:3306 tcp
进程监控
确认客户端已经安装且运行agent
查看进程
查看属于那个用户的 几个进程
mysql 的进程为root用户 两个进程
添加监控项
名称随便写
类型zabbix客户端
键值选则进程数返回数
应用集选则prosesses 进程
proc.num[<name>,<user>,<state>,<cmdline>]
以下是对mysql进程的监控配置,key中的参数说明,
<name>
第一个参数是进程名字,没必要填写,填了反而会使监控不太准确(仅个人测试)
<user>
第二个参数是运行进程的用户名
<state>
第三个为进程的状态 ,一般选则all
包括:all (default)
, run
, sleep
, zomb
<cmdline>
第四个参数用来指定进程名中包含的字符,对进程进行过滤。
确认更新
创建触发器
选择刚才创建的监控项
插入
修改{hgh3a01:proc.num[,root,all,mysqld].last()}=0
为
{hgh3a01
:proc.num[,root,all,mysqld]
.max(#2)}=2
hgh3a01
:主机名称
proc.num[,root,all,mysqld]
:监控项
max(#2)}=2
:表示最后两次的接收到的值都是2个进程(ps -ef 看到 mysqld 的进程为两个所以=2 ),说明mysqld进程在运行,则出发报警。
因为我们要测试是否能出发告警,所以要选则 =2 正常的<1 就是没有运行。
稍等几分钟观察看看能不能触发触发器
收到邮箱警告
吧测试的进程改为正常的(因为mysql 运行的进程为两个我这变设置的触发器为进程小于两个进程就发出告警)
保存更新观察是否回复正常
监控端口
添加监控项
修改端口 保存更新
同监控进程一样(先测试)
收到触发警告
吧之前的值调整为0
测试回复正常
作者:SRE运维博客
博客地址: https://www.cnsre.cn
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
以上是关于zabbix 通过 agent 监控进程端口的主要内容,如果未能解决你的问题,请参考以下文章