由于最近在研究监控系统选型,主要想用于监控一些中间件、数据库以及业务本身。市面上最常用的开源监控系统有zabbix、prometheus、open-falcon,其中资历最老的当属zabbix,他已经22岁了(可能比在看的你的年龄都大,当然比老夫我还是差一点),网上各种乱搜一通,对于prometheus的呼声是最高的,但是zabbix毕竟是老大哥,就算别人说他在应用层监控方面不如prometheus,我还是想先研究一下zabbix,毕竟死也要死的明白,所以本篇来聊聊监控系统的老大哥-zabbix。
知识点
zabbix整体架构
zabbix搭建及遇到的坑
如何监控jvm信息

zabbix整体架构

image.png

根据自己的理解大概画了一下zabbix的架构图,从图中可以看出以下信息:

  • zabbix是支持分布式收集的,并且使用了proxy来分担server的收集压力。
  • 数据库支持mysql和postgresql,前者是一开始使用的数据库,后者是4.2版本之后才开始支持的时序数据库,是一种优化。
  • 显示端有zabbix自带的由php开发的web页面,也可以通过集成到第三方ui进行显示(比如grafana)。
  • 支持主动模式和被动模式,也就是server可以主动来agent拉取数据,也可以是agent主动推送数据给server。
  • 涉及到5个名词:zabbx server、zabbix agent、zabbix proxy、zabbix_get、zabbix_sender,我这里依次介绍一下
    zabbx server:zabbix服务端,由C语言编写,属于最核心的部分,从agent、proxy收集所有指标并存入数据库,也支持直接通过JMX、SNMP等协议进行指标数据直接收集,由web端获取数据进行展示。
    zabbix agent:zabbix客户端,主要用于部署在被监控的服务器上进行指标收集,并将收集的数据传递给proxy或者server,支持主动模式和被动模式传递数据。
    zabbix proxy:服务端代理,用于帮助server端收集agent端发来的指标信息,再传给server端,不是必须组件,在zabbix较多的时候可以分担server端压力。
    zabbix get:一个命令工具,用于人工跑命令获取agent的指标项。
    zabbix sender:一个命令工具,用于人工跑命令将指标数据发送至proxy或者server端。

    zabbix搭建及遇到的坑

    了解了zabbix的整体运行架构之后,我们开始来手动部署一下自己的zabbix。
    zabbix安装和部署非常简单,根据官方的文档直接来就行,这里给一个链接,大家可以根据自己的需要安装对应的版本,https://www.zabbix.com/cn/dow...
    我这里选的是如下组合进行安装:
    image.png
    这里不具体讲每一步的安装过程,主要讲讲我安装的过程中遇到的坑

    第一坑:Configure DB connection

    image.png
    第一个坑就是上面这一步,在配置到这一步界面的时候点击下一步,直接提示no such file or directory,将host改为127.0.0.1之后再点下一步,又提示Permission denied,由此容易联想到权限不够,于是打开zabbix_server.config配置文件,把数据库相关配置都改为新建的zabbix用户
    image.png
    重启之后再点击下一步按钮,依然提示该错误,也没有更多的错误信息,于是就去找对应的server日志,发现如下错误:
    image.png
    很明显是基于/var/lib/mysql/mysql.sock去连接mysql数据库失败了,我全局查了一下mysql.sock,发现只存在于tmp/目录下,/var/lib/mysql/目录下并不存在该sock,于是就在/var/lib/mysql/目录下加了一个tmp/mysql.sock的虚链接。又一次点击下一步,这次依然还是不行。此时已经有点绝望了,就想着既然页面上连不上,我本地的数据库工具是否可以连过去看看呢?用本地的数据库工具连接过去发现果然不行,提示"unable-to-load-authentication-plugin-caching-sha2-password",这个问题查了一下,大概就是客户端用的Mysql驱动是5.x版本,服务端如果是Mysql8.x版本的话就会出现这种情况,解决方法就是更改对应用户的密码加密方式为mysql_native_password。
    经过上面的折腾之后这一步坑终于过去了,正式安装完成。

    第二坑:登录上去之后一直没有数据显示

    用户名密码登录进去之后,发现没有任何数据,一开始以为需要做一些额外配置,结果不小心看到页面底下有一个小提示:
    image.png
    于是开始网上一顿搜,发现一个很关键的点:selinux的一些安全策略会对zabbix有一定影响。什么是selinux,参考这篇https://blog.csdn.net/yanjun8...。当然具体是selinux的什么策略导致zabbix什么问题就没有去深究了,因为这个深究起来又得花不少时间,感兴趣的可以自己去了解一下。解决方案很简单,就是把系统的selinux模块禁用掉。
    解决掉这两个坑之后,一切显得那么美好:
    image.png

默认的主机项中的数据已经开始出来,这个图里也可以看出对中文支持不那么友好,有一些乱乱码,如何解决中文乱码问题,这里就不多说了,自己网上随便找。

如何监控jvm信息

zabbix的设计初衷是监控网络、服务器硬件资源情况等信息,所以对于软件应用类的支持就做得还不够好,对于我们开发人员来说,自然是希望能够监控到应用的情况,这一节就聊聊如何监控jvm,对于节点业务的监控,以后的文章会讲到。
说到监控jvm信息,不得不提到JMX,我们平时在做一些远程调试或者使用visualvm监控远程jvm情况的时候都会用到JMX。zabbix为了兼容java,提供了zabbix_java_gateway扩展,我们通过安装
zabbix_java_gateway并在被监控的应用中配置好监控点就可以开始着手配置zabbix,下面我们一步一步来。
以centos7为例:
1、安装gateway:
yum install zabbix-java-gateway;
2、修改zabbix_java_gateway.conf配置文件
LISTEN_IP=“0.0.0.0”
LISTEN_PORT=10052
START_POLLERS=5
3、修改zabbix_server.config中对gateway的监控配置
JavaGateway=127.0.0.1
JavaGatewayPort=10052
StartJavaPollers=5
StartJavaPollers 应小于等于zabbix_java_gateway.conf 中START_POLLERS的值
4、重启zabbix server 和java gateway
systemctl restart zabbix-server
systemctl restart zabbix-java-gateway
5、修改被监控主机配置
就是对应的jvm承载的应用配置,启动的时候要添加JMX支持,我这里为了方便,把认证相关的都去掉了
image.png
6、web界面添加对应的主机监控
image.png
7、添加对应的模板
image.png
以上步骤完成之后,就会发现已经有了
image.png
过一会儿,数据也出现了
image.png

总结

我们以为很简单的东西往往在实际使用的时候才会真正遇到问题,所以实践了才知道自己真的掌握了没有。很多人在遇到问题之后就会开始气馁,我觉得没有必要,解决问题虽然花时间,但同时也会让你积累到很多新知识,解决之后才会感慨一声:哦,原来是这样,这TM也行。。。

参考资料
https://www.zabbix.com/
https://blog.51cto.com/liuzhe...


爱炒股的程序猿
50 声望4 粉丝

每天进步一点点