关键词:
JAVA-GATEWAY Zabbix本身不支持直接监控Java,在zabbix 1.8以前,只能使用Zapcat来做代理监控,而且要修改源代码,非常麻烦。所有后来为了解决这个监控问题,Zabbix和Java双方应运生成了各自的代理监控程序:zabbix 2.0以后添加了服务进程zabbix-java-gateway;Java有了JMX,全称是Java Management Extensions,即Java管理扩展 比如:当Zabbix-Server需要知道java应用程序的某项性能的时候,会启动自身的一个Zabbix-JavaPollers进程去连接Zabbix-JavaGateway请求数据,而ZabbixJavagateway收到请求后使用“JMXmanagementAPI”去查询特定的应用程序,而前提是应用程序这端在开启时需要“-Dcom.sun.management.jmxremote”参数来开启JMX远程查询就行。Java程序会启动自身的一个简单的小程序端口12345向Zabbix-JavaGateway提供请求数据。 开始监控部署 从上面的原理图中我们可以看出,配置Zabbix监控Java应用程序的关键点在于:配置Zabbix-JavaGateway、让Zabbix-Server能够连接Zabbix-JavaGateway、Tomcat开启JVM远程监控功能等 网上的大多数文章都配置的是被动模式(即zabbix server 去想java进程去取数据),这样会造成zabbix server的压力过大,所以应该采用主动模式(写一个zabbix类,然后主动去上报数据) 代码如下: zabbix.py cat zabbix.py cat zabbix_wiki_node1_java.py #!/usr/bin/env python #fileencoding: utf-8 ITEMS = [ ‘jmx["java.lang:type=ClassLoading",LoadedClassCount]‘, ‘jmx["java.lang:type=ClassLoading",TotalLoadedClassCount]‘, ‘jmx["java.lang:type=ClassLoading",UnloadedClassCount]‘, ‘jmx["java.lang:type=Memory",HeapMemoryUsage.committed]‘, ‘jmx["java.lang:type=Memory",HeapMemoryUsage.max]‘, ‘jmx["java.lang:type=Memory",HeapMemoryUsage.used]‘, ‘jmx["java.lang:type=Memory",NonHeapMemoryUsage.committed]‘, ‘jmx["java.lang:type=Memory",NonHeapMemoryUsage.max]‘, ‘jmx["java.lang:type=Memory",NonHeapMemoryUsage.used]‘, ‘jmx["java.lang:type=MemoryPool,name=Code Cache",Usage.committed]‘, ‘jmx["java.lang:type=MemoryPool,name=Code Cache",Usage.max]‘, ‘jmx["java.lang:type=MemoryPool,name=Code Cache",Usage.used]‘, ‘jmx["java.lang:type=MemoryPool,name=PS Eden Space",Usage.committed]‘, ‘jmx["java.lang:type=MemoryPool,name=PS Eden Space",Usage.max]‘, ‘jmx["java.lang:type=MemoryPool,name=PS Eden Space",Usage.used]‘, ‘jmx["java.lang:type=MemoryPool,name=PS Old Gen",Usage.committed]‘, ‘jmx["java.lang:type=MemoryPool,name=PS Old Gen",Usage.max]‘, ‘jmx["java.lang:type=MemoryPool,name=PS Old Gen",Usage.used]‘, ‘jmx["java.lang:type=MemoryPool,name=PS Perm Gen",Usage.committed]‘, ‘jmx["java.lang:type=MemoryPool,name=PS Perm Gen",Usage.max]‘, ‘jmx["java.lang:type=MemoryPool,name=PS Perm Gen",Usage.used]‘, ‘jmx["java.lang:type=MemoryPool,name=PS Survivor Space",Usage.committed]‘, ‘jmx["java.lang:type=MemoryPool,name=PS Survivor Space",Usage.max]‘, ‘jmx["java.lang:type=MemoryPool,name=PS Survivor Space",Usage.used]‘, ‘jmx["java.lang:type=OperatingSystem",MaxFileDescriptorCount]‘, ‘jmx["java.lang:type=OperatingSystem",OpenFileDescriptorCount]‘, ‘jmx["java.lang:type=Runtime",Uptime]‘, ‘jmx["java.lang:type=Threading",DaemonThreadCount]‘, ‘jmx["java.lang:type=Threading",PeakThreadCount]‘, ‘jmx["java.lang:type=Threading",ThreadCount]‘, ‘jmx["java.lang:type=Threading",TotalStartedThreadCount]‘, ‘jmx["Standalone:type=GlobalRequestProcessor,name=http-8090",bytesReceived]‘, ‘jmx["Standalone:type=GlobalRequestProcessor,name=http-8090",bytesSent]‘, ‘jmx["Standalone:type=GlobalRequestProcessor,name=http-8090",errorCount]‘, ‘jmx["Standalone:type=GlobalRequestProcessor,name=http-8090",processingTime]‘, ‘jmx["Standalone:type=GlobalRequestProcessor,name=http-8090",requestCount]‘, ‘jmx["Standalone:type=Manager,path=/,host=localhost",activeSessions]‘, ‘jmx["Standalone:type=Manager,path=/,host=localhost",maxActiveSessions]‘, ‘jmx["Standalone:type=Manager,path=/,host=localhost",maxActive]‘, ‘jmx["Standalone:type=Manager,path=/,host=localhost",rejectedSessions]‘, ‘jmx["Standalone:type=Manager,path=/,host=localhost",sessionCounter]‘, ‘jmx["Standalone:type=ProtocolHandler,port=8090",compression]‘, ‘jmx["Standalone:type=ThreadPool,name=http-8090",currentThreadCount]‘, ‘jmx["Standalone:type=ThreadPool,name=http-8090",currentThreadsBusy]‘, ‘jmx["Standalone:type=ThreadPool,name=http-8090",maxThreads]‘, ] from zabbix import Zabbix from zabbix import json def getjmxkey(key): # key = key.replace(‘http-8080‘, ‘\"http-bio-8080\"‘) # key = key.replace(‘path=/‘, ‘context=/‘) return key def getjmxvalue(value): if isinstance(value, dict): return value.get(‘value‘, u‘‘).encode(‘utf8‘) return ‘‘ if __name__ == ‘__main__‘: host = ‘it-tw01‘ zbx = Zabbix() jmxkeys = [getjmxkey(x) for x in ITEMS] data = zbx.getjmx(‘it-tw01‘, ‘8410‘, jmxkeys) try: results = json.loads(data) except: results = {} if isinstance(results, dict) and results[‘response‘] == ‘success‘: jmxvalues = [getjmxvalue(x) for x in results.get(‘data‘, [])] hostvalues = {host: dict(zip(ITEMS, jmxvalues))} Zabbix(hostvalues).run() # vim: set sta sw=4 et:
* * * * * /home/sankuai/monitor/zabbix_wiki_node1_java.py zabbix /etc/zabbix# ls zabbix_agentd.conf zabbix_agentd.confn-place zabbix_agentd.d zabbix_java_gateway.conf it-tw01需要关联的模板见附件 特别注意: 编译安装zabbix server需要加上--enable-java以支持jmx监控,如果之前的zabbix server没加,那么请重新编译安装,参考编译参数 安装软件 yum install -y java java-devel zabbix-java-gateway 更多的请参考这个文章:http://www.iyunv.com/thread-269939-1-1.html |
zabbix使用进阶
zabbix使用进阶(五)===============================================================================概述:===============================================================================回顾:650)this.width=650;"src 查看详情
zabbix使用进阶
zabbix分布式监控===============================================================================概述===============================================================================zabbixproxy: ---可选 查看详情
使用docker安装zabbix,并配置自定义监控项(代码片段)
使用Docker安装Zabbix,并配置自定义监控项一、Zabbix简介1.监控功能2.Zabbix工作原理3.Zabbix组件4.Zabbix进程二、使用Zabbix配置自定义监控项1.安装Zabbix2.开启自定义监控项3.编写Nginx自定义监控脚本一、Zabbix简介Zabbix可以用来监控各... 查看详情
zabbix使用之打造邮件报警
zabbix使用之打造邮件报警 前言: 报警信息很重要,它能使我们最快的知道故障内容,以便于及时处理问题。zabbix如果没配置报警功能,则完全不能体现zabbix的优势了 配置详情如下:1.编写发送邮件脚本:cat/usr/local/za... 查看详情
zabbix实战之部署篇使用docker部署zabbix6.2.7监控平台
【Zabbix实战之部署篇】使用Docker部署Zabbix6.2.7监控平台一、Zabbix介绍1.Zabbix简介2.Zabbix指标采集方法3.Zabbix特点4.Zabbix功能5.Zabbix架构图二、环境部署规划1.系统版本2.zabbix各组件版本三、本地环境检查1.检查系统版本2.检查docker版本3... 查看详情
zabbix中文使用手册
一、Zabbix简介 详情参考“企业监控利器-zabbix”http://waringid.blog.51cto.com/65148/904201。二、Zabbix使用2.1Zabbix框架介绍 在浏览器中输入http://192.168.0.189进入监控软件登陆界面(图二),登陆用户名和密码为network,登陆后... 查看详情
zabbix使用
算是从心理上接受了这种模式以后有空会多看那本书的.https://www.zabbix.com/documentation/2.0/manual/config/items/userparameters 查看详情
zabbix中文使用手册
一、Zabbix简介 详情参考“企业监控利器-zabbix”http://waringid.blog.51cto.com/65148/904201。二、Zabbix使用2.1Zabbix框架介绍 在浏览器中输入http://192.168.0.189进入监控软件登陆界面(图二),登陆用户名和密码为network,登陆后的界... 查看详情
zabbix实战之部署篇zabbix使用snmp监控linux系统
【Zabbix实战之部署篇】Zabbix使用SNMP监控Linux系统一、SNMP协议介绍1.SNMP协议简介2.SNMP协议特点二、实践环境介绍三、检查Zabbix监控平台环境1.检查Zabbix相关组件容器状态2.检查Zabbix的首页四、被控端安装SNMP监控工具1.检查被控端服... 查看详情
zabbix-agent使用普通用户来运行
参考技术A使用yum来安装的zabbix-agent默认使用zabbix运行,通常情况下这没有什么问题。近期我们有个需求,我们希望通过zabbix来监控java进程中jvm的信息。对jvm的监控我们通常使用jstat命令,这要求使用该命令的用户和java进程启动... 查看详情
zabbix-3.2.6之get使用方法
一、zabbix-get介绍Zabbix-Get是zabbix中的一个程序,用于zabbix-server到zabbix-agent的数据获取,通常用来检测验证agnet的配置是否正确。在zabbix-server上面安装下载软件包:zabbix-get-3.2.6-1.el7.x86_64.rpm地址:http://repo.zabbix.com/zabbix/3.2/rhel/7/x86_... 查看详情
如何使用 API 上传 Zabbix 模板
】如何使用API上传Zabbix模板【英文标题】:HowtouploadZabbixtemplateusingAPI【发布时间】:2013-12-2214:56:10【问题描述】:有谁知道,?我们正在尝试使用java和Zabbix2.0API。我们的目标是获取不同主机的Zabbix图表(png图片),并将它们显... 查看详情
zabbix使用zabbix-java-gateway监控jvm/tomcat性能
JAVA-GATEWAY Zabbix本身不支持直接监控Java,在zabbix1.8以前,只能使用Zapcat来做代理监控,而且要修改源代码,非常麻烦。所有后来为了解决这个监控问题,Zabbix和Java双方应运生成了各自的代理监控程序:zabbix2.0以后添加了服务... 查看详情
zabbix网页默认使用英文
zabbix网页默认使用英文1.如果英文熟悉的话建议直接用英文2.把Admin用户修改为中文zabbix默认的字段问题1.中文会有部分乱码的情况2.监控->图形里的监控图形会有乱码的产生解决zabbix部分乱码1.下载微软雅黑字体https://raw.githubuser... 查看详情
zabbix使用zabbix_java_gateway监控java应用进程
JAVA-GATEWAYZabbix本身不支持直接监控Java,在zabbix1.8以前,只能使用Zapcat来做代理监控,而且要修改源代码,非常麻烦。所有后来为了解决这个监控问题,Zabbix和Java双方应运生成了各自的代理监控程序:zabbix2.0以后添加了服务进程z... 查看详情
快速配置和使用zabbix(代码片段)
zabbix-server安装的详细步骤可参考:http://blog.51cto.com/13632824/2084412比较详细,适合新手入门。zabbix-agent客户端的安装:这里的客户端依然采用RPM方式安装[[email protected]~]#rpm-ivhhttp://repo.zabbix.com/zabbix/2.4/rhel/6/x86_64/zabbix-re 查看详情
security基础:部署zabbix监控平台配置及使用zabbix监控系统自定义zabbix监控项目实现zabbix报警功能
一、部署Zabbix监控平台目标:本案例要求部署一台Zabbix监控服务器,一台被监控主机,为进一步执行具体的监控任务做准备: 在监控服务器上安装LAMP环境 修改PHP配置文件,满足Zabbix需求 ... 查看详情
zabbix-proxy的安装以及使用(代码片段)
############yum源#############[[email protected]zabbix]#cat/etc/yum.repos.d/zabbix.repo[zabbix]name=ZabbixOfficialRepository-$basearchbaseurl=http://repo.zabbix.com/zabbix/3.4/rhel/7/$basearch/ena 查看详情