simples XML Monitoring
28
Februar
XML ist ja wahnsinnig angesagt für alle möglichen Dinge. Ich selbst kann mich damit nicht so recht anfreunden – zumindest ist manuelles editieren immer ein Krampf. Ich habe meist mit Konfigurationsdateien in XML zu tun. So auch mit meinem Telefonprojekt. Die Snom Telefone nutzen für das Provisioning eine XML Datei, welche über einen Webserver abgerufen wird. Da ich die Konfiguration sehr dynamisch gemacht habe (Webfrontend etc.) wird auch die XML Konfig für die Telefone dynamisch erstellt. Diese Datei sollte sich unbedingt an den XML Standard halten, da ansonsten die Telefone mit dem ganzen nichts anfangen können (dabei habe ich schon die seltsamsten Fehler erlebt).
XML validieren
Um XML zu validieren gibt es ein recht einfaches Tool unter Linux – xmllint. Einfach als Parameter eine XML Datei angeben und gut. xmllint kommt auch mit http Links zurecht – was mir ebenfalls gerade recht kommt
Icinga Plugin
Absolut simpel kann man das ganze nun in ein Icinga/Nagios Plugin verwandeln:
#!/bin/bash # validation of a remote XML File # Ronny Becker, 02.2013 RET="`xmllint --noout $1 2>/dev/null; echo $?`" case $RET in "0" ) echo "XML Validation OK" exit 0 ;; "1" ) echo "XML Validation NOT OK" exit 2 ;; * ) echo "unknown return code" exit 3 ;; esac
Das ganze als command einbinden, als ersten Parameter bekommt das Plugin die remote Adresse (http://…) und fertig.

Es macht keinen Sinn, dass du xmllint ausführst, den exit-Code (der eine Variable ist) ausgibst und in einer Variable speicherst. Wieso nicht einfach so?
xmllint --noout "$1" 2>/dev/null
case $? in
...
(achja, und $1 gleich noch gequoted, falls Leerzeichen mal irgendwo vorkommen.)
Da hast Du Recht.
Man könnte es mit Übersichtlichkeit argumentieren