pnp4nagios/share/pnp/documents/de_DE/tpl.html
2017-05-20 15:26:21 +02:00

243 lines
19 KiB
HTML

<h1><a name="was_sind_templates" id="was_sind_templates">Was sind Templates ?</a></h1>
<div class="level1">
<p>
PNP benutzt Templates, um das Aussehen der RRD-Graphen zu beeinflussen.
</p>
<p>
Dabei bestimmt das verwendete check_command, welches Template zur Darstellung herangezogen wird. Im Folgenden wird beschrieben, wo Templates gespeichert werden und wie die Entscheidung f&uuml;r das “richtige” Template getroffen wird.
</p>
</div>
<!-- SECTION "Was sind Templates ?" [1-340] -->
<h2><a name="wann_wird_welches_template_verwendet" id="wann_wird_welches_template_verwendet">Wann wird welches Template verwendet ?</a></h2>
<div class="level2">
<p>
Templates werden an zwei Stellen im Dateisystem gespeichert.
</p>
<ul>
<li class="level1"><div class="li"> share/templates.dist - f&uuml;r Templates, die im PNP-Paket bereits enthalten sind.</div>
</li>
<li class="level1"><div class="li"> share/templates - f&uuml;r selbst erstellte Templates. Diese werden bei Updates nicht ver&auml;ndert.</div>
</li>
</ul>
<p>
Weiterhin k&ouml;nnen seit Version 0.6.5 weitere Template Verzeichnisse in der Config Datei <code>pnp4nagios/etc/config.php</code> hinzugef&uuml;gt werden.
</p>
<p>
Soll der Graph f&uuml;r den Service “http” auf Host “localhost” angezeigt werden, so sucht PNP zuerst nach der <acronym title="Extensible Markup Language">XML</acronym>-Datei <code>perfdata/localhost/http.xml</code> und liest diese ein. Diese <acronym title="Extensible Markup Language">XML</acronym>-Dateien werden automatisch erstellt und enthalten Informationen zum jeweiligen Host und Service. Weiterhin enth&auml;lt der Kopf Informationen &uuml;ber das Plugin und die Performance-Daten. Im folgenden Beispiel erkennt man anhand des <acronym title="Extensible Markup Language">XML</acronym>-Tags <code>&lt;TEMPLATE&gt;</code>, welches PNP-Template f&uuml;r diesen Graphen verwendet werden soll.
</p>
<p>
<code><strong>/localhost/http.xml</strong></code>
</p>
<pre class="code xml"><span class="sc3"><span class="re1">&lt;NAGIOS<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;DATASOURCE<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;TEMPLATE<span class="re2">&gt;</span></span></span>check_http<span class="sc3"><span class="re1">&lt;/TEMPLATE<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;DS<span class="re2">&gt;</span></span></span>1<span class="sc3"><span class="re1">&lt;/DS<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;NAME<span class="re2">&gt;</span></span></span>time<span class="sc3"><span class="re1">&lt;/NAME<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;UNIT<span class="re2">&gt;</span></span></span>s<span class="sc3"><span class="re1">&lt;/UNIT<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;ACT<span class="re2">&gt;</span></span></span>0.006721<span class="sc3"><span class="re1">&lt;/ACT<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;WARN<span class="re2">&gt;</span></span></span>1.000000<span class="sc3"><span class="re1">&lt;/WARN<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;CRIT<span class="re2">&gt;</span></span></span>2.000000<span class="sc3"><span class="re1">&lt;/CRIT<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;MIN<span class="re2">&gt;</span></span></span>0.000000<span class="sc3"><span class="re1">&lt;/MIN<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;MAX<span class="re2">&gt;</span></span><span class="re1">&lt;/MAX<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/DATASOURCE<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;DATASOURCE<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;TEMPLATE<span class="re2">&gt;</span></span></span>check_http<span class="sc3"><span class="re1">&lt;/TEMPLATE<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;DS<span class="re2">&gt;</span></span></span>2<span class="sc3"><span class="re1">&lt;/DS<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;NAME<span class="re2">&gt;</span></span></span>size<span class="sc3"><span class="re1">&lt;/NAME<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;UNIT<span class="re2">&gt;</span></span></span>B<span class="sc3"><span class="re1">&lt;/UNIT<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;ACT<span class="re2">&gt;</span></span></span>263<span class="sc3"><span class="re1">&lt;/ACT<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;WARN<span class="re2">&gt;</span></span><span class="re1">&lt;/WARN<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;CRIT<span class="re2">&gt;</span></span><span class="re1">&lt;/CRIT<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;MIN<span class="re2">&gt;</span></span></span>0<span class="sc3"><span class="re1">&lt;/MIN<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;MAX<span class="re2">&gt;</span></span><span class="re1">&lt;/MAX<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/DATASOURCE<span class="re2">&gt;</span></span></span>
...
<span class="sc3"><span class="re1">&lt;/NAGIOS<span class="re2">&gt;</span></span></span></pre>
<p>
PNP h&auml;ngt <code>.php</code> an und sucht nun nach einem Template mit dem Namen <code>check_http.php</code> in folgender Reihenfolge:
</p>
<ol>
<li class="level1"><div class="li"> templates/check_http.php</div>
</li>
<li class="level1"><div class="li"> templates.dist/check_http.php</div>
</li>
<li class="level1"><div class="li"> templates/default.php</div>
</li>
<li class="level1"><div class="li"> templates.dist/default.php</div>
</li>
</ol>
<p>
Das Template default.php nimmt somit eine Sonderstellung ein und wird immer verwendet, wenn vorher kein anderes Template gefunden wird.
</p>
</div>
<!-- SECTION "Wann wird welches Template verwendet ?" [341-2179] -->
<h2><a name="eigene_templates_erstellen" id="eigene_templates_erstellen">Eigene Templates erstellen</a></h2>
<div class="level2">
<p>
PNP-Templates sind <acronym title="Hypertext Preprocessor">PHP</acronym>-Dateien, die zur Laufzeit von PNP &uuml;ber die <acronym title="Hypertext Preprocessor">PHP</acronym>-Funktion include() eingebunden werden.
Dies bedeutet, dass jeder <acronym title="Hypertext Preprocessor">PHP</acronym>-Code in Templates interpretiert wird. Daher ist die Manipulation aller Werte &uuml;ber <acronym title="Hypertext Preprocessor">PHP</acronym> m&ouml;glich.
</p>
<p>
PNP-Templates m&uuml;ssen folgende Eigenschaften besitzen:
</p>
<ol>
<li class="level1"><div class="li"> Templates m&uuml;ssen g&uuml;ltigen <acronym title="Hypertext Preprocessor">PHP</acronym>-Code enthalten.</div>
</li>
<li class="level1"><div class="li"> Templates d&uuml;rfen keine Ausgabe erzeugen.</div>
</li>
<li class="level1"><div class="li"> innerhalb der Templates werden die zwei Arrays $opt[] und $def[] gef&uuml;llt.</div>
</li>
</ol>
<p>
Die beiden <acronym title="Hypertext Preprocessor">PHP</acronym>-Arrays $opt[] und $def[] zusammen bilden den Aufruf von <code>&#039;rrdtool graph</code>&#039;. Somit sind alle Optionen m&ouml;glich, die RRDtool bietet. Die Optionen von RRDtool sind auf der <a href="http://oss.oetiker.ch/rrdtool/doc/rrdgraph.en.html" class="urlextern" title="http://oss.oetiker.ch/rrdtool/doc/rrdgraph.en.html" rel="nofollow">RRDtool Homepage</a> genauestens beschrieben.
</p>
<p>
Wenn beide Arrays mehrere Datens&auml;tze enthalten, so wird f&uuml;r jeden Datensatz ein Graph erstellt.
</p>
<p>
Weiterhin stehen innerhalb der Templates die Daten aus dem zugeh&ouml;rigen <acronym title="Extensible Markup Language">XML</acronym>-File zur Verf&uuml;gung, die zum Erstellen der Graphen wieder verwendet werden k&ouml;nnen.
</p>
<p>
Am Beispiel des recht einfachen Templates response.php lassen sich die wichtigsten Optionen recht gut beschreiben.
</p>
<pre class="code php"><span class="kw2">&lt;?php</span>
<span class="co2">#
</span><span class="re0">$opt</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="st0">&quot;--title <span class="es1">\&quot;</span>Response Time For <span class="es4">$hostname</span> / <span class="es4">$servicedesc</span><span class="es1">\&quot;</span> &quot;</span><span class="sy0">;</span>
<span class="co2">#
</span><span class="re0">$def</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="st0">&quot;DEF:var1=<span class="es4">$RRDFILE[1]</span>:<span class="es4">$DS[1]</span>:AVERAGE &quot;</span> <span class="sy0">;</span>
<span class="re0">$def</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span> <span class="sy0">.=</span> <span class="st0">&quot;AREA:var1#00FF00:<span class="es1">\&quot;</span>Response Times <span class="es1">\&quot;</span> &quot;</span> <span class="sy0">;</span>
<span class="re0">$def</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span> <span class="sy0">.=</span> <span class="st0">&quot;LINE1:var1#000000 &quot;</span> <span class="sy0">;</span>
<span class="re0">$def</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span> <span class="sy0">.=</span> <span class="st0">&quot;GPRINT:var1:LAST:<span class="es1">\&quot;</span>%3.4lg <span class="es6">%s</span><span class="es4">$UNIT[1]</span> LAST <span class="es1">\&quot;</span> &quot;</span><span class="sy0">;</span>
<span class="re0">$def</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span> <span class="sy0">.=</span> <span class="st0">&quot;GPRINT:var1:MAX:<span class="es1">\&quot;</span>%3.4lg <span class="es6">%s</span><span class="es4">$UNIT[1]</span> MAX <span class="es1">\&quot;</span> &quot;</span><span class="sy0">;</span>
<span class="re0">$def</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span> <span class="sy0">.=</span> <span class="st0">&quot;GPRINT:var1:AVERAGE:<span class="es1">\&quot;</span>%3.4lg <span class="es6">%s</span><span class="es4">$UNIT[1]</span> AVERAGE <span class="es1">\&quot;</span> &quot;</span><span class="sy0">;</span>
<span class="sy1">?&gt;</span></pre>
<p>
<strong><code>$opt[1] = ”--title …”</code></strong> setzt RRDtool-Optionen f&uuml;r den ersten Datensatz im Array. Hier ist das der Titel des Graphen.
Wie man sieht, werden eingebettete Anf&uuml;hrungszeichen durch einen Backslash (\) maskiert.
Die beiden Variablen <code>$hostname</code> und <code>$servicedesc</code> sind durch den Aufruf von PNP ermittelt worden und stehen nun auch im Template zur Verf&uuml;gung.
</p>
<p>
<strong><code>$def[1] = “DEF:var1=$RRDFILE[1]:$DS[1]:AVERAGE ”;</code></strong> definiert, welche Daten aus welchem RRD-File gelesen werden sollen. $RRDFILE[1] enth&auml;lt den Pfad zur RRD-Datei dieses Services. $DS[1] verweist auf die Datenreihe eins aus der RRD-Datei.
</p>
<p>
<strong><code>$def[1] .= “AREA:var1#00FF00:\”Response Times \” ”;</code></strong> durch den Operator ”.=” werden weitere Daten an das Array $def[1] angeh&auml;ngt. Gezeichnet wird eine Fl&auml;che (AREA) mit den Daten der Variable var1. Die Farbe wird im HEX-Code #00FF00 definiert. Als Beschriftung wird “Response Times” verwendet.
</p>
<p>
<strong><code>$def[1] .= “LINE1:var1#000000 ”;</code></strong> Als Abschluss der eben gezeichneten Fl&auml;che wird eine Linie (LINE1) in Schwarz (#000000) gezeichnet.
</p>
<p>
<strong><code>$def[1] .= “GPRINT:var1:LAST:\”%3.4lg %s$UNIT[1] LAST \” ”; <br/>
$def[1] .= “GPRINT:var1:MAX:\”%3.4lg %s$UNIT[1] MAX \” ”; <br/>
$def[1] .= “GPRINT:var1:AVERAGE:\”%3.4lg %s$UNIT[1] AVERAGE \” ”;</code></strong>
</p>
<p>
Die drei GPRINT Zeilen bilden die Legende des Graphen. Die aktuellen Werte werden dabei &uuml;ber die <a href="http://en.wikipedia.org/wiki/printf" class="interwiki iw_wp" title="http://en.wikipedia.org/wiki/printf">printf</a> Syntax formatiert.
</p>
</div>
<!-- SECTION "Eigene Templates erstellen" [2180-5177] -->
<h2><a name="verfuegbare_variablen" id="verfuegbare_variablen">Verf&uuml;gbare Variablen</a></h2>
<div class="level2">
<p>
PNP speichert &uuml;ber den Datensammler <code>process_perfdata.pl</code> zur Laufzeit nicht nur Performancedaten, sondern auch weitere von Nagios exportierte Werte. Diese Werte werden in der jeweils f&uuml;r den Service g&uuml;ltigen <acronym title="Extensible Markup Language">XML</acronym>-Datei gespeichert.
</p>
<p>
Im ersten Teil der <acronym title="Extensible Markup Language">XML</acronym>-Datei werden die Performancedaten in ihre Einzelteile zerlegt gespeichert.
</p>
<pre class="code xml"><span class="sc3"><span class="re1">&lt;NAGIOS<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;DATASOURCE<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;TEMPLATE<span class="re2">&gt;</span></span></span>check_http<span class="sc3"><span class="re1">&lt;/TEMPLATE<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;DS<span class="re2">&gt;</span></span></span>1<span class="sc3"><span class="re1">&lt;/DS<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;NAME<span class="re2">&gt;</span></span></span>time<span class="sc3"><span class="re1">&lt;/NAME<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;UNIT<span class="re2">&gt;</span></span></span>s<span class="sc3"><span class="re1">&lt;/UNIT<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;ACT<span class="re2">&gt;</span></span></span>0.006721<span class="sc3"><span class="re1">&lt;/ACT<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;WARN<span class="re2">&gt;</span></span></span>1.000000<span class="sc3"><span class="re1">&lt;/WARN<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;CRIT<span class="re2">&gt;</span></span></span>2.000000<span class="sc3"><span class="re1">&lt;/CRIT<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;MIN<span class="re2">&gt;</span></span></span>0.000000<span class="sc3"><span class="re1">&lt;/MIN<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;MAX<span class="re2">&gt;</span></span><span class="re1">&lt;/MAX<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/DATASOURCE<span class="re2">&gt;</span></span></span>
...
<span class="sc3"><span class="re1">&lt;/NAGIOS<span class="re2">&gt;</span></span></span></pre>
<p>
Das Feld &lt;DS&gt; bezeichnet die DataSource und dient der Identifizierung der Datenreihen innerhalb der RRD-Dateien, ist aber auch der Schl&uuml;ssel der folgenden Arrays.
</p>
<p>
Im Array <code>$UNIT[1]</code> ist somit die Einheit der ersten Datenreihe gespeichert.
</p>
<p>
Die <acronym title="Extensible Markup Language">XML</acronym>-Datei enth&auml;lt jedoch noch weitere Informationen. Wird <code>process_perdata.pl</code> im sync-Mode verwendet, so sind alle verf&uuml;gbaren Makros mit den aktuellen Werten verf&uuml;gbar. Der folgende Ausschnitt ist jedoch zu Gunsten der Lesbarkeit gek&uuml;rzt.
</p>
<pre class="code xml"><span class="sc3"><span class="re1">&lt;NAGIOS<span class="re2">&gt;</span></span></span>
...
<span class="sc3"><span class="re1">&lt;NAGIOS_SERVICENOTIFICATIONID<span class="re2">&gt;</span></span></span>8418<span class="sc3"><span class="re1">&lt;/NAGIOS_SERVICENOTIFICATIONID<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;NAGIOS_SERVICENOTIFICATIONNUMBER<span class="re2">&gt;</span></span></span>0<span class="sc3"><span class="re1">&lt;/NAGIOS_SERVICENOTIFICATIONNUMBER<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;NAGIOS_SERVICEOUTPUT<span class="re2">&gt;</span></span></span>HTTP OK HTTP/1.1 200 OK - 10087 bytes in 0.125 seconds<span class="sc3"><span class="re1">&lt;/NAGIOS_SERVICEOUTPUT<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;NAGIOS_SERVICEPERCENTCHANGE<span class="re2">&gt;</span></span></span>0.00<span class="sc3"><span class="re1">&lt;/NAGIOS_SERVICEPERCENTCHANGE<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;NAGIOS_SERVICEPERFDATA<span class="re2">&gt;</span></span></span>time=0.124811s;;;0.000000 size=10087B;;;0<span class="sc3"><span class="re1">&lt;/NAGIOS_SERVICEPERFDATA<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;NAGIOS_SERVICEPERFDATAFILE<span class="re2">&gt;</span></span><span class="re1">&lt;/NAGIOS_SERVICEPERFDATAFILE<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;NAGIOS_SERVICEPROBLEMID<span class="re2">&gt;</span></span></span>0<span class="sc3"><span class="re1">&lt;/NAGIOS_SERVICEPROBLEMID<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;NAGIOS_SERVICESTATE<span class="re2">&gt;</span></span></span>OK<span class="sc3"><span class="re1">&lt;/NAGIOS_SERVICESTATE<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;NAGIOS_SERVICESTATEID<span class="re2">&gt;</span></span></span>0<span class="sc3"><span class="re1">&lt;/NAGIOS_SERVICESTATEID<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;NAGIOS_SERVICESTATETYPE<span class="re2">&gt;</span></span></span>HARD<span class="sc3"><span class="re1">&lt;/NAGIOS_SERVICESTATETYPE<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;NAGIOS_SHORTDATETIME<span class="re2">&gt;</span></span></span>27-12-2007 13:51:23<span class="sc3"><span class="re1">&lt;/NAGIOS_SHORTDATETIME<span class="re2">&gt;</span></span></span>
...
<span class="sc3"><span class="re1">&lt;/NAGIOS<span class="re2">&gt;</span></span></span></pre>
<p>
Die einzelnen <acronym title="Extensible Markup Language">XML</acronym>-Felder sind als Variablen in den PNP-Templates verwendbar, wobei jedes Feld als Variable gleichen Namens verf&uuml;gbar ist.
</p>
<p>
Aus <code>&lt;NAGIOS_SERVICEOUTPUT&gt;</code> wird die Variable <code>$NAGIOS_SERVICEOUTPUT</code>.
</p>
<p>
<a href="/de/pnp-0.6/start" class="wikilink1" title="de:pnp-0.6:start">zur&uuml;ck zur &Uuml;bersicht</a> | <a href="/de/pnp-0.6/tpl_custom" class="wikilink1" title="de:pnp-0.6:tpl_custom">Custom Templates</a>
</p>
</div>
<!-- SECTION "Verf&uuml;gbare Variablen" [5178-] -->