Cacti: Passwords do not match, please retype.

With the message “Error: Passwords do not match, please retype.” Cacti tried to make my life horrible today, but not with me.

If you are running Cacti 0.8.7b (which is the standard version located in the Ubuntu repositories) you will be prompted with this error after editing a host using Firefox 3. The error is based on an auto complete bug within the form. There are two solutions to avoid the problem (which worked for me):

  1. Before saving all the settings you have to delete (if not in use) the value in the password field of the SNMPv3 settings and than switch back to your preferred method of fetching information.
  2. Apply the patch which was provided by RichardBronosky in the Cacti Forum solving the problem.
  3. The easiest way to apply this patch is to cd to your cacti directory and:
    1. THIS IS IMPORTANT. Verify the validity of the URI like this:

    Code:
    curl -L http://forums.cacti.net/download.php?id=14681

    2. If it looks like a safe patch, then apply it directly from that URI via curl:

    Code:
    curl -L http://forums.cacti.net/download.php?id=14681|patch -p1 -N

Invalid PHP_SELF Path & Cacti & Ubuntu 7.10

Wenn nach der Installation oder Update Cacti mit oben genannten Error aufwartet hilft das Anpassen der /usr/share/cacti/site/include/config.php

Man ersetzt den Teil zw. /* Sanity Check on “Corrupt” PHP_SELF */ und /* we don’t want these pages cached */ mit:

[code lang=”php”]
if ((!is_file($_SERVER[“PHP_SELF”])) && (!is_file($config[“base_path”] . ‘/’ . $_SERVER[“PHP_SELF”]))) {
if (!is_file($_SERVER[“DOCUMENT_ROOT”] . $_SERVER[“PHP_SELF”])) {
if (!((is_file($_SERVER[“SCRIPT_FILENAME”])) && (substr_count($_SERVER[“SCRIPT_FILENAME”], $_SERVER[$
if (!((is_file($_SERVER[“SCRIPT_FILENAME”])))) {
echo “\nInvalid PHP_SELF Path\n”;
exit;
}
}
}
}
[/code]

A Cacti Bug

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 😀 ).

Cacti Templates

Diese werden immer wieder benötigt wie auch Scripts um verschiedenstes schön übersichtlich darstellen zu können.

Anlaufstellen dafür neben google sind:

Best Post – Complete List of Cacti Scripts and Templates

Scripts and Templates

Cacti Templates (Cisco Routers and Switches,Mysql,postfix,Qmail,Apache,Widows and many more)

Cacti User Plugins

Cacti.net Additional Scripts

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

Server Monitoring MUSS sein

Warum das so ist, ganz einfach, schließlich will man ja wissen wann die Festplatte anfängt zu rebellieren, der Lüfter ausfällt, SWAP Dateien über schwappen und vieles mehr.

Zu einem Server gehören somit neben vielen Homepages und Traffic auch eine Überwachung der Prozesse und Hardware. So nun auch auf unserem Server.

Entschieden hab ich mich für das RRD Tool zum Loggen und graphischen Aufbereiten der Server Daten. Ja und damit das auch alles bunt, übersichtlich und von überall erreichbar ist hab ich mich für Cacti entschieden. Kein Munin, keine Nagios, kein Zabbix – erklären kann man das nicht so genau – ich dacht mir einfach ich teste Cacti und es hat mir gefallen.

Sodale genug geredet – es gibt das nette Tool nun am Server und der nächste Eintrag wird mal die Installation auf unserer Debian Sarge Kiste genauer erklären 😉