我已经编写了自己的 perl 脚本来从我的服务器返回状态。它运行得很好(即性能数据:val1=1;val2=5;val3=10)。
使用 templates.dist/default.php 这给了我 3 个图(正如我所期望的)。
现在我遇到的这个问题是,我希望再制作一张包含所有 3 个值的图表。
我一直在摆弄模板文件,但得到的结果似乎非常随机和混乱。
<?php
for($i=1; $i < count($DS); $i++) {
$opt[$i] = '--title "My Graph '.$i.'"';
$def[$i] = 'DEF:var1='.$rrdfile.':'.$DS[$i].':AVERAGE LINE1:var1#000000';
}
$opt[4] = '--title "My Graph 4"';
$def[4] =
'DEF:var1='.$rddfile.':'.$DS[1].':AVERAGE '.
'DEF:var2='.$rddfile.':'.$DS[2].':AVERAGE '.
'DEF:var3='.$rddfile.':'.$DS[3].':AVERAGE '.
'LINE1:var1#FF0000:"Var 1" '.
'LINE1:var2#FF0000:"Var 2" '.
'LINE1:var3#FF0000:"Var 3"';
?>
Run Code Online (Sandbox Code Playgroud)
注释掉第四个图后,这通常只绘制前两个(而不是三个)图(第三个图不存在)。我说通常,因为在制作这篇文章时我再次检查了它,这次它坚持做 5 个图表,其中前 3 个是预期的,而后两个有一个损坏的图片图标。
当我添加第 4 个图时,它会绘制 3 个图。如果我添加一个,$def[5] = "hmmm";则会显示第 4 个图形,但带有一个破碎的图片图标。
我已经更改了标题以确保它确实是这个文件而不是缓存的内容,但是这些更改就像我期望的那样。
任何人都可以对这里发生的事情有所了解吗?
仅使用第四个组合图作为$def[1]作品。
试图调试为什么它不会显示为第四张图导致我nagiosxi/html/includes/components/perfdata/graphApi.php. 看起来它试图从位于 rrd 文件旁边的 perfdata xml 文件中找到第四个数据源。这当然只有 3 个数据集,因为我只使用 3 个数据集。我需要所有四个图表。
如何为给定服务添加比数据集数量更多的图表?
当你第一次开始深入了解这些内容时,这绝对是令人困惑的。您实际上已经弄清楚了很多关键部分,让我们看看我是否可以帮助您了解它们如何组合在一起。
以下是我通过自己的实验学到的东西:
1)PNP4Nagios
请参阅他们的主站点:http://docs.pnp4nagios.org/pnp-0.4/start
要验证您是否正在使用 PNP4Nagios,请查看:
$ more /usr/local/nagios/etc/pnp/pnp4nagios_release
PKG_REL_DATE="05-02-2009"
PKG_VERSION="0.4.14"
PKG_NAME="pnp"
Run Code Online (Sandbox Code Playgroud)
PNP 配置在 /usr/local/nagios/etc/nagios.cfg 中完成
这是我最近发现的一个很好的概述,它包括 nagios.cfg 中各种 PNP 相关设置的描述:
http://bitflip.net/files/pnp4nagios-presentation-20090409.pdf
2)RRD数据源和图表模板
请参阅: http: //docs.pnp4nagios.org/pnp-0.4/tpl
php 模板脚本位于 /usr/local/nagios/share/pnp/ 中。
php 图形模板在 RRD 数据文件的上下文中调用,该文件与您尝试绘制其数据的主机或服务命令关联。如果该命令没有模板,则使用default.php。
正如您所发现的,您不能简单地添加第四个图表,因为没有相应的数据源:
将显示第四个图表,但带有损坏的图片图标。
而且,您还发现,您可以自定义为特定数据源显示的图表:
仅使用第四个组合图作为 $def[1] 即可。
3)默认.php
请记住,只要主机或服务命令没有关联的图形模板,就会使用 default.php。这意味着您所做的任何更改都会影响整个系统的默认图表。如果这就是你想要的,那好吧。否则,只需添加对您要尝试自定义其图表的主机和/或服务的检查:
if ($hostname == 'MyHost') {
// generate a customized graph
}
else {
// generate the default graph
}
Run Code Online (Sandbox Code Playgroud)
4)最后,如何创建组合图并显示原始三个数据源。
我只是让你的 Perl 脚本生成第四个数据源并用零填充它:
val1=1;; val2=5;; val3=10;; val4=0;;
然后,在 default.php 中,您可以为该数据源创建自定义图表:
foreach ($DS as $i) {
if ($servicedesc == 'My_Test_Service') {
if ($i == 4) { # the "val4" placeholder datasource
// your combined graph logic goes here
}
else {
// datasource 1 to 3 graph logic goes here
}
}
}
Run Code Online (Sandbox Code Playgroud)
这只是开始讨论这个话题,希望对您有所帮助!