上次偶尔一次机会上到公司的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}
文章评论
请教一下,您现在的CACTI是在跑Apache下还是IIS下?针对MSSQL的监控,现在运行效果如何??
@老麻雀 在IIS下面,Apache在Windows下有些诡异,呵呵。。MSSQL的监控很好啊,只是那个性能表里的数据不够直观,我看了一下SNMP-infromant ADV版本的图,貌似要好一些,正在表里找这些数据呢。
请教一下,windows 下安装的cacti ,来监控sql server 2005 是不是不可以啊? 我调了几天都是有图没有数据,显示为“0”,有时的“-1”,请问是什么原因
@dede 可以啊,不过你不能用系统自带的PHP下的mssql模块驱动,因为无法连接到数据库上,要用微软的驱动。
请指教,“微软的驱动”怎么使用?在哪里能找到?多谢!@Bill
@dede 在微软的网站上能下到啊,你一搜索就找到了,很小,版本好像是1.1.。
请问 是不是把php_pdo_sqlsrv_52_ts_vc6.dll 、php_sqlsrv_52_ts_vc6.dll 放到php/ext 目录下,然后在php.ini 里加载上就可以了?还需要其它地方设置吗?
@dede 这个要看你的PHP的版本,是VC6还是VC9的,是否开了线程安全模式,选中合适的dll之后放到你的php.ini里指定的ext目录里,接着在php.ini里加载就可以了。。
你好,我使用的环境是:在windows server 2003 sp2 下安装的,cacti-0.8.7g.zip、net-snmp-5.5.0-1.x86.exe、cacti-cactid-0.8.6k.zip、php-5.2.14-Win32.zip、rrdtool-1.2.30-bin-w32.zip、mysql-essential-5.1.54-win32.zip 。在被监控机器(windows 2003)上,也就是sql 2005 机器上,安装的微软自带的snmp服务和informant-std-16.zip。 其它监控cpu、内存之类的都正常,就是监控不到sql 的状况。显示为:“conections current: -1 average: -1 minumum -1.#J Maxumum: -1 ” , 日志上显示为:“01/05/2011 09:58:06 AM - CMDPHP: Poller[0] Host[7] DS[171] WARNING: Result from SERVER not valid. Partial Result: U ” ,弄了好久了,就是找不到原因,请前辈指教!谢谢。
你在改用了微软的Dll驱动之后,你还需要根据微软的范例更改你的程序,毕竟两个dll的初始化和链接方法还是有一点不同的,有段时间了,偶给忘了,等今天有时间我装一个下载的插件,然后我把那个脚步上传上来,然后你再实验一下吧。
多谢了!请指教!最好能给一些脚本和步骤。折腾了一个星期了。谢谢
我的这个程序改的地方稍微多了点,脚本一次抓取了所有的数据,不根据参数来选取其中的,这样一次读完之后就可以写到一个rrd文件中,然后用一个rrd用不同的数据模板和图形模板来创建很多图,这个方式目前CACTI不支持,所以你创建了N个数据源和图形之后,要把多余的数据源都删了,然后把图形的数据源指回第一个数据源。
下载的文件在帖子的底部
你好。找了好一会儿,也找不到下载的文件,请问你的QQ号是多少?我加一下你,或者你加一下我,512827014 ,多谢!
呵呵,需要登录才能下载。找了一会儿,也没有注册会员的地方。呵呵
晕,才想起来上次换了host之后就关了注册了,又开了,现在应该可以了吧。。
我这里不让用QQ,嘿嘿,MSN是可以的。。
呵呵,下载了,我研究 一下。谢谢!
@dede 偶这两天有点忙,估计要到下周才有时间晚上上QQ了,你先实验着吧,你可以把脚本打开,或者把ScriptHost的脚本打开,然后分步echo或者print错误信息,这样就能更快的debug。。
能指点指点吗?? 一直调试不出来!累啊!还是 显示为:“conections current: -1 average: -1 minumum -1.#J Maxumum: -1 ” , 日志上显示为:“01/05/2011 09:58:06 AM – CMDPHP: Poller[0] Host[7] DS[171] WARNING: Result from SERVER not valid. Partial Result: U ”
1月5日的log?呵呵。。-1的结果是读数据错误,读数据错误只有两个情况,一个是连接失败,一个是读取数据异常,很容易查的,你在DOS 窗口里手动运行一下看看先,注意Script server里跑和DOS里跑脚本的格式不一样哦。。
几翻折腾 ,sql 状态的图还有没有数据,图下方现在都显示为: current: 0.00 Average: 0.00 Maximum: 0.00 Total :0.00
日志里显示:01/13/2011 01:27:01 PM - CMDPHP: Poller[0] Host[6] DS[86] WARNING: Result from SERVER not valid. Partial Result: U
请指教,多谢,能留下 你的联系方式吗?
@dede 加了你的QQ了,上QQ上说吧。
你好!下载了你的那个ss_win_sqlsrv.php 文件之后,除了把里面的连接信息改了外,还需要在其它地方改吗?
好久没来麻烦你!我想弄个家用的无线、有线兼容的路由,价格300以内,要求网速能稳定够快,家里大概也就连接2个有线台式机,3-5台无线设备。能否给个推荐?贝尔金的疾速怎样?