监控系统zabbix相关

zabbix安装和扩展(集成JMX和自定义监控JVM信息)

zabbix简介

Zabbix 由 Alexei Vladishev 创建,目前由其成立的公司—— Zabbix SIA 积极的持续开发更新维护, 并为用户提供技术支持服务。

Zabbix 是一个企业级分布式开源监控解决方案。

Zabbix 软件能够监控众多网络参数和服务器的健康度、完整性。Zabbix 使用灵活的告警机制,允许用户为几乎任何事件配置基于邮件的告警。这样用户可以快速响应服务器问题。Zabbix 基于存储的数据提供出色的报表和数据可视化功能。这些功能使得 Zabbix 成为容量规划的理想选择。

Zabbix 支持主动轮询(polling)和被动捕获(trapping)。Zabbix所有的报表、统计数据和配置参数都可以通过基于 Web 的前端页面进行访问。基于 Web 的前端页面确保您可以在任何地方访问您监控的网络状态和服务器健康状况。适当的配置后,Zabbix 可以在监控 IT 基础设施方面发挥重要作用。无论是对于有少量服务器的小型组织,还是拥有大量服务器的大企业而言,同样适用。

Zabbix 是免费的。Zabbix 是根据 GPL 通用公共许可证的第二版编写和发布的。这意味着产品源代码是免费发布的,可供公共使用

zabbix官网地址:

https://www.zabbix.com/documentation/4.0/zh/manual/introduction/manual_structure

zabbix安装

环境准备
Oracle VM VirtualBox安装Centos7- Mini
IP
zabbix-server:192.168.0.195
zabbix-agent-1:192.168.0.191
zabbix-agent-2:192.168.0.190

关系图
在这里插入图片描述
zabbix-agent是放在客户端,收集客户端机器的监控信息(具体的监控内容可以查看官网),zabbix-server是服务端,统计agent收集的信息,并且保存在数据库,默认的使用是mysql数据库。

zabbix存在两种模式,一种是server去每个agent获取信息,另一种是agent主动的向server推送信息,具体的使用方式则需要根据实际场景来调整了。

安装
zabbix的安装依赖特别多,笔者开始安装的时候也是在离线环境的,通过 “yum install --download --downloaddir=目录名 软件名”命令下载安装包,复制到离线环境进行安装,由于依赖实在太多了,被迫放弃了这个方式,给虚拟机新增了一个网卡(自己组装的两台双网卡机器,一个网卡是可以连外网的),还是有网香啊(手动狗头)

本次安装的是zabbix3.0,废话不多说,上安装命令:
首先安装zabbix-server

#安装zabbix源、aliyun YUM源
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
rpm -ivh http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm
#安装zabbix 
yum install -y zabbix-server-mysql zabbix-web-mysql
#安装启动 mariadb数据库
yum install -y  mariadb-server
systemctl start mariadb.service

#创建数据库
mysql -e 'create database zabbix character set utf8 collate utf8_bin;'
mysql -e 'grant all privileges on zabbix.* to zabbix@localhost identified by "zabbix";'

#导入数据
zcat /usr/share/doc/zabbix-server-mysql-3.0.13/create.sql.gz|mysql -uzabbix -pzabbix zabbix

#配置zabbixserver连接mysql
sed -i.ori '115a DBPassword=zabbix' /etc/zabbix/zabbix_server.conf

#添加时区
sed -i.ori '18a php_value date.timezone  Asia/Shanghai' /etc/httpd/conf.d/zabbix.conf

#解决中文乱码
yum -y install wqy-microhei-fonts
cp /usr/share/fonts/wqy-microhei/wqy-microhei.ttc /usr/share/fonts/dejavu/DejaVuSans.ttf

#启动服务
systemctl start zabbix-server
systemctl start httpd

#写入开机自启动,根据自己需要,建议在调试期间不要直接写入,等你稳定了再写也不迟
chmod +x /etc/rc.d/rc.local
cat >>/etc/rc.d/rc.local<<EOF
systemctl start mariadb.service
systemctl start httpd
systemctl start zabbix-server
EOF

接下来就是说说安装过程中踩的坑了

在这里插入图片描述这个是因为selinux处于开启状态,官网上面有说明,需要关闭。
setenforce 0

第二个问题,由于是参考人家的,所以在导入数据的步骤路径没有改对,所以导致后面页面配置后没有数据

#导入数据
zcat /usr/share/doc/zabbix-server-mysql-3.0.13/create.sql.gz|mysql -uzabbix -pzabbix zabbix

zabbix-server-mysql-3.0.13这个以自己实际的版本为准

到这里zabbix-server安装成功并且启动!!!!

安装客户端zabbix-agent:

#安装zabbix源、aliyu nYUM源
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
rpm -ivh http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm

#安装zabbix客户端
yum install zabbix-agent -y
#设置server的IP,主动推送的地址
sed -i.ori 's#Server=192.168.0.195#Server=192.168.0.195#' /etc/zabbix/zabbix_agentd.conf
systemctl start  zabbix-agent.service

#写入开机自启动
chmod +x /etc/rc.d/rc.local
cat >>/etc/rc.d/rc.local<<EOF
systemctl start  zabbix-agent.service
EOF

同样的,这里seliunx也需要关闭,不过启动的时候经常会出现错误信息,我们可以通过查看日志来锁定问题,在 /etc/zabbix/zabbix_agent.conf记录了日志的路径,默认路径为/var/log/zabbix/下面
在这里插入图片描述
我们已经安装好了zabbix-server和zabbix-agent,需要检测下是否连接成功,zabbix给我们提供了工具,zabbix-get需要安装在server端,安装一下吧!

yum install zabbix-get

安装完成后开始检测是否连接成功,我装了两个agent
zabbix_get -s 192.168.0.191 -p 10050 -k “system.cpu.load[all,avg1]”
zabbix_get -s 192.168.0.190 -p 10050 -k “system.cpu.load[all,avg1]”
在这里插入图片描述
在此说明下,agent的端口是10050,server的端口是10051

接下来我们就可以去页面看看我们安装的zabbix了:http://192.168.0.195/zabbix/setup.php
页面的配置基本上都是下一步,这里就不过多描述了,网上很多,肯定难不倒各位大佬,跳过(手动狗头)!

可以参考下面的链接,描述的非常详细
参考 https://www.cnblogs.com/clsn/p/7885990.html#auto-id-1

zabbix集成JMX

上述说的是ZBX模块的功能,主要是硬件相关的监控,接下来我们就要开始扩展的内容了。

我是一名Java开发,在系统上线后如果经常出现内存溢出等情况,就需要跟现场的实施或者运维同事沟通,然后下载dump文件进行分析,如果现场是个离线的环境那就更痛苦了,如果这时候能有个系统能把JVM也展示出来就方便很多了,从官网上面看zabbix刚好可以做到这点,美滋滋。

监控原理:当Zabbix-Server需要知道java应用程序的某项性能的时候,会启动自身的一个Zabbix-JavaPollers进程去连接Zabbix-Java-Gateway请求数据,而Zabbix-Java-gateway收到请求后使用"JMXmanagementAPI"去查询特定的应用程序,而前提是应用程序这端在开启时需要"-Dcom.sun.management.jmxremote"参数来开启JMX远程查询就行。Java程序会启动自身的一个简单的小程序端口12345向Zabbix-JavaGateway提供请求数据。
在这里插入图片描述
zabbix-java-gateway充当一个采集器,是一个独立的模块,不强制要求安装在zabbix-server所在的服务器,或者装在zabbix-agent所在服务器,我这次是安装在了zabbix-server所在服务器,也就是192.168.0.195上面,不想新创建虚拟机了。

yum install -y zabbix-java-gateway
[root@zabbix ~]# vim /etc/zabbix/zabbix_java_gateway.conf
LISTEN_IP="0.0.0.0"    #监听地址
LISTEN_PORT=10052    #监听端口
PID_FILE="/var/run/zabbix/zabbix_java.pid"#PID_FILE文件
START_POLLERS=5        #开启的工作线程数

[root@zabbix ~]# systemctl start zabbix-java-gateway.service

[root@zabbix ~]# systemctl enable zabbix-java-gateway.service

[root@zabbix ~]# vim /etc/zabbix/zabbix_server.conf

JavaGateway=127.0.0.1        #java_gateway的地址

JavaGatewayPort=10052    #java_gateway的端口

StartJavaPollers=5        #采集进程数,与java_gateway配置相同

[root@zabbix ~]# systemctl restart zabbix-server.service        #重启zabbix-server

这样就配置完成了,就等着某台机器上面的Java程序启动了

监控TomCat启动的服务
加入配置

vim /application/tomcat/bin/catalina.sh

#!/bin/sh

CATALINA_OPTS="-Dcom.sun.management.jmxremote         #开启远程监控

-Dcom.sun.management.jmxremote.authenticate=false         #关闭权限认证

-Dcom.sun.management.jmxremote.ssl=false                 #远程ssl验证为false

-Djava.rmi.server.hostname=192.168.0.191                    #部署了tomcat的主机地址

-Dcom.sun.management.jmxremote.port=12345"            #远程监控端口

spring boot直接用Java -jar启动
需要在启动的命令上面加一些参数,启动命令如下:

nohup java -Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=192.168.0.191 -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dloader.path=config -jar ***.jar &

启动后在页面上面:配置–>主机 添加JMX
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这些就是JXM的内容,系统使用的是JDK1.8的版本,所以没有了永久代信息

从这里我们可以看到,很多JVM信息在页面上并没有看到,比如Full GC的次数,以及Full GC平均耗时,查阅了很多资料,基本上都是使用脚本来收集数据,不过网上对自定义item的描述非常少,所以下面我们就需要了解下自定义item监控JVM剩下的信息

自定义item监控JVM 垃圾回收(GC)状态

监控基础: linux下监控jvm的gc状态的工具为jdk自带 jstat
在这里插入图片描述
配置agent监控脚本:

vi /etc/zabbix/shell/get_socket_jstat_status.sh

TargetWord和JavaBinDir根据自己实际情况去改了

#!/bin/bash
 
TargetWord='control_center.jar'
JavaBinDir='/home/java/jdk/jdk1.8.0_311/bin/'
 
PID=$("${JavaBinDir}"jps -l |grep ${TargetWord} | awk -F' ' '{print $1}')
 
flag=0
for i in $PID
do
    if [ ! -z $i  ]
    then
        let flag+=1
    fi
done
 
if [ $flag -ne 1 ]
then
    echo "the number of $TargetWord is more than 1 !!!"
    exit
fi
 
# get value from jstat
function gcstat_colum(){
    if [ ! -z ${1} ] && [ -z ${2} ]
    then
        ret=`"${JavaBinDir}"jstat -gccause $PID 1 1 |tail -1|awk -F' ' '{print $'${1}'}'`
        echo $ret
    elif [ ! -z ${1} ]&& [ ! -z ${2} ]
    then
        ret=`"${JavaBinDir}"jstat -gccause $PID 1 1 |tail -1|awk -F' ' '{print $'${1}',$'${2}'}'`
        echo $ret
    else
        echo 'function get wrong arguments !'
    fi
}
 
# print prompt when script parameter is wrong
function print_prompt(){
    echo '    please input correct parameter !' 
    echo '
    s1  (Survivor0)
    s2  (Survivor1)
    eden(Eden)
    old (Old)
    meta(Metaspace)
    css (CCS)
    ygc (YGC)
    ygct(YGCT)
    fgc (FGC)
    fgct(FGCT)
    gct (GCT)
	lgcc(LGCC)
    gcc (GCC)
'
}
 
# transfer script's parameter to function gcstat_colum()
case $1 in
s1)
    gcstat_colum 1
    ;;
s2)
    gcstat_colum 2
    ;;
eden)
    gcstat_colum 3
    ;;
old)
    gcstat_colum 4
    ;;
meta)
    gcstat_colum 5
    ;;
css)
    gcstat_colum 6
    ;;
ygc)
    gcstat_colum 7
    ;;
ygct)
    gcstat_colum 8
    ;;
fgc)
    gcstat_colum 9
    ;;
fgct)
    gcstat_colum 10
    ;;
gct)
    gcstat_colum 11
    ;;
lgcc)
    gcstat_colum 12 13
    ;;
gcc)
    gcstat_colum 14 15
    ;;
*)
    print_prompt
    ;;
esac

添加执行权限

chmod +x /etc/zabbix/shell/get_socket_jstat_status.sh

agent配置文件:
/etc/zabbix/zabbix_agentd.d/userparameter_socket.conf
在这里插入图片描述

UserParameter=Socket.Survivor0,/etc/zabbix/shell/get_socket_jstat_status.sh s1
UserParameter=Socket.Survivor1,/etc/zabbix/shell/get_socket_jstat_status.sh s2
UserParameter=Socket.Eden,/etc/zabbix/shell/get_socket_jstat_status.sh eden
UserParameter=Socket.Old,/etc/zabbix/shell/get_socket_jstat_status.sh old
UserParameter=Socket.Metaspace,/etc/zabbix/shell/get_socket_jstat_status.sh meta
UserParameter=Socket.CCS,/etc/zabbix/shell/get_socket_jstat_status.sh css
UserParameter=Socket.YGC,/etc/zabbix/shell/get_socket_jstat_status.sh ygc
UserParameter=Socket.YGCT,/etc/zabbix/shell/get_socket_jstat_status.sh ygct
UserParameter=Socket.FGC,/etc/zabbix/shell/get_socket_jstat_status.sh fgc
UserParameter=Socket.FGCT,/etc/zabbix/shell/get_socket_jstat_status.sh fgct
UserParameter=Socket.GCT,/etc/zabbix/shell/get_socket_jstat_status.sh gct
UserParameter=Socket.LGCC,/etc/zabbix/shell/get_socket_jstat_status.sh lgcc
UserParameter=Socket.GCC,/etc/zabbix/shell/get_socket_jstat_status.sh gcc

修改zabbix-agent.conf,将上述脚本和zabbix-agent关联上
在这里插入图片描述

vi /etc/zabbix/zabbix_agentd.conf
Include=/etc/zabbix/zabbix_agentd.d/*.conf

重启zabbix-agent

systemctl restart  zabbix-agent.service

检测是否生效

zabbix_get -s 192.168.0.191 -p 10050 -k "Socket.Eden"

在这里插入图片描述
这样我们就可以监控到JVM Eden的信息了,脚本里有很多信息,就不去一一验证了。

继续说踩坑,这里面最大的坑就是我手动执行了这个sh文件,得到了正确的结果,但是用上述命令测试连通性,就一直不对,提示:the number of $TargetWord is more than 1 !!!,意思就是找不到进程,但是我了解中zabbix用户是可以访问到root用户启动的线程的

#查看root用户启动线程
ps -ef |grep root

在这里插入图片描述

ls -l /proc/1/

在这里插入图片描述
都没有问题,最后发现是jps不能支持跨用户访问,面临选择,要么改脚本要么用zabbix用户启动线程,shell脚本对我来说比较陌生,尝试了几个方法最后妥协了,无奈,如果有大佬愿意教我一下,我会很感激的。

感觉已经快成功了,就差最后一步配置模板了,冲冲冲
配置–>模板–>创建模板
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
模板配置完成,检测下成果

在这里插入图片描述
搞定!!!剩下的就不说了,一个个加上去就好了

花了一个礼拜把这些都过了一遍,又花了一下午写了这篇文章,希望对大家有点帮助,写的不对的地方希望帮忙指正下,感谢感谢,继续干活,后续还需要把这些东西放到docker上。估计就近期吧

这块参考的文章:https://blog.csdn.net/yetugeng/article/details/101681698

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>