1. Einleitung
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 hierachische 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-User unterhalb Ihres Root-Accounts an.
Loggen Sie sich
dafür bei AWS als Root-User ein und navigieren Sie 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 Access Type den Programmatic Access auswählen.
3.2. Berechtigungen
Für das Monitoring sollte der Benutzer auf keinen Fall irgendwelche Änderungsrechte bekommen.
Sie können dem Benutzer check-mk
einfach die einizige Policy ReadOnlyAccess
zuordnen (oder Sie machen sich die Mühe, den Account mit detaillierteren Policies genauer einzuschränken):
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.
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:
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-User 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.
Mit dem Knopf Review geht es zum Schritt zwei. Legen Sie dort als Name den Namen BillingViewAccess
aus 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
-User, den
Sie auswählen und mit Attache policy bestätigen. Das müsste dann mit folgender Meldung
erfolgreich ausgeführt werden:
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 Hostnamen können Sie nach Belieben vergeben. Wichtig: Da AWS als Dienst keine IP-Adresse oder DNS-Namen hat (den Zugriff macht der Spezial-Agent von selbst), müssen Sie die IP Address Family auf No IP einstellen.
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 Host & Service Parameters > Datasource Programs > 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 Access Key ID des angelegten AWS-User check-mk
ein.
Auch wählen Sie hier, welche globalen Daten Sie überwachen möchten,
also solche die unabhängig von einer Region sind. Das sind aktuell
nur die Daten über die Kosten:
Die eigentlich interessanten Daten sind Regionen zugeordnet. Wählen Sie also hier Ihre AWS-Region(en) aus:
Unter Services per region to monitor legen Sie nun fest, welche Informationen Sie in diesen Regionen abrufen möchten. In der Standardkonfiguration alle AWS Web-Services und die Überwachung derer Limits uneingeschränkt aktiviert. Der Übersichtshalber wurden in dem Screenshot alle bis auf einer deaktiviert:
Diese können Sie dann pro Web-Service oder global mit Restrict monitoring services by one of these tags wieder einschränken. Wenn Sie pro Web-Service 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:
Letztendlich müssen Sie noch den Special Agent dem vorher erstellten Host zuordnen, indem Sie den Hostnamen in Conditions > Explicit hosts eintragen.
4.3. Services auf dem AWS-Host selbst
Gehen Sie nun zu der Serviceerkennung des neu angelegten AWS-Host, wo WATO nun etliche Services finden sollte. Nachdem Sie die Services hinzugefügt haben, sieht das nach einem Activate Changes etwa so aus:
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 Hosts verteilt werden und diese ohne eigene Monitoringagenten arbeiten. Dabei wird jeder EC2-Instanz ein Piggy-Host zugeordnet, welche nach dem privaten DNS-Namen der EC2-Instanz benannt sind.
Die Piggy-Hosts werden von Checkmk nicht automatisch angelegt. Legen Sie diese Hosts entweder von Hand an oder — ab Version 1.6.0 — optional mit dem neuen 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!
Übrigens: mit dem Hilfsskript find_piggy_orphans
aus dem
Treasures-Verzeichnis finden Sie alle Piggyhosts, 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 Azure-Host) und wählen Sie als Agent No Agent aus.
4.5. Hosts für ELB (Classic Load Balancer)
Auch die Services für die ELB werden Piggy-Hosts zugeordnet. Die Namen dafür entsprechen deren DNS-Namen.
4.6. Limits überwachen
Einige Web-Services von AWS bringen Limits mit und Checkmk kann diese auch überwachen. Dazu gehören zu Beispiel diese:
Sobald ein solches Check-Plugin Services erzeugt und diesen später prüft, werden immer alle Elemente des Web-Services 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 auch die Limits ab.
4.7. Die weiteren Services
Die weiteren Services von AWS werden wie folgt zugeordnet:
Service | Zuordnung | |
---|---|---|
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 |