1+

最近在学习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. 下载模板与脚本

# 下载模板并将模板移动到执行文件夹下
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脚本中的常量

vi discover-jvm.py

这个常量是java进程存活时长阈值,当一个java进程存活时间大于此值时,才会被zabbix视为监控对象。此值的单位为秒。

# watchlook the jvm process or not
jvm_alive_time = 600
vi get-jvm-gc.py
# 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依赖库

# 安装pip工具与脚本中的依赖包
python get-pip.py
pip install -r requirements.txt

4. 修改zabbix-agent机器配置

4.1 关闭selinux

关于selinux的关闭方法,之前http://www.cosmozhu.fun/archives/38 有讲,不会的请看这篇。

4.2 添加防火墙规则

firewall-cmd --zone=public --add-port=10050/tcp --permanent
firewall-cmd --reload

4.3 对get-jvm-gc.py脚本提权

vi /etc/sudoers
## 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文件修改

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

systemctl restart zabbix-agent

zabbix-server只要能ping通这台服务器就会自动创建好host。并且自动关联jvm8-template-auto-discover, Template OS Linux两个模板。因为当前监控机器中并没有运行了10分钟以上java进程,所以jvm8-template-auto-discover不会创建对应进程的监控项。

现在我们启动一个java进程。

java -jar simple-example-0.0.1-SNAPSHOT-jar-with-dependencies.jar &

java代码为

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后的老父亲,专注于保护地球的程序员
个人网站:http://www.cosmozhu.fun
欢迎转载,转载时请注明出处。