Zabbix监控系统在Rainbond上的部署及应用制作

一. 关于Zabbix

Zabbix 是一个企业级的分布式开源监控方案,由Alexei Vladishev创建,目前由Zabbix SIA在持续开发和支持。

Zabbix是一款能够监控各种网络参数以及服务器健康性和完整性的软件;使用灵活的通知机制,允许用户为几乎任何事件配置基于邮件的告警,这样可以快速反馈服务器的问题;基于已存储的数据,Zabbix提供了出色的报告和数据可视化功能;这些功能使得Zabbix成为监控规划的理想方案。

二. 快速安装方式

Zabbix 应用已分享到Rainbond应用市场,通过Rainbond社区开源商店即可一键安装。

三. 应用制作流程

对于任何需要部署应用的用户来说,第一步就是了解应用,包括应用本身的组成,不同组件的原理及相互之间的依赖关系,如果对应用有了一定的了解,就已经成功了一半,部署只是时间问题了。

组件概述

首先介绍一下Zabbix的基本组件

Zabbix-web

zabbix的GUI接口,负责前端页面展示。

Zabbix-server

Zabbix server是整个Zabbix软件的核心程序;负责接收agent和Proxy代理所发送的报告信息,所有配置、统计数据及操作数据都由它组织进行。

Mysql

Zabbix的所有配置信息都存储在数据库中。例如,当你通过Web前端(或者API)新增一个条目时,它会被添加到数据库的item表里。然后,Zabbix服务器以每分钟一次的频率查询item表中的活动列表,接着将它存储在zabbix-server中的缓存里。这就是为什么Zabbix前端所做的任何更改最多需要花费两分钟才能显示在最新的数据段的原因。

Zabbix-agent

部署在被监控主机上,负责收集主机本地数据(如cpu、内存、数据库等数据)发往server端或proxy端。

以下为扩展组件(可选组件)

Zabbix-Proxy

Zabbix Proxy能够代替Zabbix Server进行性能及可用性数据采集;如果想分担单一Zabbix Server负载,推荐使用proxy。

Zabbix-java-gateway

Java网关,zabbix2.0之后引入的一个功能。支持监控JMX程序,需要特别注意的是,它只能主动去获取数据,而不能被动获取数据;它的数据最终会给到server或者proxy。

组件部署

Zabbix官方提供了容器化部署方案,这对于在Rainbond上部署应用来说十分友好,所以在部署时直接参考了官方容器化部署文档进行部署。

参考文档:https://www.zabbix.com/documentation/current/manual/installation/containers

Mysql部署

首先部署Mysql数据库组件,在Rainbond平台支持使用 DockerRun 命令直接创建组件,对官方的部署命令做了一部分修改,命令如下

 docker run --name mysql-server -t \
      -e MYSQL_DATABASE=zabbix \
      -e MYSQL_USER=zabbix \
      -e MYSQL_PASSWORD=zabbix_pwd \
      -e MYSQL_ROOT_PASSWORD=root_pwd \
      -d mysql:8.0 \
      --character-set-server=utf8 --collation-server=utf8_bin \
      --default-authentication-plugin=mysql_native_password

在平台直接输入命令,点击确认进行部署即可


等待部署完毕处于运行中状态即部署完毕

在官方部署文档中看到其他组件连接Mysql时使用了环境变量,所以为了方便其他组件连接Mysql,做了以下操作

修改组件端口别名为DB_SERVER_HOST并开启对内服务(点击可直接修改)


在环境配置页面将 MYSQL_DATABASE MYSQL_USER MYSQL_PASSWORD MYSQL_ROOT_PASSWORD 转移为依赖中的连接信息,点击转移按钮即可。

做完以上操作后,如果在Rainbond平台有其他组件需要连接数据库,那么以上信息将会自动注入到需要依赖数据库的组件中,组件识别到以上信息后将会自动连接数据库。原理请参考组件间通信

Zabbix Java gateway 部署

同样使用DockerRun的方式进行部署

命令如下

 docker run --name zabbix-java-gateway -t \
      -d zabbix/zabbix-java-gateway:alpine-5.0-latest

Zabbix server部署

部署命令如下

 docker run --name zabbix-server-mysql -t \
      -e ZBX_JAVAGATEWAY="zabbix-java-gateway" \
      -p 10051:10051 \
      -d zabbix/zabbix-server-mysql:alpine-5.0-latest

添加环境变量

ZBX_DEBUGLEVEL 3 日志级别
ZBX_JAVAGATEWAY 127.0.0.1 JavaGateway连接地址
ZBX_JAVAGATEWAYPORT 10052 JavaGateway端口
ZBX_JAVAGATEWAY_ENABLE true 启用JavaGateway
ZBX_STARTPOLLERS 5 zabbix server 的进程数,根据组件内存可灵活修改


更多环境变量配置请参考Dockerhub官方镜像说明

建立依赖关系

建立组件间依赖,Zabbix server依赖Mysql及Zabbix Java gateway。

参考服务间通信

开通出口网络治理插件

Zabbix server组件连接Zabbix Java gateway是通过 ZBX_JAVAGATEWAY 环境变量的值连接,在Rainbond平台开通出口网络治理插件后设置访问域名为zabbix-java-gateway,平台则会将zabbix-java-gateway解析至Zabbix Java gateway 组件,此时Zabbix server即可正常连接Zabbix Java gateway 组件。

在已开通中找到出口网络治理插件,下游应用选择 Zabbix Java gateway,修改访问域名,点击更新配置后更新或重启组件即可。


开通对外端口

开通对外端口,作为agent与Zabbix server通信的地址,agent连接server端时会用到。

Zabbix web部署

部署命令

docker run --name zabbix-web-nginx-mysql -t \
      -p 8080:8080 \
      -e ZBX_SERVER_HOST=zabbix-server-mysql  \
      -d zabbix/zabbix-web-nginx-mysql:alpine-5.0-latest

建立依赖关系

建立组件间依赖, Zabbix web依赖Zabbix server及Mysql。

开通出口网络治理插件

zabbix-web组件连接Zabbix server 是通过 ZBX_SERVER_HOST 环境变量的值连接,所以同上,为zabbix-web开通出口网络治理插件,使其zabbix-server-mysql解析至Zabbix server 组件。

在已开通中找到出口网络治理插件,下游应用选择 zabbix server,修改访问域名,点击更新配置后更新或重启组件即可。

打开zabbix-web对外服务

访问zabbix-web组件的对外端口,即可访问到zabbix UI界面。

默认用户名密码为 Admin/zabbix


到此zabbix server端部署完成,接下来使用一台测试机作为被监控机,部署agent。

完整拓补图如下

四. 使用示例

主机监控

agent可以选择任意方式进行部署,只需要根据上面已开通的Zabbix server对外地址,定义服务端的连接地址即可,这里选择比较简单的容器化部署。

部署命令

 docker run --name zabbix-agent  --privileged -p 10050:10050 -e ZBX_HOSTNAME="node1"  -e ZBX_SERVER_HOST="***" -e ZBX_SERVER_PORT="27017"  -v /etc/localtime:/etc/localtime  -d zabbix/zabbix-agent:latest

访问web界面添加主机


主机监控已开启

JMX监控

JMX(Java Management Extensions),即Java管理扩展,是一个为应用程序、设备、系统等植入管理功能的框架,JMX可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用。Java程序会开放一些端口,用来获取运行状况。Zabbix 2.0开始,内置了监控JMX的功能,叫做“Zabbix Java Gateway”,在使用时,Java程序不需要在代码中新增任何东西,只需要在启动的时候加上一些JVM参数,使得它可以支持使用端口监控JMX。

示例Java项目:https://gitee.com/rainbond/java-maven-demo

在构建命令中添加以下参数,为JAVA应用程序启用远程JMX监控 (未采用认证加密方式)。

-Dcom.sun.management.jmxremote   #开启远程监控
-Dcom.sun.management.jmxremote.port=12345   #远程监控端口
-Dcom.sun.management.jmxremote.ssl=false   #关闭远程ssl验证
-Dcom.sun.management.jmxremote.authenticate=false    #关闭权限认证
-Djava.rmi.server.hostname="$POD_IP"  #主机地址,在平台使用此环境变量可以直接获取当前组件的容器IP

最终完整命令如下

web: java $JAVA_OPTS -Dcom.sun.management.jmxremote   -Dcom.sun.management.jmxremote.port=12345   -Dcom.sun.management.jmxremote.ssl=false   -Dcom.sun.management.jmxremote.authenticate=false   -Djava.rmi.server.hostname="$POD_IP" -jar target/java-maven-demo-0.0.1.jar

重新构建后添加端口12345,并打开tcp协议对外服务,从访问策略中获取连接地址。

在zabbix中添加主机,选择类型为JMX,移除默认客户端,连接地址填写上面获取的地址。


选择 Template App Generic Java JMX 模板,点击更新即可。

主机添加完成。

在 监测–>最新数据 中选择添加的主机,查看是否有相关数据。

JMX监控更多信息请参考官方文档: https://www.zabbix.com/documentation/5.4/manual/config/items/itemtypes/jmx_monitoring
更多zabbix使用技巧请参考官方文档