zabbix监控jmx

背景:目前公司用的主要语言就是java,然后在运维过程中会遇到频繁的内存溢出的情况,之前使用过elk日志分析系统可以实时的判断出内存溢出的情况,但是无法查看内存的使用情况,只能通过dump文件查看内存溢出的时候dump下来的文件去分析。这样也无法准确的判断出问题。zabbix可以监控java,并且将内存的使用情况实时的展现出来,这是一个不错的选择。

JMX的全称是Java Management Extensions,即Java管理扩展。Java程序会开放一些端口,用来获取运行状况。在Zabbix 1.8以前,只能使用Zapcat来监控JMX,并需要修改源代码来支持,非常麻烦。另一种方法是使用jmx-cmd-client,他的作用是从命令行去获取JMX信息,可以在它的上层包装一个程序,用来获取JMX数据。

    从Zabbix 2.0开始,内置了监控JMX的功能,叫做“Zabbix Java Gateway”,在Zabbix Server和Zabbix Proxy上启动名为“Zabbix Java Gateway”的进程,当需要获取JMX数据时,Zabbix Server会“问”JMX Gateway,然后JMX Gateway根据JMX管理API去查询需要的数据。在使用时,Java程序不需要在代码中新增任何东西,只需要在启动的时候加上一些JVM参数,使得它可以支持使用端口监控JMX。

zabbix jmx的架构:

zabbix server -> zabbix java Gateway -> jmx counter

zabbix的安装这里稍微讲下,需要开启java以及后续要用到ldap认证

所以需要在编译的时候将功能编译进去,但首先取药安装这些组件比如java php-ldap等

yum install libssh2-devel.*

yum install libssh2-devel.i686

yum install openldap openldap-devel

yum install unixODBC-devel

安装java

wget http://mirrors.linuxeye.com/jdk/jdk-7u80-linux-x64.tar.gz && tar -xf jdk-7u80-linux-x64.tar.gz -C /usr/local/ && chown root:root -R /usr/local/jdk1.7.0_80/

cat >> /etc/profile << “EOF”

export JAVA_HOME=/usr/local/jdk1.7.0_80

export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export PATH=$PATH:$JAVA_HOME/bin

EOF

source /etc/profile

java -version

rm -fr /bin/java

ln -s /usr/local/jdk1.7.0_80/bin/java /bin/

java -version

./configure –enable-java -prefix=/usr/local/zabbix –enable-server –enable-agent –with-mysql –with-net-snmp –with-libcurl –with-net-snmp –with-libcurl –with-libcurl –with-unixodbc –with-ldap –with-ssh2

make && make install

创建用户

groupadd zabbix

useradd -r -g zabbix zabbix

cd /usr/local && chown -R zabbix:zabbix zabbix

mysql数据库的话需要以下设置

mysql -uroot -p create database zabbix character set utf8; grant all on zabbix.* to zabbix@localhost identified by ‘zabbix’; mysql -uzabbix -pzabbix zabbix<./database/mysql/schema.sql mysql -uzabbix -pzabbix zabbix<./database/mysql/images.sql mysql -uzabbix -pzabbix zabbix<./database/mysql/data.sql

配置配置文件:

cat /usr/local/zabbix/etc/zabbix_server.conf | grep -v ^$ | grep -v ^#

LogFile=/tmp/zabbix_server.log #日志路径

DBHost=**** #mysql地址

DBName=zabbix #mysql库名

DBUser=zabbix #mysql帐号

DBPassword=zabbix_1 #mysql密码

DBSocket=/tmp/mysql.sock #mysql socke的路径

StartDiscoverers=2 #自动发现的初始值

Timeout=4

AlertScriptsPath=/var/lib/zabbixsrv/alertscripts

ExternalScripts=/var/lib/zabbixsrv/externalscripts

LogSlowQueries=3000

TmpDir=/var/lib/zabbix/srv/tmp

监控java程序还需要以下设置:

sudo vim /usr/local/zabbix/sbin/zabbix_java/settings.sh # 需修改的内容如下 #服务器端ip地址 LISTEN_IP=10.1.31.31 LISTEN_PORT=10052 PID_FILE=”/tmp/zabbix_java.pid” START_POLLERS=5 sudo chown zabbix.zabbix /usr/local/zabbix -R sudo vim /etc/zabbix/zabbix_server.conf # 需添加的内容如下 #服务器端ip地址 JavaGateway=10.1.31.31 JavaGatewayPort=10052 StartJavaPollers=5

启动zabbix_java

sudo -iu zabbix cd /usr/local/zabbix/sbin/zabbix_java/ ./startup.sh

传catalina-jmx-remote.jar包到tomcat的lib目录下 没有的话需要下载

修改catalina.sh

sudo vim /home/qjdchina.com/tomcat-server/ams/bin/catalina.sh #需添加的内容 CATALINA_OPTS=”-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.port=12345″

com.sun.management.jmxremote.port=12345这个参数也可以加到server.xml

<Listener className=”org.apache.catalina.mbeans.JmxRemoteLifecycleListener” rmiRegistryPortPlatform=”12345″ rmiServerPortPlatform=”12346″ />

images

然后重启tomcat和zabbix客户端的服务,重启之后到服务器端进行测试

java -jar /root/cmdline-jmxclient-0.10.3.jar – 10.1.1.144:12345 java.lang:type=Memory NonHeapMemoryUsage

返回结果如下所示

22/07/2016 15:42:02 +0800 org.archive.jmx.Client NonHeapMemoryUsage: committed: 47316992 init: 24313856 max: 136314880 used: 47012784

后续只需要在zabbix web端加入主机 并增加jmx接口 并且加入模版 模版我用的是自定义的模版 如果有需要可以联系我

images

模版的效果图展示

images

猜你喜欢

转载自blog.csdn.net/qq_22543991/article/details/82344328
今日推荐