Ganglia是一个分布式的监控系统
多用于clusters和grids的监控
大约有三部分(Ganglia Monitoring Daemon(gmond)、Ganglia Meta Daemon(gmetad)和Ganglia PHP Web Frontend)以及其他一些小工具组成
其中
在管理节点上跑gmetad
在被监控的节点上跑gmond,收集监控信息,同时通过组播发出去并接受别的节点组播出来的信息,这样管理节点只要连到一个节点,就能获得所有节点的信息。
Frontend可以跑在管理节点上,也可以跑在任一台被监控节点上
甚至于任何一台其他的机器上都行
Ganglia的结构有点像cacti
只不过Ganglia需要在每个被监控的节点上跑个agent(daemon)
但是cacti也要在每台被监控的机器上跑snmpd,这不也是一个agent吗?
不过Ganglia缺省使用组播
这个需要再好好研究一下
cacti+thold维护的机器很多
而且每台机器至少都用thold监控硬盘使用率、负载大小2种情况
其报警邮件的收件人虽然可以设
(可以在Threshold Templates里按模板设置
也可以进每一个Threshold来进行设置)
但相当的麻烦
(单独设置某一个Threshold的收件人,需要先取消从模板继承)
thold插件提供的命令行工具也没有维护这个的功能
没办法
我只有直接进mysql库里去看
还别说
真让我发现了点什么……
阅读全文…
呵呵
在这之前一直在找一种东西
类似于cacti api之类的
因为管理的机器多了
手工维护服务器在cacti里的纪录就非常不方便了
我有个初始化脚本
每来一台机器
我都上去跑一下
同样
每新加一台服务器
缺省也需要将其添加到cacti系统里
(其实也需要添加到nagios里
只不过nagios的配置文件都是程序生查库成的
而server list的信息
库里都有)
因此我需要一种简单实用的方法能在初始化脚本里将机器添加到cacti里
最早我想的是直接插库
直到我发现了这个东东
在cacti的主目录下的目录cli(我的理解是command line interface)
不多的php程序通过命令行方式执行
可以完成简单的cacti种信息的维护工作
比如添加删除devices、graphics等等
……(这里省去具体用法1000余字)
感觉这真是个好东东
只是在客户端上跑的初始化脚本怎样调用cacti服务器上的命令行php程序
还值得好好斟酌斟酌
装上thold0.4.1后
在”Plugin Management”中安装、启用之后
点击Threshold Templates后
新建一个名字叫“Host MIB – Hard Drive Space [hdd_used]”的template
注意选好Data Type为Percentage,Percent Datasource选hdd_total
填上报警的上阀值High Threshold为合适值,注意,这是百分比,我一般填80
填上报警的email地址
以后便可在”Create Graphs”的页面里点击”Auto-create thresholds”创建threshold了
今天升级cacti0.8.7b到0.8.7e
升级过程一切正常
只是以前安装的插件thold页面上看不到了
于是又升级了最新的plugin architecture和settings、thold两个plugins
但是web页面里仍没什么变化
后来访问了下plugins.php
系统报没有权限
然后直接点”login”直接就进系统了
由此可见
不是没有权限
应该是没有特定的权限
于是进用户设置界面”User Management”
将所用的用户点开
果然有个”plugin management”的权限没选中
选中
再Save
再回来刷页面
果然
左边有了新的一项菜单:“Plugin Management”
点进去可以进行plugin的管理
搞定
主要是两个地方
第一:执行命令的命令行字符串赋值的位置不对,应该在执行命令之前赋值即可,而不要老早就赋值,因为后面还有对影响其最终值得中间值的改动;
第二:传给snmpnetstat的参数不对
具体如下:
[@monitor snmp]# diff /opt/cacti/scripts/lvm_netstat_tcp.pl /opt/software/lvm_netstat_tcp.pl
15a16,17
> my $_cmd = “snmpnetstat -v $in_version -c $in_community -t $in_timeout -n -P tcp $in_hostname:$in_port”;
>
34,35d35
< my $_cmd = "snmpnetstat -v $in_version -c $in_community -Cw $in_timeout -Cn -Cp tcp $in_hostname:$in_port";
<
mysql_stats
需要在被检测的mysql库里添加检测机器的权限(仅需要process权限):
grant process on *.* to username@192.168.1.1 identified by ‘password’;
flush privileges;
今天升级cacti从0.8.7a版到0.8.7b
但是关键升级cacti plugin architecture的时候有些波折
按照文档升级完了
页面老不对
主要是内部的一些链接不对
查了半天
发现是url_path的问题
include/plugins.php里有一句:
$config['url_path'] = substr(__FILE__, strlen($_SERVER['DOCUMENT_ROOT']), strlen(__FILE__) – strlen($_SERVER['DOCUMENT_ROOT']) – strlen(‘include/plugins.php’));
应该是来算url_path的
但是就是这句算的url_path不对
我的cacti在/cacti/下
关键是我的incluce/plugins.php绝对路径里有soft link
然后web目录下又是Alias
所以不管怎么样
这句算出来的url_path不对
最后没办法(php我也不是很精通)
直接把这句注释掉
写死url_path为正确值了事
$config['url_path'] = ‘/cacti/’;
老大说要监控机器的硬盘分区的使用情况
大于一定比率要报警
知道cacti + thold插件可以做这个
于是就装plug architecture、settings(plugin)
(这两个是thold插件所依赖的,所以要先装)
然后再装thold插件
这都简单
关键是算使用百分比的CDEFs
准确算法应该是:CURRENT_DATA_SOURCE * 100 / hdd_total
但现在的问题是这里不能得到hdd_total的值
于是看了看thold3.8的代码
发现其实在plugin thold 3.8的版本里
已经取好了data source item “hdd_total”的值为special data source:VALUE_OF_HDD_TOTAL
所以只要在定义CDEFs的时候,把最后的字串等于
CURRENT_DATA_SOURCE,VALUE_OF_HDD_TOTAL,/,100,*
于是具体方法就简单了
直接用custom string即可
或者更王道一点的办法是改global_arrays.php
在$custom_data_source_types加上对”VALUE_OF_HDD_TOTAL”的描述
这样设CDEFs的时候就可以在下拉列表框里选择了
以前为了解决cact的一个bug(详细情况看这里)
把系统升级到了当时最新的0.8.6-svn
其中的版本就是0.8.6k
现如今cacti的最新的stable版本都已经是0.8.7了
于是我也想升级
当我当下来0.8.7的文件
升级的时候,发现系统报不支持从0.8.6k升级到0.8.7
查了查升级脚本,果然是没有对0.8.6k的支持
于是就求助于cacti的官方论坛
很快有了答案
于是照着做:
1,停掉apache
2,停掉Cron(啊!?这步我没做!!!)
3,备份mysql库
4,取回0.8.7的包,包含patches(我是从这里取了patch回来,不知道对不对)
5,编辑文件install/0_8_6j_to_0_8_7.php,把在其中注释为“Add 1 min rra”的这段程序注释掉
6,在mysql里,执行”
update version set cacti=’0.8.6j’ where cacti=’0.8.6k’
“(其实还要先用use命令进入cacti所用的数据库)
7,把原来0.8.6k的include/config.php拷贝过来到include/config.php
8,把apache起起来
9,通过浏览器访问cacti系统
10,根据提示升级,碰到sql语句执行失败手工确认(因为0.8.6k和0.8.6j的数据库结构还是有变化的,这里等于是强制把0.8.6k当作0.8.6j来往0.8.7上升级,有错基本上是正常的)
11,如果没有问题,再把Cron打开
我照着做了
基本上解决了问题
只有一点:升级完成后,貌似所有的图都给删掉了然后重建的,所以以前的数据图上就显示不出来了
这也许是我没有按回帖里写的那样先停掉Cron最后再启动的原因吧
最近评论