zabbix(五)jmx和proxy
zabbix 监控 java 虚拟机 jmx
从 Zabbix 2.0 开始,以 Zabbix 守护进程方式原生支持监控 JMX 应用程序就存在了,称之为“Zabbix Java gateway”。Zabbix Java gateway 的守护进程是用 Java 编写。为了在特定主机上找到 JMX 计数器的值,Zabbix server 向 Zabbix Java gateway 发送请求,后者使用 JMX 管理 API 来远程查询相关的应用。该应用不需要安装额外的软件。只需要在启动时,命令行添加-Dcom.sun.management.jmxremote选项即可。
Java gateway 接受来自 Zabbix server 或 Zabbix proxy 的传入连接,并且只能用作“被动 proxy”。与 Zabbix proxy 相反,它也可以从 Zabbix proxy (Zabbix proxy 不能被链接)调用。在 Zabbix server 或 Zabbix proxy 配置文件中,可以直接配置每个 Java gateway 的访问,因此每个 Zabbix pserver 或 Zabbix proxy 只能配置一个 Java gateway。如果主机将有 JMX agent 或其他类型的监控项,则只将 JMX agent 监控项传递给 Java gateway 进行检索。
当必须通过 Java gateway 更新监控项时,Zabbix server 或 proxy 将连接到 Java gateway 并请求该值,Java gateway 将检索该值并将其传递回 Zabbix server 或 Zabbix proxy。 因此,Java gateway 不会缓存任何值。
Zabbix server 或 Zabbix proxy 具有连接到 Java gateway 的特定类型的进程,由 StartJavaPollers 选项控制。在内部,Java gateway 启动多个线程,由 START_POLLERS 选项控制。 在服务器端,如果连接超过 Timeout 选项配置的秒数,它将被终止,但 Java gateway 可能仍在忙于从 JMX 计数器检索值。 为了解决这个问题,从 Zabbix 2.0.15、Zabbix 2.2.10 和 Zabbix 2.4.5 开始,Java gateway 中有 TIMEOUT 选项,允许为 JMX 网络操作设置超时。
Zabbix server 或 proxy 尝试尽可能地将请求汇集到单个 JMX 目标(受监控项取值间隔影响),并在单个连接中将它们发送到 Java Gateway 以获得更好的性能。
此外,建议让 StartJavaPollers 选项的值小于或等于 START_POLLERS,否则可能会出现 Java gateway 中没有可用线程来为传入请求提供服务的情况。
1>获取 jdk 和 tomcat
[root@server2 ~]# rpm -ivh jdk-8u121-linux-x64.rpm
[root@server2 local]# tar zxf apache-tomcat-8.5.24.tar.gz -C /usr/local/
[root@server2 local]# ln -s apache-tomcat-8.5.24 tomcat
#修改配置使 tomcat 支持监控,端口自定义
#复制 zabbix 手册,也可以在 tomcat 官网
#http://tomcat.apache.org/tomcat-8.5-doc/monitoring.html
[root@server2 ~]# vim /usr/local/tomcat/bin/catalina.sh
CATALINA_OPTS='-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=8888
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false'
# OS specific support.
$var _must_ be set to either true or false.
#开启 tomcat
[root@server2 bin]# ./startup.sh
在 server1 上安装 zabbix-java-gateway
[root@server1 4.0]#yum install -y zabbix-java-gateway-4.0.5-1.el7.x86_64.rpm
#启动
[root@server1 4.0]# systemctl start zabbix-java-gateway
访问顺序:client -> webui -> zabbix server -> zabbix jmx:10052 -> tomcat:8888
#修改 zabbix_server 配置
[root@server1 ~]# vim /etc/zabbix/zabbix_server.conf
JavaGateway:172.25.0.1
JavaGatewayPort:10052
StartJavaPollers=5
#重新加载
#zabbix_server --help
[root@server1 ~]# zabbix_server -R config_cache_reload
zabbix_server [19178]: command sent successfully
#上面这个命令好像不生效,还是要重启
[root@server1 ~]# systemctl restart zabbix-server
#在 zabbix 界面添加 jmx 监控
#删除原来的 http 监控,并添加 jmx
#打开一个 jmx 监控的图形,发现没有数据
#编辑配置文件
[root@server1 ~]# vim /etc/zabbix/zabbix_java_gateway.conf
#重启
[root@server1 ~]# systemctl restart zabbix-java-gateway
zabbix-proxy 配置
Zabbix proxy 是一个可以从一个或多个受监控设备采集监控数据并将信息发送到 Zabbix server 的进程,主要是代表 Zabbix server 工作。 所有收集的数据都在本地缓存,然后传输到 proxy 所属的 Zabbix server。
部署Zabbix proxy 是可选的,但可能非常有利于分担单个 Zabbix server 的负载。 如果只有代理采集数据,则 Zabbix server 上会减少 CPU 和磁盘 I/O 的开销。
Zabbix proxy 是无需本地管理员即可集中监控远程位置、分支机构和网络的理想解决方案。
Zabbix proxy 需要使用独立的数据库。
#先删除 server3 的监控,用来做 proxy
[root@server3 ~]# hostnamectl set-hostname proxy
#停掉 agent,添加解析(每个节点都添加)
[root@proxy ~]# systemctl stop zabbix-agent
#添加代理
#proxy 上安装包
[root@proxy ~]# yum install -y
zabbix-proxy-mysql-4.0.5-1.el7.x86_64.rpm
fping-3.10-1.el7.x86_64.rpm
#数据走向
Server -> proxy -> agent
#proxy 上要安装 mariadb-server,然后初始化
MariaDB [(none)]> create database zabbix_proxy character set utf8 collate utf8_bin;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> grant all privileges on zabbix_proxy.* to zabbix@localhost
identified by 'redhat';
Query OK, 0 rows affected (0.00 sec)
#导入数据
[root@proxy zabbix-proxy-mysql-4.0.5]# pwd
/usr/share/doc/zabbix-proxy-mysql-4.0.5
[root@proxy zabbix-proxy-mysql-4.0.5]#zcat schema.sql.gz | mysql -p zabbix_proxy
#修改配置
[root@proxy ~]# vim /etc/zabbix/zabbix_proxy.conf
30 Server=172.25.0.1
39 ServerPort=10051
49 Hostname=proxy
173 DBName=zabbix_proxy
188 DBUser=zabbix
196 DBPassword=redhat
329 JavaGateway=172.25.0.1
337 JavaGatewayPort=10052
345 StartJavaPollers=5
#启动
[root@proxy ~]# systemctl start zabbix-proxy
#查看日志
[root@proxy ~]# tail -f /var/log/zabbix/zabbix_proxy.log
3281:20190428:110519.736 received configuration data from server at"172.25.0.1", datalen 3511
[root@server1 ~]# tail -f /var/log/zabbix/zabbix_server.log30510:20190428:110518.321 sending configuration data to proxy "proxy" at"172.25.0.3", datalen 3511
#web 端看 proxy 已生效
#server2 上配置把数据发送到 proxy
[root@server2 ~]# vim /etc/zabbix/zabbix_agentd.conf
Server=172.25.0.3
ServerActive=172.25.0.3
#重启 agent
#web 端添加代理
#重启 zabbix-server , server2 上的 zabbix-agent , zabbix-proxy
#启用 proxy 后,主机前都会加上 proxy
#最后可以编辑拓扑图
#还可以将监控的 url 放入聚合图形