2016-06-10 13 views
2

Das 12-Faktor-App-Manifest empfiehlt writing all log output to stdout. Dies ist sehr einfach zu erreichen, wenn Ihr Dienst/Ihre App in einem Andock-Container ausgeführt wird. Sie können dann einen Docker-Protokolltreiber verwenden, um die Protokolle an einen Protokollversender wie fluentd zu senden, der sie dann zur Analyse an elasticsearch oder zur Langzeitspeicherung an HDFS weiterleiten kann.Wie sollten in einer 12-Faktor-App Metriken an den Metrik-Überwachungsserver gesendet werden?

Während es sehr klar ist, wie Logs gehandhabt werden sollen, scheint es keine Anleitung zum Umgang mit Metriken zu geben. Zum Beispiel möchten wir vielleicht den Zeitaufwand für jede Anfrage, Fehlerraten und andere Dinge für unseren Service verfolgen.

Es ist möglich, dass der Dienst Messwerte direkt sendet, aber es scheint ein Verstoß gegen die 12-Faktor-App-Prinzipien zu sein. Wenn der Metrikserver ausfällt oder der Dienst ausfällt, müssen wir uns außerdem mit dem Schreiben der Metriken auf die Festplatte und anderen im Voraus zu protokollierenden Merkmalen befassen, was die Komplexität erhöht.

Eine mögliche Lösung wäre, Messwerte auf stdout zu schreiben und sie flüssig zu filtern. Aber in diesem Fall mischen wir die Logs und die Metriken, und wir müssten entweder ein festgelegtes Format dafür haben, wie Logs und Metriken aussehen, um sie zu unterscheiden, und dies ist möglicherweise keine Option für Services, die nicht von uns geschrieben wurden.

Wie sollten in einer 12-Faktor-App Metriken von einer App/einem Dienst an den Metrikserver gesendet werden?

Antwort

0

Der Metrikserver unterscheidet sich nicht wirklich von anderen Abhängigkeiten, z. Datenbank oder was auch immer. Abhängigkeitsspeicherorte werden über Umgebungsvariablen konfiguriert (http://12factor.net/config). Verwenden Sie diese Option, um anzugeben, wohin die App ihre Messwerte senden soll.

Das Problem mit dem Ausfall des Metrik-Service ist wahrscheinlich nicht in der Konfiguration enthalten. Wie die Anwendung behandelt, dass eine ihrer Abhängigkeiten nicht verfügbar ist, ist eher ein Anwendungsdesignproblem. Sie können wählen, ob Sie einen bestimmten Betrag im RAM oder in einem flüchtigen Dateisystem puffern möchten oder einfach alles fallen lassen, was nicht gesendet werden kann - Ihre Wahl. Der Punkt ist, dass der Speicherort für diese Umgebung konfiguriert ist, alles andere ist ein Designproblem.

Nur meine 2c, HTH.