<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Q-BLOG &#187; Nagios</title>
	<atom:link href="http://www.q-blog.org/category/nagios/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.q-blog.org</link>
	<description>Dies und das von jedem was</description>
	<lastBuildDate>Mon, 26 Jul 2010 06:41:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Website- Monitoring</title>
		<link>http://www.q-blog.org/2009/06/30/website-monitoring/</link>
		<comments>http://www.q-blog.org/2009/06/30/website-monitoring/#comments</comments>
		<pubDate>Tue, 30 Jun 2009 07:38:29 +0000</pubDate>
		<dc:creator>markus</dc:creator>
				<category><![CDATA[Nagios]]></category>
		<category><![CDATA[Monitoring]]></category>

		<guid isPermaLink="false">http://www.q-blog.org/?p=204</guid>
		<description><![CDATA[Auch dies ist schon wieder ein wenig her. Wir haben vor einigen Monaten im Auftrag eines Kunden ein Videoportal mit in unser Monitoring aufgenommen. Hierzu gehörte der externe Check des Loadbalancing, ausführen der Bestellungen anschauen der Videostreams etc. All dies wurde natürlich automatisch in unsere Nagios Instanz implementiert. Das automatisierte anschauen der Videos war dabei [...]]]></description>
			<content:encoded><![CDATA[<p>Auch dies ist schon wieder ein wenig her. Wir haben vor einigen Monaten im Auftrag eines Kunden ein Videoportal mit in unser Monitoring aufgenommen. Hierzu gehörte der externe Check des Loadbalancing, ausführen der Bestellungen anschauen der Videostreams etc. All dies wurde natürlich automatisch in unsere Nagios Instanz implementiert. Das automatisierte anschauen der Videos war dabei noch eines der einfachsten Dinge. Die komplette Automation der Prozesse die sonst ein User auf dieser Site ausführt, in Nagios zu implementieren hat da schon ein klein wenig mehr Arbeit in Anspruch genommen. Der ganze Setup lief erfolgreich und lieferte auch die richtigen Daten zur Optimierung.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.q-blog.org/2009/06/30/website-monitoring/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>DNS Statistik in Nagios</title>
		<link>http://www.q-blog.org/2008/03/25/dns-statistik-in-nagios/</link>
		<comments>http://www.q-blog.org/2008/03/25/dns-statistik-in-nagios/#comments</comments>
		<pubDate>Tue, 25 Mar 2008 09:24:51 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Nagios]]></category>

		<guid isPermaLink="false">http://www.q-blog.org/2008/03/25/dns-statistik-in-nagios/</guid>
		<description><![CDATA[Neugierde, absolute Neugierde trieb doch zum aktuellen Experiment. Natürlich gibt es hierfür bereits eine fertige Lösung: dnsgraph von Przemyslaw Sztoch (ein Dank an dieser Stelle für die Inspiration). DNSgraph hat für unseren Einsatz allerdings eine kleine Schwachstelle: Es legt die Statistiken auf dem lokalen System in rrd Dateien ab und generiert auch dort die Grafiken. [...]]]></description>
			<content:encoded><![CDATA[<p>Neugierde, absolute Neugierde trieb doch zum aktuellen Experiment. Natürlich gibt es hierfür bereits eine fertige Lösung: dnsgraph von Przemyslaw Sztoch (ein Dank an dieser Stelle für die Inspiration). DNSgraph hat für unseren Einsatz allerdings eine kleine Schwachstelle: Es legt die Statistiken auf dem lokalen System in rrd Dateien ab und generiert auch dort die Grafiken. Wenn man nur einen Server hat, der nebenbei noch LAMP System ist, ist das sicherlich ganz nett. Allerdings für den professionellen Einsatz auf mehreren dedizierten DNS Servern nicht mehr wirklich nutzbar. Im ersten Versuch wurde das Script einfach ein wenig umprogrammiert damit es statt einer rrd zu erzeugen einfach die Statistiken ausgibt und diese per SNMP abfragen lässt. Man muss nicht erwähnen das dies nicht wirklich das Gelbe vom Ei darstellt. Also folgte eine kleine Machbarkeitsstudie in Python: <a href="http://www.q-blog.org/wp-content/dnsstatpy.txt" title="Python DNSstat Script">Python DNSstat Script</a> (hierfür gilt auch wie für anderes: Es ist nur das Testscript, es fehlen zum Beispiel sämtliche Fehlerprüfungen, die Produktiv- Scripte rücken wir so einfach nicht raus). .  ).</p>
<p><span id="more-41"></span>Aber richtigen wir das ganze mal für Nagios ein, wichtig ist, das wir eine grafische Auswertung der Performancedaten haben (zum Beispiel PNP) wer das nicht hat braucht an dieser Stelle nicht mehr weiter lesen, da ein &#8220;Monitoring&#8221; der Werte nicht geplant ist.</p>
<p>Wir schieben also unser Script nach /root/script/ und machen es ausführbar. Das BIND und rndc richtig konfiguriert sind setze ich einfach einmal wieder voraus. Noch eine letzte Warnung: Sämtliche Pfadangaben beziehen sich auf Gentoo, alternativ einfach die Pfadangaben ändern. Im folgenden Ablauf generieren wir eine alte Statistik die das Script dringend braucht aber beim ersten Mail nicht selbstständig anlegt (das es keine Fehlerprüfungen gibt erwähnte ich bereits).</p>
<p><code><br />
rndc stats<br />
cd /var/bind/<br />
mv named.stats oldnamed.stats<br />
</code></p>
<p>Jetzt binden wir das ganze wieder wie gewohnt in SNMP ein (ich erwähne nicht das man SNMPD danach neustarten sollte):<br />
<code><br />
exec check_dnssf /root/script/dnsstat.py<br />
</code></p>
<p><strong>Nagios</strong><br />
Auf Seiten von Nagios brauchen wir natürlich ein passendes Script, die Datei nennen wir check_snmp_dnsstat:<br />
<code><br />
#!/bin/bash</p>
<p>/opt/nagios/libexec/check_snmp -H $1 -P 1 -C public -o .1.3.6.1.4.1.2021.8.1.101.7 -u queries | /bin/awk -F\" '{print $2}' | /bin/awk -F\: '{print $1" "$2" "$3" "$4" "$5" "$6" | Success="$1" Failure="$2" Recursion="$3" Referral="$4" Nxrrset="$5" Nxdomain="$6}'<br />
</code><br />
Hier wieder ein Hinweis auf gestellte Fallen, ob man feste Pfadangaben verwenden sollte, muss natürlich jeder selbst wissen. Wie das als Command in Nagios eingebunden und dann päter auf einem Server angehangen wird ist bekannt.</p>
<p><strong>PNP</strong><br />
Im Beispiel wird PNP so konfiguriert das wir wie bei dnsgraph aus dem sechs Werten drei Grafiken bekommen. Das PHP Template sieht dafür so aus:<br />
<code><br />
$opt[1] = "--vertical-label queries/hour -l0  --title \"$hostname / $servicedesc\" ";<br />
$def[1] =  "DEF:success=$rrdfile:$DS[1]:AVERAGE " ;<br />
$def[1] .= "DEF:failure=$rrdfile:$DS[2]:AVERAGE " ;<br />
$def[1] .= "AREA:failure#009900:\"Failure \" " ;<br />
$def[1] .= "GPRINT:failure:LAST:\"%6.2lf last\" " ;<br />
$def[1] .= "GPRINT:failure:AVERAGE:\"%6.2lf avg\" " ;<br />
$def[1] .= "GPRINT:failure:MAX:\"%6.2lf max\\n\" " ;<br />
$def[1] .= "LINE2:success#000099:\"Success \" " ;<br />
$def[1] .= "GPRINT:success:LAST:\"%6.2lf last\" " ;<br />
$def[1] .= "GPRINT:success:AVERAGE:\"%6.2lf avg\" " ;<br />
$def[1] .= "GPRINT:success:MAX:\"%6.2lf max\\n\" ";</p>
<p>$opt[2] = "--vertical-label queries/hour -l0  --title \"$hostname / $servicedesc\" ";<br />
$def[2] =  "DEF:recursion=$rrdfile:$DS[3]:AVERAGE " ;<br />
$def[2] .= "DEF:referral=$rrdfile:$DS[4]:AVERAGE " ;<br />
$def[2] .= "AREA:referral#BB0000:\"Referral \" " ;<br />
$def[2] .= "GPRINT:referral:LAST:\"%6.2lf last\" " ;<br />
$def[2] .= "GPRINT:referral:AVERAGE:\"%6.2lf avg\" " ;<br />
$def[2] .= "GPRINT:referral:MAX:\"%6.2lf max\\n\" " ;<br />
$def[2] .= "LINE2:recursion#000000:\"Recursion \" " ;<br />
$def[2] .= "GPRINT:recursion:LAST:\"%6.2lf last\" " ;<br />
$def[2] .= "GPRINT:recursion:AVERAGE:\"%6.2lf avg\" " ;<br />
$def[2] .= "GPRINT:recursion:MAX:\"%6.2lf max\\n\" ";</p>
<p>$opt[3] = "--vertical-label queries/hour -l0  --title \"$hostname / $servicedesc\" ";<br />
$def[3] =  "DEF:nxrrset=$rrdfile:$DS[5]:AVERAGE " ;<br />
$def[3] .= "DEF:nxdomain=$rrdfile:$DS[6]:AVERAGE " ;<br />
$def[3] .= "AREA:nxdomain#ff00ff:\"Nxdomain \" " ;<br />
$def[3] .= "GPRINT:nxdomain:LAST:\"%6.2lf last\" " ;<br />
$def[3] .= "GPRINT:nxdomain:AVERAGE:\"%6.2lf avg\" " ;<br />
$def[3] .= "GPRINT:nxdomain:MAX:\"%6.2lf max\\n\" " ;<br />
$def[3] .= "LINE2:nxrrset#006699:\"Nxrrset \" " ;<br />
$def[3] .= "GPRINT:nxrrset:LAST:\"%6.2lf last\" " ;<br />
$def[3] .= "GPRINT:nxrrset:AVERAGE:\"%6.2lf avg\" " ;<br />
$def[3] .= "GPRINT:nxrrset:MAX:\"%6.2lf max\\n\" ";<br />
</code><br />
Auch das ist wieder nur ein Entwurf, das lässt sich noch prima näher an dnsgraph anpassen, mal davon abgesehen das die im Template genannte Angabe queries/hour so nicht stimmt (dazu müssten die Daten umgerechnet werden). Bei uns wird das alle fünf minuten abgefragt, von daher sind die Angaben für fünf Minuten. Und wenn wir nun alles richtig gemacht haben, schaut das nach einiger Zeit so aus:<br />
<a href='http://www.q-blog.org/wp-content/dns2.png' title='DNS Stat Graph Success / Failure'><img src='http://www.q-blog.org/wp-content/dns2.thumbnail.png' alt='DNS Stat Graph Success / Failure' /></a><br />
<a href='http://www.q-blog.org/wp-content/dns1.png' title='DNS Stat Graph NXrrset / Nxdomain'><img src='http://www.q-blog.org/wp-content/dns1.thumbnail.png' alt='DNS Stat Graph NXrrset / Nxdomain' /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.q-blog.org/2008/03/25/dns-statistik-in-nagios/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DELL SAS5i &#8211; Monitoring</title>
		<link>http://www.q-blog.org/2007/11/23/dell-sas5i-monitoring/</link>
		<comments>http://www.q-blog.org/2007/11/23/dell-sas5i-monitoring/#comments</comments>
		<pubDate>Fri, 23 Nov 2007 15:27:26 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Nagios]]></category>
		<category><![CDATA[DELL]]></category>
		<category><![CDATA[SAS; FC]]></category>
		<category><![CDATA[SPI]]></category>

		<guid isPermaLink="false">http://www.q-blog.org/2007/11/23/dell-sas5i-monitoring/</guid>
		<description><![CDATA[Dank einem Mitleser (nochmal danke an dieser Stelle) sah man doch endlich den Wald trotz der ganzen Bäume. Wie das ganze in Nagios eingebunden wird ist ja seit 3ware Monitoring bekannt. Auf Nagios Seite muss nichts Neues eingebunden werden. Wir ändern nur das check_raid Script auf Client Seite: /root/script/check_mpt 1 2 3 4 5 6 [...]]]></description>
			<content:encoded><![CDATA[<p>Dank einem Mitleser (nochmal danke an dieser Stelle) sah man doch endlich den Wald trotz der ganzen Bäume. Wie das ganze in Nagios eingebunden wird ist ja seit <a TARGET="_blank" HREF="http://www.q-blog.org/2007/05/07/3ware-monitoring/">3ware Monitoring</a> bekannt. Auf Nagios Seite muss nichts Neues eingebunden werden. Wir ändern nur das check_raid Script auf Client Seite:</p>
<p><span id="more-32"></span></p>
<p>/root/script/check_mpt</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/sh</span>
<span style="color: #666666; font-style: italic;">#</span>
<span style="color: #666666; font-style: italic;"># This script checks</span>
<span style="color: #666666; font-style: italic;">#</span>
<span style="color: #666666; font-style: italic;"># - RAID Status</span>
<span style="color: #666666; font-style: italic;"># - Drive Status</span>
<span style="color: #666666; font-style: italic;">#</span>
<span style="color: #666666; font-style: italic;"># on a DELL SAS5i RAID Controller.</span>
<span style="color: #666666; font-style: italic;">#</span>
<span style="color: #666666; font-style: italic;"># returns 1 if RAID error was detected, 2 if DISK error was detected</span>
<span style="color: #666666; font-style: italic;">#</span>
<span style="color: #666666; font-style: italic;"># Q-MEX Networks info aet q-mex.net</span>
<span style="color: #666666; font-style: italic;"># 2007-11-22</span>
<span style="color: #666666; font-style: italic;"># mpt_cli binary location</span>
<span style="color: #007800;">MPTCLI</span>=<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>mpt-status
<span style="color: #666666; font-style: italic;"># get complete status</span>
<span style="color: #007800;">STATUS_CONTROLLER</span>=<span style="color: #000000; font-weight: bold;">`</span><span style="color: #007800;">$MPTCLI</span><span style="color: #000000; font-weight: bold;">`</span>
<span style="color: #666666; font-style: italic;"># check for RAID status</span>
<span style="color: #007800;">STATUS_RAID</span>=$<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #007800;">$MPTCLI</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> vol_id\ <span style="color: #000000;">0</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sed</span> s<span style="color: #000000; font-weight: bold;">/</span>,<span style="color: #000000; font-weight: bold;">//</span>g <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{print $(NF-2)}'</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #007800;">$STATUS_RAID</span> <span style="color: #000000; font-weight: bold;">!</span>= <span style="color: #ff0000;">&quot;OPTIMAL&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span>
<span style="color: #007800;">STATUS_RAID</span>=<span style="color: #ff0000;">&quot;CRITICAL&quot;</span>
<span style="color: #7a0874; font-weight: bold;">exit</span> <span style="color: #000000;">1</span>
<span style="color: #000000; font-weight: bold;">fi</span>
<span style="color: #666666; font-style: italic;"># check for disk status</span>
<span style="color: #007800;">STATUS_DISKS</span>=$<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #007800;">$MPTCLI</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> phy\ <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sed</span> s<span style="color: #000000; font-weight: bold;">/</span>,<span style="color: #000000; font-weight: bold;">//</span>g <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{print $(NF-2)}'</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #000000; font-weight: bold;">!</span> <span style="color: #660033;">-z</span> $<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$STATUS_DISKS</span>&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> <span style="color: #660033;">-v</span> <span style="color: #ff0000;">&quot;^ONLINE$&quot;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span>
<span style="color: #007800;">STATUS_RAID</span>= <span style="color: #ff0000;">&quot;CRITICAL&quot;</span>
<span style="color: #7a0874; font-weight: bold;">exit</span> <span style="color: #000000;">2</span>
<span style="color: #000000; font-weight: bold;">fi</span>
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #007800;">$STATUS_RAID</span> == <span style="color: #ff0000;">&quot;OPTIMAL&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span>
<span style="color: #007800;">STATUS_RAID</span>=<span style="color: #ff0000;">&quot;OK&quot;</span>
<span style="color: #000000; font-weight: bold;">fi</span>
<span style="color: #666666; font-style: italic;">#STATUS_RAID=&quot;CRITICAL&quot;</span>
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$STATUS_RAID</span></pre></td></tr></table></div>

<p>Es wird natürlich die mpt-status Binary gebraucht, die es sogar in Portage unter dem Namen gibt. Allerdings gibt es einen Stolperstein:</p>
<p>Wird nur der Fusion MPT SAS Treiber in den Kernel eingebunden, taucht die &#8220;Fusion MPT misc device (ioctl) driver&#8221; Option garnicht auf, die uns ein /dev/mptctl zur Verfügung stellt. Erst wenn zusätzlich der SPI oder FC Treiber zumindest als Modul mit eingebunden wird, taucht diese Option erst auf.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.q-blog.org/2007/11/23/dell-sas5i-monitoring/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Postfix Mail Queue Monitoring</title>
		<link>http://www.q-blog.org/2007/09/14/postfix-mail-queue-monitoring/</link>
		<comments>http://www.q-blog.org/2007/09/14/postfix-mail-queue-monitoring/#comments</comments>
		<pubDate>Fri, 14 Sep 2007 21:24:11 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Nagios]]></category>

		<guid isPermaLink="false">http://www.q-blog.org/2007/09/14/postfix-mail-queue-monitoring/</guid>
		<description><![CDATA[Auch auf die Gefahr hin das das hier langsam zu einem Nagios Blog avanciert. So einfach kann man die Mail Queue von Postfix mit Nagios via SNMP Monitoren: Wir legen eine check_mailq Datei an: #!/bin/bash /usr/bin/mailq &#124; tail -n 1 &#124; awk -F\ '{print $5}' Passen die snmpd.conf an: exec check_mailq /root/script/check_mailq Nagios Im Nagios [...]]]></description>
			<content:encoded><![CDATA[<p>Auch auf die Gefahr hin das das hier langsam zu einem Nagios Blog avanciert. So einfach kann man die Mail Queue von Postfix mit Nagios via SNMP Monitoren:</p>
<p>Wir legen eine check_mailq Datei an:<br />
<code><br />
#!/bin/bash<br />
/usr/bin/mailq | tail -n 1 | awk -F\  '{print $5}'<br />
</code></p>
<p>Passen die snmpd.conf an:<br />
<code><br />
exec check_mailq /root/script/check_mailq<br />
</code></p>
<p><strong>Nagios</strong><br />
Im Nagios libexec Verzeichnis legen wir eine check_snmp_mailq an:<br />
<code><br />
#!/bin/bash</p>
<p>/opt/nagios/libexec/check_snmp -H $1 -P 1 -C public -o .1.3.6.1.4.1.2021.8.1.101.7 -w :$2 -c :$3 | sed 's/iso.3.6.1.4.1.2021.8.1.101.7/Mails/'<br />
</code><br />
Das ganze ist natürlich PNP kompatibel. Unter Umständen muss natürlich die MIB angepasst werden (hier die 7). Wie das als Nagios Command hinterlegt wird ist in anderen Beiträgen ja schon beschrieben.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.q-blog.org/2007/09/14/postfix-mail-queue-monitoring/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Festplattentemperatur via SNMP</title>
		<link>http://www.q-blog.org/2007/07/23/festplattentemperatur-via-snmp/</link>
		<comments>http://www.q-blog.org/2007/07/23/festplattentemperatur-via-snmp/#comments</comments>
		<pubDate>Mon, 23 Jul 2007 10:41:03 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Nagios]]></category>

		<guid isPermaLink="false">http://www.q-blog.org/2007/07/23/festplattentemperatur-via-snmp/</guid>
		<description><![CDATA[Mir ist gerade mal wieder danach das Blog um einen Beitrag zu erweitern und da laut Statistik der Artikel über den 3ware sehr beliebt war, machen wir mal weiter in der Nagios Kategorie: Heute: Nagios überwacht die Temperatur der Festplatten via SNMP Wie immer, wenn es um SNMP geht beginnen wir wieder auf dem Server [...]]]></description>
			<content:encoded><![CDATA[<p>Mir ist gerade mal wieder danach das Blog um einen Beitrag zu erweitern und da laut Statistik der Artikel über den 3ware sehr beliebt war, machen wir mal weiter in der Nagios Kategorie:</p>
<p><strong>Heute: Nagios überwacht die Temperatur der Festplatten via SNMP</strong></p>
<p>Wie immer, wenn es um SNMP geht beginnen wir wieder auf dem Server den wir überwachen wollen mit einem einfachen und billigen Script:<br />
<code><br />
<strong>/root/script/check_smarttemp.sh</strong><br />
#!/bin/bash<br />
smartctl -a -d3ware,$1 /dev/twa0 | grep Temperature_Celsius | awk '{print $10}'<br />
</code></p>
<p>Wie man hier wunderbar sehen kann, hängt die betroffene Festplatte hinter einen 3ware RAID Controller. Das Script muss noch entsprechend angepasst werden (Pfad RAID Controller, oder ohne RAID Controller). Die Variable $1 ermöglicht uns bei Aufruf die Platte anzugeben.</p>
<p>Das Script ist nun soweit fertig und wir können es in den SNMP Daemon aufnehmen:<br />
<code><br />
<strong>/etc/snmp/snmpd.conf</strong><br />
exec check_smart_0 /root/script/check_smarttemp.sh 0<br />
exec check_smart_1 /root/script/check_smarttemp.sh 1<br />
</code></p>
<p>Hierüber können wir nun 2 Festplatten via SNMP überwachen, das lässt sich natürlich beliebig erweitern. Wie man dann auf die SNMP OIDs kommt werde ich hier nicht erklären da ich wie immer die Grundkentnisse voraussetze.</p>
<p><strong>Der Nagios Server</strong><br />
Im libexec Ordner von Nagios schreiben wir ersteinmal ein angepasstes Plugin (das folgendes nicht wirklich Standardkonform ist, ist bekannt)<br />
<code><br />
<strong>check_snmp_smart.sh</strong><br />
#!/bin/bash<br />
MIB=$(($2+5))</code><br />
<code><br />
/opt/nagios/libexec/check_snmp -H $1 -P 1 -C public -o .1.3.6.1.4.1.2021.8.1.101.$MIB -w :$3 -c :$4 | sed 's/iso.3.6.1.4.1.2021.8.1.101.'$MIB'/Temp/'<br />
</code><br />
Dieses Script sogt dafür das man die Festplattennummer direkt in der Service Config anwählen kann. Es setzt natürlich voraus, das es entsprechend angepasst wird (OIDs) zudem sollte man auf allen Servern eine identische snmpd.conf benutzen, damit die OIDs nicht verschoben werden.</p>
<p>Das neue check Command legen wir nun als Kommando fest:<br />
<code><br />
define command {<br />
command_name    check_smarttemp<br />
command_line    $USER1$/check_snmp_smart $HOSTADDRESS$ $ARG1$ $ARG2$ $ARG3$<br />
}<br />
</code></p>
<p>Und als Service erstellt sieht das dann so aus:<br />
<code><br />
define service{<br />
use                             5minute-service<br />
host_name                       server<br />
service_description             Temperatur Platte 0<br />
check_command                   check_smarttemp!0!35!45<br />
}<br />
define service{<br />
use                             5minute-service<br />
host_name                       server<br />
service_description             Temperatur Platte 1<br />
check_command                   check_smarttemp!1!35!45<br />
}<br />
</code><br />
Die erste Variable gibt die Festplattennummer am RAID Controller an und die beiden anderen Warn und Crit Temperatur. Das selbst geschriebene Plugin ist nur zu einem einzigen Zweck da (man könnte das auch direkt mir check_snmp.pl machen): Performance Daten für den Nagios PNP Aufsatz. Dann sieht das ganze dann nämlich so aus: <a href="http://www.q-blog.org/wp-content/smarttemp.png" title="Temperatur SNMP Platte 1"><img src="http://www.q-blog.org/wp-content/smarttemp.thumbnail.png" alt="Temperatur SNMP Platte 1" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.q-blog.org/2007/07/23/festplattentemperatur-via-snmp/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>3ware Monitoring</title>
		<link>http://www.q-blog.org/2007/05/07/3ware-monitoring/</link>
		<comments>http://www.q-blog.org/2007/05/07/3ware-monitoring/#comments</comments>
		<pubDate>Mon, 07 May 2007 09:39:47 +0000</pubDate>
		<dc:creator>markus</dc:creator>
				<category><![CDATA[Nagios]]></category>

		<guid isPermaLink="false">http://www.q-blog.org/?p=14</guid>
		<description><![CDATA[Da ich heute in einem Forum zum erneuten Male eine Frage zum Monitoring aufgeschnappt habe, dokumentieren wir doch einmal, wie das bei uns läuft. Als zentrales Monitoring kommt das gute alte Nagios zum Einsatz, mit einigen Sateliten- Servern (pro größeres Netzwerk), da Nagios nicht nur unsere Server sondern auch die von uns verwalteten Netzwerke überwacht [...]]]></description>
			<content:encoded><![CDATA[<p>Da ich heute in einem Forum zum erneuten Male eine Frage zum Monitoring aufgeschnappt habe, dokumentieren wir doch einmal, wie das bei uns läuft. Als zentrales Monitoring kommt das gute alte Nagios zum Einsatz, mit einigen Sateliten- Servern (pro größeres Netzwerk), da Nagios nicht nur unsere Server sondern auch die von uns verwalteten Netzwerke überwacht (incl. Router, Switche, APs, VoIP Telefone etc.) auf NDO Backend.</p>
<p>Aber lange Rede kurzer Sinn, nun zum eigentlichen Punkt:</p>
<p>Die Überwachung der 3ware Controller funktioniert aus einer Symbiose zwischen Nagios &#8211; SNMP &#8211; Bash &#8211; tw_cli (3ware Command- Line)</p>
<p>Fangen wir mal ganz unten an:</p>
<p><strong>tw_cli</strong><br />
Ich setze jetzt einfach einmal voraus, das dies bereits installiert ist, wird bei den meisten Distris schon mitgeliefert (z.B. Gentoo) alternativ natürlich auf der Seite von 3ware zu finden.</p>
<p><strong>Bash- Script</strong><br />
Das folgende Bash- Script beruht auf dem Grundgerüst von Markus Jaschen (mal vielen Dank an dieser Stelle) und wurde innerhalb weniger Minuten ein wenig verändert. Wie immer mal wieder keine Zeit gehabt und deswegen schnell etwas zusammengetackert, es sieht nicht schön aus, aber es funktioniert.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/sh </span>
<span style="color: #666666; font-style: italic;"># </span>
<span style="color: #666666; font-style: italic;"># This script checks </span>
<span style="color: #666666; font-style: italic;"># </span>
<span style="color: #666666; font-style: italic;"># - RAID Status </span>
<span style="color: #666666; font-style: italic;"># - Drive Status </span>
<span style="color: #666666; font-style: italic;"># </span>
<span style="color: #666666; font-style: italic;"># on a 3ware 7006-2 ATA RAID Controller. </span>
<span style="color: #666666; font-style: italic;"># </span>
<span style="color: #666666; font-style: italic;"># returns 1 if RAID error was detected, 2 if DISK error was detected </span>
<span style="color: #666666; font-style: italic;"># </span>
<span style="color: #666666; font-style: italic;"># Marcus T. Jaschen &amp;lt; rikman (@) gmail &amp;gt; </span>
<span style="color: #666666; font-style: italic;"># 2006-02-03 </span>
&nbsp;
<span style="color: #666666; font-style: italic;"># tw_cli binary location </span>
<span style="color: #007800;">TWCLI</span>=<span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>tw_cli 
&nbsp;
<span style="color: #666666; font-style: italic;"># controller name </span>
<span style="color: #007800;">CONTROLLER</span>=c0 
&nbsp;
<span style="color: #666666; font-style: italic;"># get complete status </span>
<span style="color: #007800;">STATUS_CONTROLLER</span>=<span style="color: #000000; font-weight: bold;">`</span><span style="color: #007800;">$TWCLI</span> <span style="color: #000000; font-weight: bold;">/</span><span style="color: #007800;">$CONTROLLER</span> show<span style="color: #000000; font-weight: bold;">`</span> 
&nbsp;
<span style="color: #666666; font-style: italic;"># check for RAID status </span>
<span style="color: #007800;">STATUS_RAID</span>=<span style="color: #000000; font-weight: bold;">`</span><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$STATUS_CONTROLLER</span>&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> <span style="color: #ff0000;">&quot;^u0&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{ print $3; }'</span><span style="color: #000000; font-weight: bold;">`</span> 
&nbsp;
<span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #007800;">$STATUS_RAID</span> <span style="color: #000000; font-weight: bold;">!</span>= <span style="color: #ff0000;">&quot;OK&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span><span style="color: #7a0874; font-weight: bold;">&#93;</span>  <span style="color: #7a0874; font-weight: bold;">&#123;</span> 
STATUS_RAID = <span style="color: #ff0000;">&quot;CRITICAL&quot;</span> 
<span style="color: #7a0874; font-weight: bold;">exit</span> <span style="color: #000000;">1</span> 
<span style="color: #7a0874; font-weight: bold;">&#125;</span> 
&nbsp;
<span style="color: #666666; font-style: italic;"># check for disk status </span>
<span style="color: #007800;">STATUS_DISKS</span>=<span style="color: #000000; font-weight: bold;">`</span><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$STATUS_CONTROLLER</span>&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> <span style="color: #ff0000;">&quot;^p[[:digit:]]&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{ print $2; }'</span><span style="color: #000000; font-weight: bold;">`</span> 
&nbsp;
<span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #660033;">-z</span> <span style="color: #000000; font-weight: bold;">`</span><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$STATUS_DISKS</span>&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> <span style="color: #660033;">-v</span> <span style="color: #ff0000;">&quot;^OK$&quot;</span><span style="color: #000000; font-weight: bold;">`</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span><span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #000000; font-weight: bold;">||</span> <span style="color: #7a0874; font-weight: bold;">&#123;</span> 
STATUS_RAID = <span style="color: #ff0000;">&quot;CRITICAL&quot;</span> 
<span style="color: #7a0874; font-weight: bold;">exit</span> <span style="color: #000000;">2</span> 
<span style="color: #7a0874; font-weight: bold;">&#125;</span> 
&nbsp;
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$STATUS_RAID</span> 
&nbsp;
<span style="color: #7a0874; font-weight: bold;">exit</span> <span style="color: #000000;">0</span></pre></td></tr></table></div>

<p>Das ganze schieben wir in eine Datei (z.B. /root/script/check_raid.sh), passen den Controller an ($CONTROLLER) und machen diese ausführbar. Das ganze können wir nun einmal mit /root/script/check_raid.sh testen (es sollte OK zurückgeliefert werden, wenn nicht: PANIK . . .).</p>
<p><strong>SNMP</strong><br />
Nun können wir den Status lokal einsehen, ganz toll, aber irgendwie soll ja nun auch unser Monitoring- Server etwas davon mitbekommen. Also nutzen wir SNMP, damit können wir Kinderleicht den Status remote abfragen. Ich setze wiedereinmal voraus das etwas installiert ist, diesmal ist es Net-SNMP und die public community angepasst ist. Jetzt müssen wir nur noch folgende Zeilen in die /etc/snmp/snmpd.conf (oder wo auch immer sie liegen mag) hinzufügen:<br />
<code><br />
exec check_raid /root/script/check_raid.sh<br />
</code><br />
Natürlich muss auch eine passende rocommunity konfiguriert sein, damit unser Nagios- Server überhaupt diesen Server per SNMP abfragen kann. Zum Abschluss nur noch den SNMP- Dienst neustarten.</p>
<p><strong>Nagios</strong><br />
Der letzte Schritt dieses kleinen HowTos, die konfiguration von Nagios. Mithilfe des Nagios Plugins &#8220;check_snmp&#8221; kann man folgendes command in der Konfiguration anlegen:<br />
<code><br />
define command {<br />
command_name    check_raid<br />
command_line    $USER1$/check_snmp -H $HOSTADDRESS$ -P 1 -C public -o .1.3.6.1.4.1.2021.8.1.101.1 -r OK<br />
}<br />
</code><br />
Die lange Zahlenkette ist die sog. oid, wird diese per SNMP angerufen, wird unser Bash- Script aufgerufen und der Wert per SNMP zurückgeliefert. Diese oid lautet allerdings nur so für den ersten Eintrag in der snmpd.conf, weitere exec- Anweisungen haben eine fortlaufende oid. Nun brauchen wir nur noch den Hostservice für check_raid konfigurieren, zum Beispiel so:<br />
<code><br />
define service{<br />
use                             5minute-service<br />
host_name                       unser-server<br />
service_description             RAID Controller<br />
check_command                   check_raid<br />
}<br />
</code><br />
Und fertig ist das ganze.</p>
<p>Bevor irgendwelche Beschwerden kommen: Ja, dieses HowTo setzt Grundwissen im Bereich Linux / SNMP / Nagios voraus, wer bereits das hier gelesen hat, es unbedingt braucht, aber die Grundkenntnisse nicht hat, kann diese sich ziehmlich schnell zusammenlesen, gerade im Bereich Nagios ist http://www.nagios-wiki.de eine ausgezeichnete Anlaufstelle.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.q-blog.org/2007/05/07/3ware-monitoring/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
	</channel>
</rss>
