zabbix 如何监控多实例tomcat,求大神!给指教

 我来答
xiangjuan314
2016-06-06 · TA获得超过3.3万个赞
知道大有可为答主
回答量:2.9万
采纳率:0%
帮助的人:2870万
展开全部
方法如下:

首先,需要创建个文档test.txt,将服务和端口写进去。

tomcat|8080|
tomcat|8089|

然后,server_port.py来读取文档并输出json串(服务:端口)。
此脚本经过修改,可以输出多个参数。也加上简单的异常处理。注意修改文件路径。

#!/usr/bin/env python
import os
import json
import sys

f = open("/../test.txt", "r")
ports = []
for port in f.readlines():
if not port.strip():continue
r = port.strip().split('|')
if len(r)<3:continue
ports +=[{'{#'+r[0].upper()+'PORT}':r[1],'{#'+r[0].upper()+'A}':r[2]}]
# ports +=[{'{#'+r[0].upper()+'PORT}':r[1]},{'{#'+r[0]+'A}':r[2]}]
print json.dumps({'data':ports},sort_keys=False,indent=4,separators=(',',':'))

在tomcat中配置管理用户名和密码。此处开放的权限还是比较大的,生产环境建议做下处理。

$TOMCAT_HOME/conf/tomcat-users.xml
默认的<tomcat-users>是注释掉的,需要放开注释并添加。manager-gui权限太大,改为manager-status则只能查看状态页,而不能做manager操作,更加安全。
<del> <role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="zabbix" password="zabbix" roles="manager-gui,admin-gui"/></del>

<role rolename="manager-status"/>
<user username="zabbix" password="zabbix" roles="manager-status"/>

最后,mon_tomcat.py进行监控,参数有两个:上一步获取的端口和具体的指标信息。注意修改tomcat配置的用户名和密码。
#!/usr/bin/python
import urllib2
import xml.dom.minidom
import sys

url = 'http://127.0.0.1:'<span style="color:#FF6666;">+sys.argv[1]+</span>'/manager/status?XML=true'
username = 'zabbix'
password = 'zabbix'

passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
passman.add_password(None, url, username, password)
authhandler = urllib2.HTTPBasicAuthHandler(passman)
opener = urllib2.build_opener(authhandler)
urllib2.install_opener(opener)
pagehandle = urllib2.urlopen(url)
xmlData = pagehandle.read()
doc = xml.dom.minidom.parseString(xmlData)

item =<span style="color:#FF6666;"> sys.argv[2]</span>

if item == "memory.free":
print doc.getElementsByTagName("memory")[0].getAttribute("free")
elif item == "memory.total":
print doc.getElementsByTagName("memory")[0].getAttribute("total")
elif item == "memory.max":
print doc.getElementsByTagName("memory")[0].getAttribute("max")
elif item == "threadInfo.maxThreads":
print doc.getElementsByTagName("threadInfo")[0].getAttribute("maxThreads")
elif item == "threadInfo.currentThreadCount":
print doc.getElementsByTagName("threadInfo")[0].getAttribute("currentThreadCount")
elif item == "threadInfo.currentThreadsBusy":
print doc.getElementsByTagName("threadInfo")[0].getAttribute("currentThreadsBusy")
elif item == "requestInfo.maxTime":
print doc.getElementsByTagName("requestInfo")[0].getAttribute("maxTime")
elif item == "requestInfo.processingTime":
print doc.getElementsByTagName("requestInfo")[0].getAttribute("processingTime")
elif item == "requestInfo.requestCount":
print doc.getElementsByTagName("requestInfo")[0].getAttribute("requestCount")
elif item == "requestInfo.errorCount":
print doc.getElementsByTagName("requestInfo")[0].getAttribute("errorCount")
elif item == "requestInfo.bytesReceived":
print doc.getElementsByTagName("requestInfo")[0].getAttribute("bytesReceived")
elif item == "requestInfo.bytesSent":
print doc.getElementsByTagName("requestInfo")[0].getAttribute("bytesSent")
else:
print "unsupport item."

自定义key是两条,一个是发现端口,一个是tomcat指标。脚本路径根据实际情况修改
UserParameter=server.discovery,/../server_port.py
UserParameter=tomcat.status[*],/../mon_tomcat.py $1 $2

模板改成自动发现的模板,还有将端口加进去。
在此列一条吧:
<name>最大处理时间{#TOMCATPORT}</name>
<key>tomcat.status[{#TOMCATPORT},requestInfo.maxTime]</key>

权限和路径要进行相应的设置和修改
追问
能不能在详细点,我是刚刚接触,好多还不太懂
力控科技
2024-08-19 广告
ForceSCADA是力控科技信创产品的重要组成部分,具备完全自主知识产权,支持部署在Linux桌面版、服务器版、嵌入式等系统架构下。使用ForceSCADA可以搭建创新性高、扩展性佳、融合度强的SCADA平台,进而构建高效、智能化的监控中... 点击进入详情页
本回答由力控科技提供
匿名用户
2016-06-06
展开全部
那表示你的tomcat启动超时了,有时候你重新启动下就好了,但有时需要重新启动很多次,如果你不想这样的话,你只需修改下tomcat的启动时间就行了,步骤如下:修改workspace\.metadata\.plugins\org.eclipse.wst.server.core\servers.xml文件。把start-timeout="45"改为start-timeout="1000"或者更长重启eclipse就可以了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式