因为一台web应用服务器上面安装了多台tomcat,有多个端口,比如默认的8080,还有后续追加的9100,9300,9500等等。一个cacti_host_template_tomcat_server.xml模板只能指定监控一个tomcat服务端口。
因此如果想要监控一台web服务器上的多个tomcat服务器,那么就必须另外想办法,按照一个host上面一个模板监控一个tomcat服务来说的话,要想在一个host上面监控多个tomcat服务就需要构建多个模板xml文件。目前想到2种方法:
(1),在cacti的web页面上一步步点击按钮操作添加新的tomcat端口监控选项。
(2),构建一个新的xml模板文件,重新加载进去。
准备工作:
Cacti监控Tomcat服务器实现过程:http://blog.csdn.net/mchdba/article/details/29372347
Cacti使用安装详解: http://blog.csdn.net/mchdba/article/details/27120605
1人工在web界面添加多tomcat端口监控选项
看到cacti服务页面有Add按钮,可以一步步添加模板,所以首先在界面上手动添加另外一个tomcat 9500模板,大概步骤如下所示:
1.1先建Data Input Source
Data Input Method一项选择step1建立的Tomcat 9500 Status
1.2建立Data Tempate
在Data Input Method一项选择step 1建立的Tomcat 9500 Status
在这里要特别注意Data Source Type的选择,是Count还是GAUGE,不要选错,选错了,就是NAN值,图上出不来数据。
【PS】:这里有14个Data Source Item,手动一个个确实比较麻烦,而且一个端口需要建一个,一个端口N个服务,一个服务14个端口,如果都是手工一个个添加过来,那就到猴年马月了,在添加的过程中,还要注意一些下拉选项,很消耗时间和精力。
1.3建立Data Source
点击Create按钮,下一步:
看到有提示准备生成
1.4建立Graph Template
1.5建立Graph Tempate
之后,还需要建立显示图画颜色等的Item以及Item Input。
(1)点击当前页面的Graph Template Items [edit: 9500 Tomcat – Connection Rate]标题栏后面的Add按钮,参考已经有的Tomcat – Connection Rate来创建一模一样的item。
(2)点击Graph Item Inputs标题栏后面的Add按钮,参考已经有的Tomcat – Connection Rate来添加数据来源选项。
(3)确保所有的选项值跟原有的一样,特别是Unit Grid Value (--unit/--y-grid)的值为0,之后点击Save按钮保存。
1.6进去Graph Management界面,创建Graph图,如下所示:
点击Create之后,进去选择好Graph Item Fields,打开Debug Mode模式,就可以看到RRDTool Commands以及出来的debug图片数据,如下所示:
然后,去Graphs界面,查看创建的rate图,如下9500端口的数据出来了:
这种办法虽然笨拙耗时,但是总算一步步来,还是可以添加完成的。
2,看到手动在web界面添加cacti的tomcat模板文件,太耗时太麻烦,所以另选途径再构造一份cacti下的tomcat模板文件。
2.1直接替换tomcat字符串在后面加9500端口
想要弄亲自构建另外一个tomcat监控的模板文件,可以以现在的cacti_host_template_tomcat_server.xml为基础来实现。打开模板文件,可以看到很多标签,先检索到带Tomcat的标签,然后保存,在界面加载Import成功后,Console --> Collection Methods --> Data Input Methods里面还是只有一个选项9500 Tomcat Status,原来的Tomcat Status没有了,也就是说原来的Tomcat Status被后来的9500的模板xml直接覆盖了,这一种方式走不通。
2.2继续从后台的cacti数据库里面的数据进行研究
研究tomcat的模板配置文件,进去cacti后台数据库的模板表里,查看导入的tomcat模板表:
mysql> SELECT * FROM `data_template` WHERE NAME LIKE '%tomcat%';
+-----+----------------------------------+--------------------+
| id | hash | name |
+-----+----------------------------------+--------------------+
| 101 | 5a135ee7b52669e39cd51a89a2870f66 | 9500 Tomcat Status |
| 102 | b58769ff71c16b0126014efdf8f5892c | Tomcat 9500 Status |
+-----+----------------------------------+--------------------+
2 rows in set (0.00 sec)
mysql>
5a135ee7b52669e39cd51a89a2870f66在xml文件中存在,而且是
……
其中’hash_01’是标示,中间的’0012’是cacti版本号码,在后面的一系列散乱的字符串’5a135ee7b52669e39cd51a89a2870f66’就是中的后面数字。
分析到这里,想到决定是否新加一个模板的关键应该就是这些hash数据,如果把模板xml里面的hash值换成新的,是否就可以加载成另外一个新的tomcat端口的xml模板呢?试试吧。
2.3开始构建新的hash值
思路:先找出原有的xml模板中的所有hash值,将后四位截取换成tomcat端口号9500,
2.3.1在linux下用grep命令获得所有cash值
[root@mysqlvm2 ~]# more cacti_host_template_tomcat_server.xml |grep hash > cacti_hash.xml
这里的cacti_hash.xml里面包含的内容如下所示:
[root@mysqlvm2 ~]# more cacti_hash2.xml |more
7762e90d52cc39500
…
…..
看到其中还有许多
:%s/
最终得到一行一行的hash值的cacti_hash.xml文件。
2.3.2遍历hash值文件,生成新的hash值xml模板。
原理是写shell脚本遍历cacti_hash.xml文件,遍历hash值,然后去原来的模板文件里面cacti_host_template_tomcat9500_server.xml找到对于的hash值,将后4位替换成tomcat端口号9500,shell命令如下所示:
(1),Copy一个副本xml文件
[root@mysqlvm2 ~]#
cp cacti_host_template_tomcat_server.xml cacti_host_template_tomcat9500_server.xml
(2),写一个循环shell脚本
[root@mysqlvm2 ~]# more cacti2.sh
for i in `cat cacti_hash.xml`
do
# echo $i;
port='9500';
new_hash=${i:0:39}$port;
# echo $new_hash;
sed -i "s/$i/$new_hash/" cacti_host_template_tomcat9500_server.xml
done;
[root@mysqlvm2 ~]#
(3),执行shell命令,生成新的9500模板
[root@mysqlvm2 ~]# sh cacti2.sh
2.4 copy出行的9500端口文件,在界面加载
加载完成后,就会在Console --> Collection Methods --> Data Input Methods里面看到新添加上的9500 Tomcat Status选项,
记得点击9500超链接进去,把Input String换成9500端口的访问连接,这样这个9500端口监控所获取的所有数据都是从9500端口的tomcat服务器上而来,如下图所示:
在Console --> Templates --> Data Templates/Graph Templates上面也可以看到新添加上的9500 Tomcat Status选项,如下图所示:
OK,现在就可以去Console --> Create --> Management --> Graph Management添加tomcat另外一个9500端口的监控选项,点击按钮的时候,记得在Selected Graph Template下拉选框上选择9500标示的模板,添加完后如下所示:
2.5,报错处理
有报错如下:
RRDTool Says:
ERROR: Could not parse line 'GPRINT::MAX:Maximum\:%8.2lf %s\n'
进去-->Graph Templates
>9500 Tomcat - Connection Rate --> Data Source [error_count] --> Item #4: GPRINT (MAX) 打勾选上,如下所示:
去Graphs窗口查看效果,在同一个web-9服务器上,一个基本端口8080一个9500端口的图像都出来了,如下所示:
最后在进入后台cacti数据库去查看下我们的验证
mysql> SELECT * FROM `data_template` WHERE NAME LIKE '%tomcat%';
+-----+----------------------------------+--------------------+
| id | hash | name |
+-----+----------------------------------+--------------------+
| 101 | 5a135ee7b52669e39cd51a89a2870f66 | 9500 Tomcat Status |
| 102 | b58769ff71c16b0126014efdf8f5892c | Tomcat 9500 Status |
+-----+----------------------------------+--------------------+
2 rows in set (0.00 sec)
mysql> SELECT * FROM `data_template` WHERE NAME LIKE '%tomcat%';
+-----+----------------------------------+--------------------+
| id | hash | name |
+-----+----------------------------------+--------------------+
| 101 | 5a135ee7b52669e39cd51a89a2870f66 | 9500 Tomcat Status |
| 102 | b58769ff71c16b0126014efdf8f5892c | Tomcat 9500 Status |
| 104 | 5a135ee7b52669e39cd51a89a2879500 | 9500 Tomcat Status |
+-----+----------------------------------+--------------------+
3 rows in set (0.00 sec)
看id为101以及104的hash值和name描述,hash值后四位从0f66变成9500了。总结:
所有加载的cacti模板文件中,核心区分点所一个个hash值,如果构造出新的一组hash值,那么加载后就是新的监控选项。
假如你现在一个web服务器上又添加了一个9300的tomcat服务,你只需要把我分享的9500端口的xml中的hash末尾9500替换成9300,那么就又是一个新的xml模板。
以此类推,现在喜欢在一个linux服务器上搭建mysql多实例,那么多实例mysql如何在cacti下监控,也可以用本文中类似的办法构建新的mysql的多端口模板xml文件来重新加载实现。
cacti下监控tomcat多端口模板文件下载地址:http://download.csdn.net/detail/mchdba/7531125