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?