Nagios監控之12:pnp4nagios自定義模板畫圖

文章根據官網說明總結而得:http://docs.pnp4nagios.org/pnp-0.6/tpl

在日常使用中,難免發現默認的繪圖不太符合我們的需求,這時就可以根據自己的需要通過自定義模板來實現自己想要的繪圖效果。

一、自定義模板官方說明

1、模板存放在兩個位置

share/template.dist 存放PNP包中的模板
share/template 自定義的模板存放位置

如果顯示localhost服務器上http服務的圖形,那麼PNP將會通過pnp4nagios安裝目錄下的var/perfdata/localhost/http.xml(這個文件是根據定義服務監控時使用的service_description(監控描述)參數值名自動生成的),在該文件中開頭的<TEMPLATE>標籤定義部分來決定使用哪個模板來渲染數據。
PNP將自動根據<TEMPLATE>的模板名+php後綴爲模板文件名,例如:
localhost服務器上http服務對應的數據xml爲:

cd /usr/local/pnp4nagios/var/perfdata
cat localhost/http.xml
<NAGIOS >
   <DATASOURCE >
     <TEMPLATE > check_http </ TEMPLATE >
     <DS > 1 </ DS >
...
</ NAGIOS >

這裏PNP將查找check_http.php的模板來渲染數據。
PNP查找模板的順序如下(pnp4nagios安裝目錄的share下):

    1. templates/check_http.php
    1. templates.dist/check_http.php
    1. templates/default.php
    1. templates.dist/default.php
      其中default.php模板佔據特殊位置,因爲每次找不到其他適用模板時都會使用它。

2、創建自己的模板

PNP模板是PHP文件,在使用PHP函數include()執行PNP時會包含這些文件。這意味着將解釋模板中的每個PHP代碼,從而可以操縱所有值。

模板必須遵循如下原則:

  • 1.必須是有效的php語句
  • 2.模板不能產生任何輸出
  • 3.必須填充兩個數組:$opt[]和$def[];這兩個數組用於調用'rrdtool graph',因此RRDtool支持的每個選項都是可能的。

這裏我們使用相對簡單的response.php模板,來描述其中最重要的選項:

<?php
#
$opt[1] = "--title \"Response Time For $hostname / $servicedesc\" ";
#
$def[1] =  "DEF:var1=$RRDFILE[1]:$DS[1]:AVERAGE " ;

$def[1] .= "AREA:var1#00FF00:\"Response Times \" " ;
$def[1] .= "LINE1:var1#000000 " ;
$def[1] .= "GPRINT:var1:LAST:\"%3.4lg %s$UNIT[1] LAST \" ";
$def[1] .= "GPRINT:var1:MAX:\"%3.4lg %s$UNIT[1] MAX \" ";
$def[1] .= "GPRINT:var1:AVERAGE:\"%3.4lg %s$UNIT[1] AVERAGE \" ";
?>

注意:由於數字1和小寫字母'l'在此php文件中看起來相似:格式"%3.4lg"包含一個小寫字母L。

選項說明:
$opt[1] = "--title …" ==>爲第一組數據設置RRDtool選項,這裏是你在web圖上看到的標題。嵌入式引號使用反斜槓()屏蔽。變量$hostname和$servicedesc是通過PNP調用確定的,也可用於模板。
$def[1] = "DEF:var1=$RRDFILE[1]:$DS[1]:AVERAGE "; ==>定義要從哪個RRD文件讀取哪些數據。$RRDFILE[1]包含此服務的RRD文件的路徑。$DS[1]引用RRD文件中的第一個數據系列。
$def[1] .= "AREA:var1#00FF00:\"Response Times \" "; ==>運算符".="會將更多數據附加到數組$def[1]。將使用來自變量的數據來繪製區域var1。顏色以十六進制符號#00FF00(紅色,綠色,藍色)定義。標籤爲"響應時間"。
$def[1] .= "LINE1:var1#000000 "; ==>剛繪製的區域完成後,將以黑色(#000000)繪製一條線(LINE1)。
$def[1] .= "GPRINT:var1:LAST:\"%3.4lg %s$UNIT[1] LAST \" ";
$def[1] .= "GPRINT:var1:MAX:\"%3.4lg %s$UNIT[1] MAX \" ";
$def[1] .= "GPRINT:var1:AVERAGE:\"%3.4lg %s$UNIT[1] AVERAGE \" ";

三行GPRINT線構成了圖例。當前值使用printf語法格式化。

二、自定義模板使用

設置前默認已經配置好了pnp4nagios服務,並可以正常的出圖了;
這裏,我們利用默認的localhost的內存監控項來做演示;

設置前內存監控項的繪圖結果如下:
Nagios監控之12:pnp4nagios自定義模板畫圖
接下來我們對它進行改造!!
~

1、查找內存監控項參數的數據xml文件名

查看nagios中localhost.cfg配置文件,找到目標服務配置信息,其定義如下:

less nagios/etc/objects/localhost.cfg
define service{
        use                             local-service,srv-pnp         ; Name of service template to use
        host_name                       localhost
        service_description             Mem Usage
        check_command                   check_local_mem!80!90
        }

其中service_description的配置爲Mem Usage,那麼該內存服務的數據xml文件就該是:Mem_Usage.xml (空格用下劃線替換)

2、查找內存監控項使用的繪圖模板名

查看pnp4nagios中的check_command.xml文件
說明:這裏pnp4nagios安裝在/usr/local下

cd /usr/local/pnp4nagios/var/perfdata/localhost/
head -n 10 Mem_Usage.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<NAGIOS>
  <DATASOURCE>
    <TEMPLATE>check_local_mem</TEMPLATE>
    <RRDFILE>/usr/local/pnp4nagios/var/perfdata/localhost/Mem_Usage_Used.rrd</RRDFILE>
    <RRD_STORAGE_TYPE>MULTIPLE</RRD_STORAGE_TYPE>
    <RRD_HEARTBEAT>8460</RRD_HEARTBEAT>
    <IS_MULTI>0</IS_MULTI>
    <DS>1</DS>
    <NAME>Used</NAME>

其中<TEMPLATE>標籤中的值爲check_local_mem,那麼內存監控項使用的繪圖php設置文件爲check_local_mem.php

3、查找並修改模板

cd /usr/local/pnp4nagios/share/templates
ls -l
total 8
-rw-r--r--. 1 nagios nagios 1091 Jul  8  2018 check_local_mem.php
-rw-r--r--. 1 nagios nagios  672 Jul  8  2018 Nouse_check_mem.php

發現已經存在check_local_mem.php模板了,那麼就直接修改;如果不存在就新建。

vim check_local_mem.php
<?php
#
# Copyright (c) 2006-2010 Joerg Linge (http://www.pnp4nagios.org)
# Plugin: check_load
#
$opt[1] = "--vertical-label Memory -l0  --title \"Memory for $hostname / $servicedesc\" ";
#
#
#
$def[1]  = rrd::def("var1", $RRDFILE[1], $DS[1], "AVERAGE");
$def[1] .= rrd::def("var2", $RRDFILE[2], $DS[2], "AVERAGE");
$def[1] .= rrd::def("var3", $RRDFILE[3], $DS[3], "AVERAGE");
$def[1] .= rrd::def("var4", $RRDFILE[4], $DS[4], "AVERAGE");

if ($WARN[1] != "") {
    $def[1] .= "HRULE:$WARN[1]#FFFF00 ";
}
if ($CRIT[1] != "") {
    $def[1] .= "HRULE:$CRIT[1]#FF0000 ";
}
$def[1] .= rrd::line2("var2", "#006400", "Free   ") ;
$def[1] .= rrd::gprint("var2", array("LAST", "AVERAGE", "MAX"), "%6.2lf");
$def[1] .= rrd::area("var4", "#00FF00", "Buffers") ;
$def[1] .= rrd::gprint("var4", array("LAST", "AVERAGE", "MAX"), "%6.2lf");
$def[1] .= rrd::area("var3", "#EA8F00", "Cached : ") ;
$def[1] .= rrd::gprint("var3", array("LAST", "AVERAGE", "MAX"), "%6.2lf");
$def[1] .= rrd::line1("var1", "#EACC00", "Used   ") ;
$def[1] .= rrd::gprint("var1", array("LAST", "AVERAGE", "MAX"), "%6.2lf");
?>

編輯後保存即可看到新樣式的結果,不需要重啓nagios服務。
注意:要確保模板的屬主爲nagios

修改後的繪圖效果如下:
Nagios監控之12:pnp4nagios自定義模板畫圖
是不是感覺清爽都了~~

完畢!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章