Amazon Web Services (AWS) Monitoring Tutorial II - Eigene Metriken mit Livepane überwachen

geschrieben am 10.09.2014
Nicht alle Daten der AWS Cloud-Infrastruktur können mit CloudWatch direkt ausgelesen werden. Soll z.B. die Arbeitsspeicher-Auslastung oder der freie Speicherplatz auf einem Dateisystem ausgewertet werden, so müssen diese Daten zunächst vom zu überwachenden Server an die CloudWatch API übermittelt werden.

Ausbau des Monitorings: Der Datenbankserver

Im ersten Teil des Tutorials haben wir ein Beispiel-Szenario für eine skalierbare Cloud-Infrastruktur vorgestellt, die mit Livepane überwacht werden soll. Für den "vorderen" Bereich des Aufbaus (Load-Balancer und Webserver) haben wir bereits entsprechende Widgets konfiguriert. Hiermit können wir die Antwortzeit unseres Webshops, sowie die Anzahl der aktuell laufenden Webserver beobachten. Als Nächstes kommt der Datenbank-Server an die Reihe.

Zusätzliche Informationen vom Server (bzw. der EC2-Instanz) an CloudWatch übermitteln

Um Daten von Linux-Instanzen an CloudWatch zu übermitteln, stellt Amazon einige Perl-Skripte unter dem Namen Amazon CloudWatch Monitoring Scripts for Linux zur Verfügung.
MIt diesen Skripten können Infomationen zu Arbeitsspeicher und Festplattennutzung bequem an CloudWatch weitergereicht werden. Der Aufruf sieht wie folgt aus:

/usr/local/aws/aws-scripts-mon/mon-put-instance-data.pl --aws-credential-file=/etc/aws/awscreds --disk-space-avail --disk-path=/data/

Für unser Beispiel haben wir die Perl-Skripte unter /usr/local/aws/aws-scripts-mon/ abgelegt.
Mit --aws-credential-file wird eine Datei übergeben, die die Amazon-Accountdaten beinhalten.  Die Datei hat den folgenden Aufbau:

AWSAccessKeyId=ABCDEFGHIJKLMNOPQRS
AWSSecretKey=rjogjergrdegjdrsigjdriagjdrigodrjagidofgire

Hinweis: Aus Sicherheitsgründen empfielt es sich, für diesen Zweck über Amazons AWS Management Console einen eigenen User anzulegen, der nur die Berechtigung "cloudwatch:PutMetricData" erhält. Die Policy sähe z.B. so aus:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1234567890",
      "Effect": "Allow",
      "Action": [
        "cloudwatch:PutMetricData"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}

Der Parameter --disk-space-avail gibt an, dass wir den verfügbaren Speicherplatz übermitteln wollen. --disk-path=/data/ gibt an, dass uns die Partition /data interessiert.
Mit dem Aufruf dieses Befehls wird also der verfügbare Speicherplatz der Partition /data genau ein Mal an die CloudWatch API übermittelt. Als Antwort erhalten wir:

Successfully reported metrics to CloudWatch. Reference Id: XXXXXX-XXXX-XXX-XXX-XXXXXXXXXXX

Um die Daten regelmäßig zu übermittelt, richten wir als Nächstes einen Cron-Job ein:

*/5 * * * * /usr/local/aws/aws-scripts-mon/mon-put-instance-data.pl --aws-credential-file=/etc/aws/awscreds --disk-space-avail --disk-path=/data/ --from-cron

Damit werden die Informationen zum freien Speicherplatz alle 5min an CloudWatch übermittelt. Der Parameter --from-cron unterdrückt die Ausgabe einer Antwort, so dass der Aufruf problemlos im Hintergrund erfolgen kann.

Freien Speicherplatz mit Livepane überwachen

Die Auswertung der neuen Metriken mit Livepane ist nun ganz einfach. Nachdem die ersten Werte an CloudWatch übermittelt wurden, kann in Livepane unter dem Namespace "System/Linux" die Metrik "DiskSpaceAvailable" ausgewählt werden. Für jeden Server, der so seine Daten postet, stehen im Bereich "Parameter" nun automatisch die entsprechenden Einträge zur Auswahl zur Verfügung. In unserem Fall das Dateisystem "/dev/xvdf", die Instanz-Id "i-12345678" sowie den Mount-Pfad "/data".

Eigene CloudWatch Metrik - freier Speicherplatz

Das Ergebnis zeigt den verfügbaren freien Speicherplatz in Gigabyte an. Man könnte das Widget bei Bedarf natürlich auch als Chart konfigurieren.

CloudWatch Widget - freier Speicherplatz

Arbeitsspeicherauslastung

Als Nächstes interessiert uns die Auslastung des Arbeitsspeichers. Auch dieser Wert muss zunächst mittels Perl-Skript an CloudWatch übermittelt werden. Hierzu fügen wir den folgenden Cron-Job hinzu:

*/5 * * * * /usr/local/aws/aws-scripts-mon/mon-put-instance-data.pl --aws-credential-file=/etc/aws/awscreds --mem-util --from-cron

Statt --disk-space-avail erfolgt hier der Aufruf mit --mem-util, welcher die prozentuelle Arbeitsspeicher-Auslastung übermittelt.
Für die Darstellung in Livepane richten wir ein CloudWatch-Widget mit Chart-Darstellung ein, welches die RAM-Auslastung der letzten Stunde anzeigt:

Eigene CloudWatch Metrik - Arbeitsspeicher-Auslastung

CloudWatch Widget - Arbeitsspeicher

CPU-Auslastung

Der letzte Wert, den wir für unseren Datenbank-Server beobachten wollen, kann wieder direkt über CloudWatch abgerufen werden: Die CPU-Auslastung. Hierzu wird der Namespace "Amazon Elastic Compute Cloud" ausgewählt, und die Metrik "CPUUtilization" verwendet. Auch hier nutzen wir wieder die Chart-Darstellung mit den Werten der letzten Stunde:

CloudWatch Metrik - CPU-Auslastung

CloudWatch Widget - CPU Auslastung

Im nächsten Teil des Tutorials schließen wir das Monitoring unsers Beispiel-Projektes ab. Dabei werden wir auch mit dem Thema Kostenüberwachung befassen.

Hinweis: In unserem Beispiel wird der Datenbank-Server komplett selbst betrieben. Amazon bietet mit den "Relational Database Services" auch einen eigenen Dienst für Datenbanken an, den man stattdessen verwenden kann. Die Anzeige der Metriken dieses Dienstes wird von Livepane natürlich ebenfalls unterstützt.

Zu Teil 1 des Tutorials
Zu Teil 3 des Tutorials

Kommentar hinzufügen

Der Inhalt dieses Feldes wird nicht öffentlich zugänglich angezeigt.
Bild-CAPTCHA
Enter the characters shown in the image.