最近在学习zabbix4.0,那如果用zabbix怎么去做jvm的监控呢?抱着这个目的cosmo在zabbix share里边找了一下发现官方提供的模板,是基于JMX的而且适配的是zabbix3.0. 之后又再网上找了一下,发现了这篇博文https://blog.51cto.com/xianglinhu/1757930 ,实现了jstat监控单机多jvm的情况。但cosmo对shell并不是很擅长,看shell脚本有点困难,并且版本较旧。就打算重复造个轮子,用来适配现在的zabbix-v4.0。记录下此文也给之后的同学留个参考。
1. 模板使用环境
zabbix-agent的版本是v4.0.13
python的版本是2.7.5
操作系统是centos7 64位
jdk版本是1.8
默认使用的是linux root用户
2. 下载模板与脚本
代码语言:javascript复制# 下载模板并将模板移动到执行文件夹下
git clone https://github.com/chaoxxx/zabbix-agent-jvm8.git
mkdir /etc/zabbix/script
cp zabbix-agent-jvm8/discover-jvm.py /etc/zabbix/script
cp zabbix-agent-jvm8/get-jvm-gc.py /etc/zabbix/script
cp zabbix-agent-jvm8/get_jvm.conf /etc/zabbix/zabbix_agentd.d/
cd /etc/zabbix/script
chown root:root *
chmod x *
修改python脚本中的常量
代码语言:javascript复制vi discover-jvm.py
这个常量是java进程存活时长阈值,当一个java进程存活时间大于此值时,才会被zabbix视为监控对象。此值的单位为秒。
代码语言:javascript复制# watchlook the jvm process or not
jvm_alive_time = 600
代码语言:javascript复制vi get-jvm-gc.py
代码语言:javascript复制# zabbix-server config
zbserver = '192.168.4.37' # zabbix server的ip
zbport = 10051 # zabbix server的端口
# JDK config
JAVA_HOME = '/usr/share/java-1.8.0' #jdk1.8的根目录
# which jstat options you need
methods = ['gc','gccapacity','gcnew','gcnewcapacity','gcold','gcoldcapacity','gcmetacapacity','gcutil'] # jstat命令的参数,可按照自己的需求修改
#methods = ['gc','gccapacity']
3. 安装python依赖库
代码语言:javascript复制# 安装pip工具与脚本中的依赖包
python get-pip.py
pip install -r requirements.txt
4. 修改zabbix-agent机器配置
4.1 关闭selinux
关于selinux的关闭方法,之前https://cloud.tencent.com/developer/article/1644589 有讲,不会的请看这篇。
4.2 添加防火墙规则
代码语言:javascript复制firewall-cmd --zone=public --add-port=10050/tcp --permanent
firewall-cmd --reload
4.3 对get-jvm-gc.py
脚本提权
代码语言:javascript复制vi /etc/sudoers
代码语言:javascript复制## Allow root to run any commands anywhere
root ALL=(ALL) ALL
zabbix ALL=(ALL) NOPASSWD:/etc/zabbix/script/get-jvm-gc.py
5. 模板导入与自动发现规则配置
5.1 模板导入
导入模板配置文件jvm8-template-auto-discover.xml
.
5.2 zabbix_agentd.conf
文件修改
代码语言:javascript复制EnableRemoteCommands=1 # 允许执行远程命令
Server=0.0.0.0/0 # 允许zabbix-server链接,这里设置的是允许所有机器链接
ServerActive=192.168.4.37 # zabbix-server ip
# Hostname= #注释掉Hostname
UnsafeUserParameters=1 # 允许用户参数中有特殊字符
5.3 自动发现配置
创建自动发现规则
这里监控的是192.169.4.0/255的所有机器
5.4 自动注册配置
创建自动注册行为
这里自动注册的作用是,当发现一台可以ping通的机器后,zabbix会自动以这台机器的hostname在zabbix中创建一个host。并关联jvm8-template-auto-discover
, Template OS Linux
两个模板。
6. 效果展示
启动zabbix-agent
代码语言:javascript复制systemctl restart zabbix-agent
zabbix-server只要能ping通这台服务器就会自动创建好host。并且自动关联jvm8-template-auto-discover
, Template OS Linux
两个模板。因为当前监控机器中并没有运行了10分钟以上java进程,所以jvm8-template-auto-discover
不会创建对应进程的监控项。
现在我们启动一个java进程。
代码语言:javascript复制java -jar simple-example-0.0.1-SNAPSHOT-jar-with-dependencies.jar &
java代码为
代码语言:javascript复制package com.cosmo.simpleexample;
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) throws InterruptedException {
List<String> a = new ArrayList<String>();
for(;;) {
for(int j=0;j<100;j ) {
a.add("abc" j);
Thread.sleep(10);
}
a.clear();
}
}
}
项目为:https://github.com/chaoxxx/simple-example.git
等待一段时间后,发现host中多了很多监控项
数据也被采集了回来
关于监控项的含义请对照此篇文章。https://www.cnblogs.com/yjd_hycf_space/p/7755633.html
作者:cosmozhu --90后的老父亲,专注于保护地球的程序员
个人网站:https://www.cosmozhu.fun
欢迎转载,转载时请注明出处。