在cacti系统所在服务器上
假设其主目录在/path/cacti
要添加的device的ip分别为a.a.a.a、b.b.b.b和c.c.c.c
cd /path/cacti/cli
for i in a.a.a.a b.b.b.b c.c.c.c;do
php add_device.php –template=9 –community=xxxxxxxxxxx –description=”$i” –ip=$i –avail=snmp
done
这上面还两个假设
一,就是假设添加device用的host template的id是”9″
如果不确定要用哪个
可以用命令
php add_device.php –list-host-templates
查看
二,就是communitie是”xxxxxxxxxxx”
因为这几台机器的联系人是个新人(cacti的库里没有)
按照在个性化定制cacti中thold插件的报警邮件的收件人里讲到的蠢办法
将其先加到cacti系统的用户组里,设置其不能登录
mysql
输入命令”mysql”进入交互式模式
系统出现提示符“mysql>”
mysql>use cacti
使用cacti所用的数据库”cacti”
mysql>SELECT plugin_thold_contacts.id AS contact_id, plugin_thold_contacts.data AS contact_email, user_auth.username, user_auth.full_name FROM plugin_thold_contacts, user_auth WHERE plugin_thold_contacts.user_id = user_auth.id;
从以上查出来的结果里确认下这几台机器的联系人的contact_id
mysql>SELECT id AS host_id FROM host WHERE host.hostname = ’10.10.10.10′;
查出新加机器的host_id,这里假设新加机器的hostname是”10.10.10.10″
mysql>UPDATE thold_data SET template_enabled = ‘off’ WHERE host_id = ’10′;
将这台新加机器”10.10.10.10″的template_enabled设置成’off’,这里假设”10.10.10.10″的host_id是10
mysql>SELECT concat(“INSERT INTO plugin_thold_threshold_contact (thold_id, contact_id) VALUES (“, thold_data.id, “, 5);”) FROM thold_data, host WHERE thold_data.host_id = host.id and host.hostname = ’10.10.10.10′;
上面生成插入到表plugin_thold_threshold_contact的SQL语句
上面的数字”5″是指前面查出来的联系人的contact_id,这里假设是5
最后再把上面输出的SQL语句执行一下
OK了
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/’;
近期评论