我是 Cacti 的新手,所以如果我的问题听起来很愚蠢,请原谅我,我已经尽力寻找问题的解决方案,但仍然需要帮助。我想从远程前端 (FE) 机器收集 haproxy.log 文件中的行数,我已在 Cacti 中成功添加了此设备,并且正在绘制平均负载等图表。我遵循了以下操作:http://www.cacti.net/downloads/docs/html/how_to.html为了使用 shell 脚本向此设备添加图表,我添加了一个数据输入方法,选择脚本/命令作为输入类型,选择 /home/ubuntu/script.sh 作为输入字符串,还添加了一个输出字段。接下来,我添加了一个没有模板的数据源,并选择 FE 作为主机,然后如链接中所述,我添加了图表,到目前为止一切看起来都很好,问题是图表中没有绘制任何内容,cacti 日志文件(调试模式)显示以下内容:
CMDPHP:Poller[0] Host[5] DS[29] CMD:/home/ubuntu/script.sh,输出:U 2011 年 12 月 30 日上午 12:35:07 - CMDPHP:Poller[0] Host[5] DS[29] 警告:CMD 的结果无效。部分结果:U
现在我知道脚本应该只打印出输出,因为这是一个输出字段,我的脚本包含以下内容
温度=$(sudo ssh -i /home/ubuntu/key.pem[电子邮件保护]'/var/log/haproxy.log | wc -l') 回显 $temp
该脚本归 ubuntu 所有,因为 cacti 服务器上没有 cacti 用户,其他人安装了 cacti 服务器,现在我被要求负责它。
如果我从 cacti 服务器命令行执行脚本,它可以正常工作,并且仅以 ubuntu 用户身份执行它。
请帮帮我,我不知道我哪里错了。
谢谢
答案1
从内存来看,Cacti 轮询器以www-data
用户身份运行,因此无权读取您的私钥。
答案2
SSH 并不是 cacti 从远程机器获取数据的最佳方式。有许多替代方案,但我成功使用的一种是使用 SNMP 将远程主机的数据返回给 cacti。
ubuntu 上的 SNMP 守护进程可以使用exec
配置来执行脚本以响应特定的 SNMP 查询。ubuntu 中给出的示例snmpd.conf
是这样的:
exec .1.3.6.1.4.1.2021.53 mailq /usr/bin/mailq
这会将当前mailq
输出返回给查询的任何客户端.1.3.6.1.4.1.2021.53
。您应该能够设置类似的东西并配置 cacti 以使用简单的 SNMP 查询来接收数据。
在我看来,这比处理自定义脚本输入要容易得多。