Checkmk
to checkmk.com

1. Einleitung

logo aws

Nach einer Umfrage unter unseren Anwendern ist Amazon Web Services aktuell der wichtigste Anbieter von Cloud-basierten Services. Und dass Checkmk hier eine exzellente Überwachung bereitstellen muss, versteht sich von selbst.

Checkmk enthält daher ein umfangreiches Monitoring von AWS, welches aus einem Konnektor zu AWS und einer stattlichen Sammlung von Check-Plugins besteht, die für Sie verschiedenste Metriken und Zustände abrufen und auswerten. Aufgrund der Menge an Check-Plugins hier nur einzelne, um die AWS-Bereiche aufzuzeigen, die Checkmk derzeit überwachen kann:

Eine vollständige aktuelle Liste aller Plugins finden Sie im Katalog der Check-Plugins.

2. Konkrete Umsetzung der AWS-Überwachung

2.1. Hosts und Services

In Checkmk ordnen sich alle zu überwachenden Objekte in eine hierarchische Struktur von Hosts und Services ein. Nun gibt es bei Cloud-basierten Diensten das Konzept von Hosts nicht. Um die Einfachheit und Konsistenz von Checkmk zu bewahren, bilden wir dennoch AWS-Objekte auf das Schema Host/Service ab.

Wie das geht, zeigt am besten ein Beispiel: In einer Region sind mehrere EC2-Instanzen konfiguriert. Einer EC2 sind üblicherweise EBS zugeordnet. Diese Konstellation sieht in Checkmk wie folgt aus:

  • Es gibt einen Host, der dem AWS-Account entspricht. Dieser gibt eine Übersicht aller EC2-Instanzen und deren Status als Service.

  • Die EC2-Instanzen selbst sind wiederum eigene Hosts.

  • Auf diesen EC2-Hosts finden Sie Services mit den eigentlichen Metriken.

  • Die EBS werden als eine Art Festplatten interpretiert und liefern dementsprechend Metriken zu I/O (z.B. gelesene oder geschriebene Anzahl an Bytes). Dazu existieren in Checkmk eigene Services mit dem Namen AWS/EBS Disk IO pro EBS, die der EC2-Instanz zugeordnet werden.

2.2. Zugriff auf AWS

AWS stellt eine HTTP-basierte API bereit, über die auch Monitoring-Daten abrufbar sind. Checkmk greift auf diese API über den „Spezialagenten“ agent_aws zu, welcher an die Stelle des Checkmk-Agenten tritt, aber anders als dieser lokal auf dem Checkmk-Server ausgeführt wird.

3. AWS vorbereiten

3.1. Benutzer anlegen

Um die Überwachung per Checkmk zu ermöglichen, legen Sie am besten dafür einen speziellen AWS-Benutzer unterhalb Ihres Root-Accounts an. Loggen Sie sich dafür bei AWS als Root-Benutzer ein und navigieren Sie unter All services zu Security, Identity, & Compliance > IAM (Identity and Access Management). Gehen Sie hier auf Users und legen Sie mit Add user einen neuen Benutzer an. Als Benutzername wählen Sie z.B. check-mk. Wichtig ist, dass Sie bei Select AWS credential type den Access key - Programmatic access auswählen.

aws create user

3.2. Berechtigungen

Der soeben angelegte Benutzer sollte nur für das Monitoring durch Checkmk verwendet werden und benötigt ausschließlich lesenden Zugriff auf AWS. Wir empfehlen diesem Benutzer ausschließlich die Policy ReadOnlyAccess zuzuweisen. Um diese Policy zu finden, klicken Sie zuerst auf Attach existing policies directly und geben anschließend readonlyaccess in das Suchfeld ein. In der Liste unter dem Suchfeld müssen Sie dennoch weit nach unten scrollen, da es eine ganze Reihe Policies gibt, die diesen String enthalten:

aws create user policies

3.3. Schlüssel

Nach dem Abschluss des Anlegens des Benutzers wird für Sie automatisch ein Zugangsschlüssel erzeugt. Achtung: Das Secret des Schlüssels wird nur ein einziges mal — direkt nach dem Erzeugen — angezeigt. Kopieren Sie daher unbedingt den Schlüssel und legen ihn z.B. im Checkmk-Passwortspeicher ab. Alternativ geben Sie ihn im Klartext in der Regel an (siehe unten). Für Checkmk benötigen Sie neben dem Secret noch die Access key ID. Der Name des Benutzers (bei uns check-mk) spielt hier keine Rolle.

aws create user key

Falls Sie das Secret trotzdem einmal verlieren sollten, können Sie für den Benutzer einen neuen Access Key anlegen und bekommen ein neues Secret:

aws create access key

3.4. Zugriff auf Billing-Informationen

Wenn Sie möchten, dass Checkmk auch Lesezugriff auf die Abrechnungsinformationen bekommt (um den globalen Check Costs and Usage ausführen zu können) benötigen Sie für Ihren AWS-Benutzer eine weitere Policy, die Sie allerdings erst selbst definieren müssen.

Wählen Sie dazu unter Security, Identity, & Compliance > IAM > Policies den Knopf Create Policy. Wählen Sie unter Select a Service > Service > Choose a Service den Service Billing aus. Unter Actions kreuzen Sie die Checkbox Read an. Sie müssen noch eine weitere Berechtigung setzen. Fügen Sie diese mit dem Knopf Add additional permissions hinzu. Wählen Sie in der neuen Box unter Select a Service > Service > Choose a Service den Service Cost Explorer Service aus. Unter Actions kreuzen Sie die Checkbox Read an.

aws policies

Mit dem Knopf Review geht es zum Schritt zwei. Legen Sie dort als Name BillingViewAccess an und speichern Sie mit dem Knopf Create policy.

Diese neue Policy müssen Sie jetzt noch dem Benutzer hinzufügen. Dazu gehen Sie wieder zu Security, Identity, & Compliance > IAM > Policies, suchen im Suchfeld Filter Policies nach BillingViewAccess, wählen diese durch Klick in den Kreis link aus und gehen dann auf Policy actions > Attach. Hier finden Sie Ihren check-mk-Benutzer, den Sie auswählen und mit Attach policy bestätigen.

4. Monitoring in Checkmk konfigurieren

4.1. Host für AWS in Checkmk anlegen

Legen Sie für die Überwachung von AWS nun einen Host in Checkmk an. Den Host-Namen können Sie nach Belieben vergeben. Wichtig: Da AWS als Dienst keine IP-Adresse oder DNS-Namen hat (den Zugriff macht der Spezialagent von selbst), müssen Sie die IP address family auf No IP einstellen.

azure wato no ip

4.2. Regel für AWS-Agenten anlegen

AWS kann nicht über den normalen Checkmk-Agenten abgefragt werden. Richten Sie daher jetzt den AWS-Spezialagenten ein. Dazu legen Sie unter Setup > Agents > VM, Cloud, Container > Amazon Web Services (AWS) eine Regel an, deren Bedingungen ausschließlich auf den gerade angelegten AWS-Host greifen.

Beim eigentlichen Inhalt der Regel finden Sie zunächst die Angaben für den Login. Hier tragen Sie die „Access Key ID“ des angelegten AWS-Benutzers check-mk ein. Auch wählen Sie hier, ob Sie einen Proxy benötigen, um auf die Daten zuzugreifen und welche globalen Daten Sie überwachen möchten. Das sind solche, die unabhängig von einer Region sind. Aktuell sind hier lediglich die Daten über die Kosten auswählbar:

aws rule 1

Im obigen Bild sehen Sie außerdem die Option Use STS AssumeRole to assume a different IAM role. Sollten Sie einen oder mehrere weitere Accounts bei AWS haben, können Sie mit einem einzigen Monitoring-Benutzer alle anderen ebenfalls überwachen.

Die eigentlich interessanten Daten aber sind einzelnen Regionen zugeordnet. Wählen Sie also hier Ihre AWS-Region(en) aus:

aws rule 2

Unter Services per region to monitor legen Sie nun fest, welche Informationen Sie in diesen Regionen abrufen möchten. In der Standardkonfiguration sind alle AWS-Dienste und die Überwachung derer Limits uneingeschränkt aktiviert. Der Übersichtlichkeit halber wurden im folgenden Bild aber alle bis auf einen deaktiviert:

aws rule 3

Diese können Sie dann pro Webdienst oder global mit Restrict monitoring services by one of these AWS tags wieder einschränken. Wenn Sie pro Webdienst einschränken, wird damit immer die globale Option überschrieben. Ihnen steht hier zusätzlich zu den AWS Tags auch noch die Möglichkeit zur Verfügung, explizite Namen anzugeben:

aws rule 4

Letztendlich müssen Sie noch den Spezialagenten dem vorher erstellten Host zuordnen, indem Sie den Host-Namen in Conditions > Explicit hosts eintragen.

4.3. Services auf dem AWS-Host selbst

Wechseln Sie nun in Checkmk zur Service-Erkennung des neu angelegten AWS-Hosts, wo Checkmk nun etliche Services finden sollte. Nachdem Sie die Services hinzugefügt haben, sieht das nach einem Aktivieren der Änderungen etwa so im Monitoring aus:

aws services ec

4.4. Hosts für die EC2-Instanzen anlegen

Services, die EC2-Instanzen zugeordnet sind, werden nicht dem AWS-Host zugeordnet, sondern sogenannten Piggyback-Hosts. Dies funktioniert so, dass Daten, die vom AWS-Host abgerufen wurden, an diese Piggyback-Hosts verteilt werden, die ohne eigene Monitoring-Agenten arbeiten. Dabei wird jeder EC2-Instanz ein Piggyback-Host zugeordnet, welche nach dem privaten DNS-Namen der EC2-Instanz benannt sind.

Die Piggyback-Hosts werden von Checkmk nicht automatisch angelegt. Legen Sie diese Hosts entweder von Hand an oder optional mit dem Dynamic Configuration Daemon (DCD). Wichtig dabei ist, dass die Namen der Hosts exakt mit den privaten DNS-Namen der EC2-Instanz übereinstimmen — und zwar auch die Groß-/Kleinschreibung!

Tip: mit dem Hilfsskript find_piggy_orphans aus dem Treasures-Verzeichnis finden Sie alle Piggyback-Hosts, für es Daten gibt, die aber noch nicht als Host im Checkmk angelegt sind:

OMD[mysite]:~$ share/doc/check_mk/treasures/find_piggy_orphans
ip-172-31-44-50.eu-central-1.compute.internal
ip-172-31-44-51.eu-central-1.compute.internal

Konfigurieren Sie die EC2-Hosts ohne IP-Adresse (analog zum AWS-Host) und wählen Sie als Agent No API integrations, no Checkmk agent aus.

wato host no agent

4.5. Hosts für ELB (Classic Load Balancer)

Auch die Services für die ELB werden Piggyback-Hosts zugeordnet. Die Namen dafür entsprechen deren DNS-Namen.

4.6. Limits überwachen

Einige Webdienste von AWS bringen Limits mit und Checkmk kann diese auch überwachen. Dazu gehören zum Beispiel diese:

Sobald ein solches Check-Plugin Services erzeugt und diese später prüft, werden immer alle Elemente des Webdienstes geholt. Nur so kann Checkmk sinnvoll die aktuelle Auslastung zu diesen Limits berechnen und entsprechend Schwellwerte prüfen. Das gilt auch dann, wenn Sie in der Konfiguration die Daten auf bestimmte Namen oder Tags einschränken.

In der Grundkonfiguration sind die Limits automatisch aktiviert. Wenn Sie also die zu holenden Daten in der Regel zu dem Spezialagenten einschränken, weil Sie die zu übertragenden Daten reduzieren wollen, schalten Sie ebenfalls die Limits ab.

4.7. Weitere Services

Die weiteren Services von AWS werden wie folgt zugeordnet:

ServiceZuordnung

CE

Costs & Usage

Beim AWS-Host

EBS

Block Storages

Werden der EC2-Instanz angefügt, sofern diese der Instanz gehören, ansonsten dem AWS-Host

S3

Simple Storages

Beim AWS-Host

RD

Relational Databases

Beim AWS-Host

Auf dieser Seite