2011年9月3日星期六

为 Nagios 的 PNP 绘图系统添加时间范围选择功能

Nagios 是一款非常强劲的 IT 基础架构监控系统,再搭配上 PNP,就可以生成非常直观的性能图表。但在平时的应用中,经常会遇到客户要求提供某段时间内的性能图表,而 PNP 页面上本身支持的显示时段仅有 4 小时/24 小时/1 周等几个有限的选项。

在每个性能指标的旁边,我们可以看到右侧有放大图示。

点击打开放大后的页面中,可以发现页面 URL 包含起始和终止的时间戳,于此,可以采用修改时间戳的方法实现本文要达到的目的。

如果你采用的是默认编译安装的 Nagios 及 PNP,那么通常它们分别安装于 /usr/local/nagios//usr/local/nagios/share/pnp/。要实现对放大后页面中的图表时间段定义,要对以下两个文件进行修改。
文件:/usr/local/nagios/share/pnp/zoom.php
找到 include("include/js/zoom.js"); 一行,在这行下面添加:

// Get perf graph within specified time range
date_default_timezone_set(CST);
print "<div style=\"margin-left:3px;\"><form method=\"get\" action=\"zoom.php\" name=\"timerange\" style=\"margin-bottom:2px;\">";
print "Get perf data ranges from <input type=\"text\" style=\"text-align:center;\" name=\"starttime\" value=\"".$timerange['f_start']."\" /> to <input type=\"text\" style=\"text-align:center;\" name=\"endtime\" value=\"".$timerange['f_end']."\" on/>. <input type=\"submit\" onclick=\"document.timerange.start.value=tstamp(document.timerange.starttime.value);document.timerange.end.value=tstamp(document.timerange.endtime.value);\" value=\"Go\" name=\"submit\" />";
print "<input type=\"hidden\" name=\"host\" value=\"$hostname\" /><input type=\"hidden\" name=\"srv\" value=\"$servicedesc\" /><input type=\"hidden\" name=\"start\" value=\"\" /><input type=\"hidden\" name=\"end\" value=\"\" /><input type=\"hidden\" name=\"view\" value=\"undefined\" /><input type=\"hidden\" name=\"source\" value=\"$source\" /><input type=\"hidden\" name=\"graph_height\" value=\"$graph_height\" /><input type=\"hidden\" name=\"graph_width\" value=\"$graph_width\" /><input type=\"hidden\" name=\"title_font_size\" value=\"10\" /></form>";
print "Keep the time/date format and *space* as it is.</div>";
?>

<script type="text/javascript">
function tstamp(str) {
var new_str = str.replace(/:/g,'-');
new_str = new_str.replace(/ /g,'-');
var arr = new_str.split('-');
var arg = new Date(Date.UTC(arr[0],arr[1]-1,arr[2],arr[3]-8,arr[4]));
return arg.getTime()/1000;
}
</script>

<?php

文件:/usr/local/nagios/share/pnp/include/function.inc.php
找到 doHead($title) 函数,可以看到下面的内容:
if(is_numeric($conf['graph_height'])){
        $graph_height = abs($conf['graph_height'])+170;
}
将其修改为
if(is_numeric($conf['graph_height'])){
       $graph_height = abs($conf['graph_height'])+210;
}
大功告成。现在可以点击打开放大后的图表页面,可以看到页面下方出现的时间范围选择表单。只要按照表单中的时间格式(24 小时制)提供起始和终止时间点,便可得到完整的性能图表了。