Umstieg von NRPE auf den Icinga 2 Agenten

icinga_logo_200x69
Heute will ich euch ein Migrationsszenario bei der Überwachung von Windows für Icinga 2 beschreiben. Bei vielen kommt zum Monitoring von Windows der NSClient++ zum Einsatz, der integrierte NRPE-Server wird dann mit dem Plugin check_nrpe abgefragt.
Ist das Plugin und der NSClient++ nicht selbst übersetzt und der DH-Schlüssel selbst gewählt, benutzt man den selben wie tausend andere. NRPE ist damit als unsicher zu betrachten. Der Icinga 2 Agent authentifiziert Verbindungen an Hand von Zertifikaten der eigenen PKI. Den Agenten gibt es in der aktuellen Version im Bundle mit dem NSClient, damit sind die Plugins des NSClient++ auch weiterhin vom Agenten aus nutzbar.
Nun aber wie man eine Icinga 2-Konfiguration gestaltet, um zuerst NRPE-Checks benutzen zu können und dann sukzessive auf den Agenten zu migrieren. Als identifizierendes Merkmal verwenden wir das Host Custom Attribut noagent. True bedeutet dieser Host ist per check_nrpe zu prüfen, bei false soll der Agent verwendet werden.

object Host "andromeda" {
  import "generic-host"
  address = "172.16.1.22"
  vars.os = "Windows"
  vars.noagent = true
  vars.nscp_memory_committed = true
  vars.nscp_memory_free = true
  vars.nscp_memory_warning = "200M"
  vars.nscp_memory_critical = "100M"
}

Am Beispiel eines Services zur Überwachung der Memoryauslastung, folgen hier die beiden Definitionen.

apply Service "Memory usage" {
  import "generic-service"
  check_command = "nrpe-legacy-memory"
  assign where host.vars.os == "Windows" && host.vars.noagent
}
apply Service "Memory usage" {
  import "generic-service"
  check_command = "my-nscp-local-memory"
  command_endpoint = host.name
  assign where host.vars.os == "Windows"
  ignore where host.vars.noagent
}

Die Check Commands, die auf github zum Download bereit stehen, bieten für NRPE und NSCP die gleiche Parametrisierung. Ein Anpassen bzw. Abändern der Custom Attribute nscp_memory_* ist damit beim Umstieg nicht erforderlich und auch im Mischbetrieb kann auf doppelte Definitionen verzichtet werden. Es ist somit nur noagent zu entfernen und das für den Agenten erforderliche Zonen- und Endpoint-Objekt anzulegen. Zu beachten ist noch, dass der Endpoint und der Host den selben Namen tragen müssen (wg. command_endpoint = host.name).

Lennart Betz
Lennart Betz
Senior Consultant

Der diplomierte Mathematiker arbeitet bei NETWAYS im Bereich Consulting und bereichert seine Kunden mit seinem Wissen zu Icinga, Nagios und anderen Open Source Administrationstools. Im Büro erleuchtet Lennart seine Kollegen mit fundierten geschichtlichen Vorträgen die seinesgleichen suchen.

nsClient++ mit ssl Teil 2/2

Da es mittlerweile schon etwas her ist, dass ich den ersten Teil dieses Posts geschrieben habe, fühlte ich mich diese Woche genötigt die damals angekündigten Informationen heute mal in einen neuen Blogpost zu gießen.
Heute soll es um den eigentliche Abfrage des NSClient gehen.

Zertifikate

Hierzu brauchen wir als erstes einen auf Windows installierten NSClient++. Dieser benötigt einen aktiven nrpe Server und ein paar Zertifikate. Die Zertifikate kann man auf dem klassischen Weg mit openSSL auf der Commandline erstellen oder man vereinfacht sich die Sache und nimmt ein grafisches Tool. Ich habe mich dabei für GnoMint entschieden, da hier die Komplexität so gering ist wie es noch nie vorher gesehen habe. Zusammengefasst muss man 5 Knöpfe drücken und hat zum Schluss zwei CA files, die jeweils ein Zertifikat autorisieren. Diese muss man in in zwei Ordner exportieren und anschließend dem Agent und dem Client unterschieben.
 

Anlegen und zuordnen der Zertifikate + CA

Anlegen und zuordnen der Zertifikate + CA


Man sieht in diesem Screenshot ganz gut dass das CA-file, welches auf dem Server liegen wird das Zertifikat autorisiert welches auf der Client Seite liegen wird und anders herum.

Der Agent

Nachdem NSClient++ auf gewohnte weise installiert wurde muss man jetzt noch ein paar einstellungen anpassen.
(mehr …)

Christoph Niemann
Christoph Niemann
Senior Consultant

Christoph hat bei uns im Bereich Managed Service begonnen und sich dort intensiv mit dem internen Monitoring auseinandergesetzt. Seit 2011 ist er nun im Consulting aktiv und unterstützt unsere Kunden vor Ort bei größeren Monitoring-Projekten und PERL-Developer-Hells.

nsClient++ mit ssl Teil 1/2

Sicherheit durch Verschlüsselung ist nicht nur auf den meisten Internetseiten und und im Emailverkehr (zumindest vom Client zum Server) mittlerweile Standard. Auch innerhalb von Unternehmen laufen immer mehr Verbindungen über SSL ab.
Im Monitoring sollte Sicherheit eigentlich ganz oben auf der Agenda stehen, jedoch ist gerade beim Windows Monitoring mit check_nrpe und ganz besonders check_nt nicht alles zum besten bestellt. Währen check_nrpe wenigstens eine grundlegende Verschlüsselung bietet sendet check_nt seine Daten in Klartext.
Heute möchte ich euch daher zeigen wie man eine Sichere Verbindung mit nsclient++ herstellt. Hierbei wird nsclient++ auf dem Windows Host als Server/Agent eingesetzt und auf Icinga-Seite als Client.
Zur Verschlüsselung und Authentifizierung wird SSL mit CA und Zertifikaten engesetzt.
Als erstes muss man sich auf Linux Seite nsclient++ kompilieren. Das ist nicht schwer, hält jedoch ein paar Fallstricke bereit. Ich beschreibe den Vorgang hier exemplarisch für ein Debian System,
Zuerst installieren wir die notwendigen Abhängigkeiten.
aptitude install -y git build-essential cmake python libssl-dev libboost-all-dev python-dev libprotobuf-dev protobuf-compiler
# Und zusätzlich
aptitude install libcrypto++-dev libcrypto++9
aptitude install libzmq1 libzmq-dev
aptitude install libtinyxml2-dev libtinyxml2.6.2

Jetzt können wir den Git Snapshot herunterladen. Auf grund eines Problems im aktuellen Source Code greifen die dabei auf den 0.4.1 Branch zurück.
git clone https://github.com/mickem/nscp.git
git checkout 0.4.1
# aktuellen Branch anzeigen:
git branch

Um einem weiteren kleinen Bug zu entgehen muss noch eine Datei im jetzt entstandenen Verzeichnis umbenannt werden.cd nscp/build
mv FindTinyXML2.cmake FindTINYXML2.cmake
Es ist tatsächlich wahr. Linux ist case-sensitive. Weil in dem libtinyxml2 Paket die Datei tinyxml2.cpp fehlt besorgen wir uns schnell eine neue und kopieren sie ins richtige Verzeichnis. Bei der Gelegenheit nehmen auch gleich noch eine passende tinyxml2.h mit.
wget https://raw.github.com/leethomason/tinyxml2/master/tinyxml2.cpp
wget https://raw.github.com/leethomason/tinyxml2/master/tinyxml2.h
mv tinyxml2.cpp /usr/include/
mv tinyxml2.h /usr/include/

Nach diesen ganzen Vorarbeiten kann es jetzt an das eigentliche kompilieren gehen. Zuerst erstellen wir ein neues Verzeichnis und wechseln hinein. Das ganze sollte folgendermaßen aussehen.
mkdir build
tree -L 1
.
├── build     # build verzeichnis
└── nscp      # git snapshot
cd build

Hier wird jetzt konfiguriert und anschließend kompiliert.
cmake ../nscp
make
# and check it
make test

Damit ist der Client fertig, jetzt ist der Windows Agent an der Reihe. Hier muss nichts kompiliert werden. Benutze einfach das fertige zip oder msi Paket von nsclient.org und installiere es.
Im nächsten Teil der Serie wird nsclient++ konfiguriert um SSL Verschlüsselung und Authentifizierung zu benutzen. Außerdem werde ich ein paar Überwachungsbeispiele angeben.

Christoph Niemann
Christoph Niemann
Senior Consultant

Christoph hat bei uns im Bereich Managed Service begonnen und sich dort intensiv mit dem internen Monitoring auseinandergesetzt. Seit 2011 ist er nun im Consulting aktiv und unterstützt unsere Kunden vor Ort bei größeren Monitoring-Projekten und PERL-Developer-Hells.