浅谈zabbix
Posted 保融融汇技术团队
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅谈zabbix相关的知识,希望对你有一定的参考价值。
由于最近在研究监控系统选型,主要想用于监控一些中间件、数据库以及业务本身。市面上最常用的开源监控系统有zabbix、prometheus、open-falcon,其中资历最老的当属zabbix,他已经22岁了,网上各种乱搜一通,对于prometheus的呼声是最高的,但是zabbix毕竟是老大哥,就算别人说他在应用层监控方面不如prometheus,我还是想先研究一下zabbix,毕竟要弄清楚为什么,所以本篇来聊聊监控系统的老大哥-zabbix。
知识点
zabbix整体架构
zabbix搭建及遇到的坑
如何监控jvm信息
zabbix整体架构
根据自己的理解大概画了一下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/download?zabbix=5.0&os_distribution=centos&os_version=8&db=mysql&ws=apache。
我这里选的是如下组合进行安装:
这里不具体讲每一步的安装过程,主要讲讲我安装的过程中遇到的坑
第一坑:Configure DB connection
第一个坑就是上面这一步,在配置到这一步界面的时候点击下一步,直接提示no such file or directory,将host改为127.0.0.1之后再点下一步,又提示Permission denied,由此容易联想到权限不够,于是打开zabbix_server.config配置文件,把数据库相关配置都改为新建的zabbix用户
重启之后再点击下一步按钮,依然提示该错误,也没有更多的错误信息,于是就去找对应的server日志,发现如下错误:
很明显是基于/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。
经过上面的折腾之后这一步坑终于过去了,正式安装完成。
第二坑:登录上去之后一直没有数据显示
用户名密码登录进去之后,发现没有任何数据,一开始以为需要做一些额外配置,结果不小心看到页面底下有一个小提示:
于是开始网上一顿搜,发现一个很关键的点:selinux的一些安全策略会对zabbix有一定影响。什么是selinux,参考这篇文章:
https://blog.csdn.net/yanjun821126/article/details/80828908。
当然具体是selinux的什么策略导致zabbix什么问题就没有去深究了,因为这个深究起来又得花不少时间,感兴趣的可以自己去了解一下。解决方案很简单,就是把系统的selinux模块禁用掉。
解决掉这两个坑之后,一切显得那么美好:
默认的主机项中的数据已经开始出来,这个图里也可以看出对中文支持不那么友好,有一些乱乱码,如何解决中文乱码问题,这里就不多说了,自己网上随便找。
如何监控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支持,我这里为了方便,把认证相关的都去掉了
6、web界面添加对应的主机监控
7、添加对应的模板
以上步骤完成之后,就会发现已经有了
总结
我们以为很简单的东西往往在实际使用的时候才会真正遇到问题,所以实践了才知道自己真的掌握了没有。很多人在遇到问题之后就会开始气馁,我觉得没有必要,解决问题虽然花时间,但同时也会让你积累到很多新知识,解决之后才会感慨一声:哦,原来是这样。篇幅有限,后面再聊聊如何zabbix提供的扩展以及如何监控业务数据。
参考资料
https://www.zabbix.com/
https://blog.51cto.com/liuzhengwei521/1925411
以上是关于浅谈zabbix的主要内容,如果未能解决你的问题,请参考以下文章