疯狂的CACTI上的SQL SRV监控脚本

2.1kviews

上次偶尔一次机会上到公司的CACTI服务器上查一个东西,发现服务器的设置让架设服务器的搞的乱七八糟,系统安装的很诡异,所有的Patch都没有升级,装了DNS服务器根本没有按照专业的方法来装,挂的Apache还开着IIS,而且Apache,PHP和Mysql居然是使用的一个什么Appsrv的东西,我最烦这种组合,特殊设定让升级任何一个组件都有麻烦,设置还在跑了Mysql之后加了一个SQL ServerExpress的服务器,晕死啊,这个机器总共才1G的内存,居然折腾了这么多烂七八糟的东西,我真是服了这个哥们的糊弄的本事了,看到这些我心理很不痛快啊,算了自己搞吧,让他搞我最后说他他还不服气,干脆自己来。

升级服务器,打patch,修正DNS服务器的设置,本来想那个新版的Appsrv来更新这个旧版的,因为这也算是产品服务器了,不想动太大的动作,不过想了想,还是算了,等先把紧要的,就是SQL Server的监控脚本挂上去吧,因为毕竟公司的主力ERP – MS Dynamic Nav还是跑在SQL服务器上的,而且近期由于使用人员的增加,服务器的负载越来越重了,所以有效的监控对性能的保证等还是非常重要的,还是先挂SQL脚本吧,下载了脚本和Template之后按照说明,产生了用户,然后导入脚本,发现没有任何数据,嗯,这个要仔细调试了。

调试的第一步就是先看看抓取的工具Poller为什么抓不出数据来,本来偶不想动源码的,可是发现不动源码无论如何都发现不了错误,PHP本身不报任何错误,进入PHP一看,我晕,所有的log的directive都关着,先打开,然后重启Apache,继续测试,依然无果,唉,算了 ,还是要看源码吧,打开抓取的脚本,仔细观察,其实跟普通的数据库读写程序一样,PHP装入php_mssql.dll, 然后调用mssql_connect(),建立数据库链接之后读Master库的一个view, 读出所需要的系统的counter之后加一些处理写入的rrd文件,剩下的过程就跟普通的其他的template一样,由rrd工具制成图形,显示出来。

进入DOS界面手工运行这个脚本,没有任何 反馈,直接退出,吐血。。。怎么没有任何错误信息,进去仔细看了一下,没有什么明显的异常的地方,只能通过之前调试ASP的方法,加debug变量,然后在很多地方一步一步的加print显示是否运行到这个阶段等,这样立刻就发现连接数据库不成功,哦。。这个容易解决,回头到php.net看了一下连接函数,底下的评论很多,其中一个就说在windows之下不用加port等等,我心里一动,就改了程序,把port取消,直接host,username,password三个参数,这次连接成功,哇咔咔,终于搞定了这个问题,不过这个连接不成功则不给任何信息,那个get_last_message的函数就是个摆设,这个dll真垃圾啊,太受不了!!

接下来就想把这个脚本扔到Cacti的脚本服务器里去跑吧,可是发现在Dos命令行成功的脚本在脚本服务器里不行,我晕倒,怎么回事啊,测试到快下班没搞定,算了,明天再来吧,第二天继续,这次为了横向比较,把手头的三个SQL Server数据库都挂上同样的用户和脚本,在DOS下做个简单的测试,这回更吐血,发现除了我第一个测试的数据库可以之外,剩下两个数据库居然都链接不成功,再仔细检查了数据库的配置和用户的权限之后发现这三个库都一样,而且都可以用Management console连上去,这能是什么原因呢,而且SQL Server的log里没有任何拒绝的记录,叫了一个总折腾SQL Server的同事过来看了一下,俩人研究了俩三个小时最后在分析SQL Server的连接失败的日志里发现原来这个mssql_connect()是用namepipe的方式连接的,而根据默认设置,SQL server是disable了namepipe的连接的,我吐血,赶快enable了之后都连上了,但在Script Server里的连接失败的问题一直解决不了,主要是没有任何错误信息啊,最后没办法,只能认为是环境的问题,到了下班还没搞定,算了明天把环境换一下吧。

第三天终于下狠心把Apache给扔了,把整个Appsrv都抛弃,换成IIS加独立的新的PHP试验一下,至于Mysql server倒是不用着急,等系统稳定了再升级吧,跑到php.net 上一看,咦??这PHP5.2,5.3的版本的变动很大啊,居然不在以来php5isapi.dll的ISAPI方式了,不仅仅做了一个FastCGI的shell的方式,而且本身在编译的时候还根据不同的操作系统有VC6和VC9的编译版本,中间居然还分Thread Safe和Non Thread safe的方式了,这变化可真大,才一年多没配PHP,居然就一个小翻天覆地,而且最主要的是FastCGI和其他的一些组件居然是MS提供的,通常开源社区的MS的提供的版本都是被人骂的,但现在发现还居然很被人推崇,这真是不一样了。呵呵。

挂上IIS,升级,装VS2008的运行库,下载5.2.14的VC6 NTS版本,下载FastCGI 1.5,然后开始配置,安装,停掉Apache,配置好IIS的设置,然后重启IIS,这个时候突然发现PHP挂不上来,嗯?这是咋回事,主要是loading phpinfo()的页面死了,唉,真是多灾多难啊,这个平时玩的烂熟的php也开始捣乱,这时候已经周五下班了,本来同事们准备一起聚着玩三国杀,不过偶实在是不想这么半途而废,算了,不去了,回家继续战斗,回家后挂上VPN,继续,先开始下了好几个版本的php做测试,什么VC9,TS的和5.3.3的,都不行,总是timeout后出错,这是怎么回事呢,后来偶尔发现5.3.3 的php.ini跟之前5.2.3的php.ini的尺寸相差很大,觉得是不是自己的php.ini用老的不行啊,于是乎就换上新的php.ini, 然后把里面的时区,挂的dll和一些其他的设置大概的改了一下,这样phpinfo()那个经典的界面终于出来了,哇塞,累死偶了,这已经是周五的午夜了,明天继续吧。

今天早上怕起来继续战斗,打开MSSQL的dll之后发现php又死了,很纳闷,怎么回事,跑去目录里一看,居然没有了php_mssql.dll了,我吐血,这是咋回事啊,跑去php.net一看,才知道原因如下:” If you are currently running PHP 5.2 and utilizing the php_mssql.dll (Microsoft SQL Server) extension, it has been removed from 5.3. This was due to the fact that PHP 5.3 is now compiled using the updated VC9 libraries, which no longer includes the ntwdblib library. Ntwdblib provided the connectivity layer used by the php_mssql.dll extension, and is severely outdated. If you require connectivity to Microsoft SQL Server, Microsoft has provided an extension that works on the Windows platform only “这个跟偶想的也差不多,正好改成MS的驱动算了,本来对这个php_mssql()的连接函数就一肚子火,即使是带上了测试之后百分之九十也会用MS的驱动来重新来过,所以开始下载MS的驱动。

下载驱动,安装,根据驱动的文档开始修改脚本,测试,哇塞,一次成功,这大爽了,折腾了三四天,终于把这个CACTI折腾到自己满意的程度了,后面的路还很长,需要优化脚本,修订很多PHP的错误,家装poller的统计程序和报警程序等等,估计去西藏前能把这个系统折腾到自己觉得比较完美的程度吧。。。

=============================================

改动的文件在这里 {filelink=1}

相关的文章

  • 2010年08月9号
  • 23