Monitoring Hardware mit Cacti

Wäre es nicht nett, wenn man die Temperatur seiner Festplatte(n), seines Motherboards, seiner CPU und die Umdrehungsgeschw. seiner Lüfter im Auge behalten kann?

Noch schöner wäre das ganze auch noch mit Cacti in Kombination. Nach langem suchen hab ich vor Monaten einige nettes Scripts auf wlug gefunden. Vorweg möchte ich noch sagen bevor ich näher Beschreibe wie ich vorgegangen bin, dass alle Versuche das Monitoring über SNMP an dem nötigen wissen von SNMP (so glaube ich) gescheitert sind.

Also ab zur Vorbereitung, denn was zu aller erst am Server vorhanden sein muss ist lm-sensors und hddtemp. Zwei verdammt nette Tools mit welchen ich glaub ich noch einige schöne Dinge zaubern könnte 😉

Eine Installationsanleitung dieser Tools findet man auf Debian Administrator :: Monitoring your hardware’s temperature.

Weiters brauchen wir noch ein paar Scripts die uns ermöglicht über die oben genannten Tools die Daten auszulesen und sie für Cacti zur Verfügung zu stellen.

HDD Temperatur

Bei diesem Script musst ich ein paar kleinere Änderungen durchführen damit es auch sauber mit dem Cacti Daemon läuft und nicht immer mit Fehlermeldungen frühzeitig beendet wird.

hdtemp.php

#!/usr/local/bin/php -f

 

Zu diesem Script gibt es nicht viel zu erklären, einzig und allein wichtig dafür ist, dass man smartctl mittels sudo ausführen kann und der Cacti Daemon auch die nötigen rechte dazu hat. Grund dafür ist, da smartctl auf Hardware nahe Daten zugreift ist es natürlich klar das nur root das darf 😉

Motherboard / CPU Temperatur & Fan Speeds

check_sensors.pl

#!/usr/bin/perl

@sensoroutput=`/usr/bin/sensors`;

foreach(@sensoroutput) {

chomp();

split();

if ( $_[0] eq ‘MBTemp:’ ) {

$temp1 = $_[1];

}

if ( $_[0] eq ‘CPUTemp:’ ) {

$temp2 = $_[1];

}

if ( $_[0] eq ‘UknFan:’ ) {

$fan1 = $_[1];

}

if ( $_[0] eq ‘CPUFan:’ ) {

$fan2 = $_[1];

}

}

$temp1 =~ s/+//;

$temp1 =~ s/?C//;

$temp2 =~ s/+//;

$temp2 =~ s/?C//;

print “fan1:$fan1″;

print ” “;

print “fan2:$fan2″;

print ” “;

print “temp1:$temp1″;

print ” “;

print “temp2:$temp2”;

Dieses Script benötigt etwas Vorbereitung. Da hier der Output von sensors gefiltert wird und die richtigen Werte ausgelesen werden, ist es nötig für alle Fans und Temperatur-Sensoren ein IF Statement anzulegen und den Namen des jeweiligen Datenlieferanten anzugeben.

Herausfinden tut man diesen am einfachsten indem man sich die Ausgabe des Befehls sensors genau ansieht, sich dort die nötigen Namen sucht und diese einträgt.

Wer seine eigenen Namen festlegen will kann das über die sensors.conf Datei. Dort sucht man einfach nach seinem Motherboardtyp (wird im Output von sensors ganz oben angegeben) und editiert dann alles nach seinen Wünschen (lm-sensors Homepage).

Meine sensors.conf sieht folgendermaßen aus:


label temp1 "MBTemp" #"M/B Temp"

label temp2 “CPUTemp” #”CPU Temp”

ignore temp3

label fan1 “UknFan”

label fan2 “CPUFan” #”CPU Fan”

ignore fan3

Bitte ändert alle labels so, dass keine Leerzeichen vorhanden sind, ab und zu traten bei mir dadurch Probleme auf.

Das wars im großen und ganzen, diese Dateien noch als “ausführbar” markieren und ins richtige Verzeichniss für den Cacti Daemon kopieren.

Wer dazu Infos braucht sieht sich einige meiner älteren Cacti Posts an und bei Fragen nutzt die Kommentarfunktion.

Und so könnte das alles aussehen wenn es fertig ist (zum vergrößern klicken).

Technorati Tags: , , , , , ,

Unterstanding Data Input Methods

Aufgabe des Tages war es einige Scripts endlich zum Laufen zu bringen und zwar so, dass Cacti meinen Vorstellungen nach die Daten übernimmt.

Das heißt, es sollten die Scripts nicht über cmd.php abgehandelt werden sondern über den in C (glaub ich mal) geschriebenen cactid Daemon. Das Problem darin bestand aber leider, dass einige Scripts mit dem Daemon nicht klar kamen und mir immer wieder in das Log folgende Errormeldung schrieben:

Result from CMD not valid.  Partial Result: ….

Diese Art von Problemen gab es hauptsächlich beim Verwenden von Scripts die mehr als einen Wert zurück lieferten. Also zurück zum Anfang und Cacti Manual lesen und folgende Artikel verstehen:

Creating a Data Input Method

Making Your Scripts Work With Cacti

Simplest Method of Going from Script to Graph (Walkthrough)

 

Wichtigsten Fakten damit Script Outputs ohne Fehler arbeiten (vor allem mit dem cactid Daemon):

  • jeder Output Wert muss einen Variablennamen mit ausgeben (kein leer oder sonderzeichen)
  • variablenname und value müssen mit einem Doppelpunkt getrennt werden und dürfen keine Leerzeichen beinhalten : : ... :
  • zwischen einem Output Wert und dem nächsten muss bzw. darf nur ein Leerzeichen sein
  • mein Erfahrung hat gezeigt das es Probleme mit Scripts gibt die am Ende des Outputs ein Breakline machen, also den Cursor in eine neue Zeile springen lassen.

Zum letzten Punkt mit dem Breakline – ich konnte dazu nichts finden, dass dies erklärt, bestätigt oder dementiert, jedoch hab ich heut erkannt, dass cmd.php hier weniger heikel ist als der cactid Daemon. CMD.PHP macht keine Probleme beim Einlesen von Outputs welche ein Breakline am Ende haben, CACTID hat mich immer ins Nirvana geschickt mit der oben genannte Fehlermeldung. Seit alle Scripts den Zeilenumbruch am Ende der Ausgabe sein lassen, funktioniert auch der cactid Daemon.

Testen ob eine Script eine Leerzeile einfügt, könnt ihr auf der Kommandozeile, nämlich einfach ausführen 😉

Soweit so gut – ab Morgen gibt es mal 2 Scripts. Eines überwacht die HardDisk Temperatur mittels smartmontools und kann bzw. wird auch noch weiter ausgebaut werden und das zweite überwacht lmsensors jedoch ohne Net-Snmp (das will bei mir einfach nicht laufen 😀 ).

Installation von Cacti & RRD unter Debian Sarge [Single Server]

Entschieden hab ich mich für Cacti, RRD und SNMP. SNMP ist auch lokal sehr brauchbar um Dienste, Services und andere Parameter abzufragen. Das ganze hab ich direkt aus dem Debian Source installiert – zwar bekommt man hier nicht die neueste Version und man kann auch nicht ganz so einfach verschieden Patches einspielen, aber mir war wichtig das ich ein stabiles System habe. Weiters sollten auch alle Abhängigkeiten aufgelöst werden und was am wichtigsten war – Updates sollen automatisch eingespielt werden, man verliert ja zu schnell den Überblick.

Nach vielen Howtos und Dokus ging es dann los:

Zuerst den SNMP Dienst installieren

aptitude install snmpd

SNMP konfigurieren

nano /etc/snmp/snmpd.conf

folgende Änderungen sind durchzuführen damit SNMP nur auf unseren localhost gebunden ist, auch nur diesen “ausspioniert” und von außen nicht verfügbar ist.

Im Abschnitt “Access Control” stellen wir den “sec.name” auf “readonly” und die source wird auf localhost gebunden.

com2sec readonly 127.0.0.0/24 public

Den Abschnitt “System sontact information” ändern wir einfach zu unserem Server passend ab:

syslocation Serverstandort

syscontact Root <root@localhost>

Am Ende der Datei fügen wir noch folgend Zeile ein, dies ist für einen lokalen Betrieb des SNMP Daemon nötig.

smuxsocket 127.0.0.1

SNMP Daemon konfigurieren

Jetzt nur noch den snmpd direkt konfiguriert – es soll ja wirklich sichergestellt sein das dieser nur lokal horcht:

nano /etc/default/snmpd

Die Zeile SNMPDOPTS auskommentieren und / oder ersetzen durch

SNMPDOPTS='udp:127.0.0.1:161 -Lsd -Lf /dev/null -p /var/run/snmpd.pid'

Danach den snmpd restarten mit

/etc/init.d/snmpd restart

So nun noch schnell testen ob alles klappt – Fehlermeldungen nicht ignorieren sondern ihnen auf den Grund gehen – schließlich kann ein offener SNMP einiges über den lokalen Rechner ausplaudern 😉

snmpwalk -v 2c -c public localhost system

Einrichten der Cacti Datenbank

Zu empfehlen wäre, die Datenbank für Cacti und den nötigen User zu allererst anzulegen. Wichtig ist das der Cacti User für die MySQL Datenbank mind. PROCESS Rechte besitzt.

CREATE DATABASE cactidatabase;

GRANT PROCESS ON *.* TO ‘cactiuser’@’localhost’ IDENTIFIED BY ‘Password’;

GRANT SELECT , INSERT , UPDATE , DELETE , CREATE , DROP , INDEX , ALTER ON `cactidatabase` . * TO ‘cactiuser’@’localhost’;

FLUSH PRIVILEGES;

Installation von Cacti

aptitude install cacti cacti-cactid

Die Fragen einfach mit den Default Antworten bestätigen, wenn man nicht genau weiß was nun sinnvoll ist, den Rest, wie sollte es anders sein, RICHTIG beantworten 😉

Danach muss nur noch die Datenbank eingespielt werden

zcat /usr/share/doc/cacti/cacti.sql.gz | mysql -u cactiuser -p cactidatabase

Das wars, Cacti sollte nun erreichbar sein unter http://meineDomain/cacti, vielleicht macht es noch Sinn ein paar Anpassungen auf der Security Seite zu treffen. Schließlich kann Cacti auch sehr brisante Informationen monitoren und somit preis geben und weiters führt Cacti PHP, Perl und Shell Scripts in regelmäßigen Abständen aus – und da könnten verschieden dunkle Gestalten schon auch auf blöde Ideen kommen.

Und ich bin der Meinung – Servermonitoring ist in diesem Ausmaß Admin Sache.

Unterstützt haben mich bei dem Installieren von Cacti folgende Sites:

Cacti mit SNMP unter Debian

The Cacti Manual

CactiUsers: Documentation Site