Ich habe mich mit einer Stackdriver Trace-Integration in Google Cloud Run befasst. Ich kann es mit dem Agenten zum Laufen bringen, aber ein paar Fragen stören mich.
Angesichts dessen
- Der Stackdriver-Agent aggregiert Traces in einem kleinen Puffer und sendet sie regelmäßig.
- Der CPU-Zugriff ist eingeschränkt, wenn ein Cloud Run-Dienst eine Anforderung nicht verarbeitet.
- Es gibt keinen Shutdown-Hook für Cloud Run-Dienste. Sie können den Puffer vor dem Herunterfahren nicht löschen: Der Container erhält nur ein SIGKILL . Dies ist ein Signal, das Sie von Ihrer Anwendung nicht abfangen können.
- Das Ausführen eines Hintergrundprozesses, der Informationen außerhalb des Anforderungs- / Antwortzyklus sendet, scheint gegen den Knative Container Runtime-Vertrag zu verstoßen
- Die Sammlung von Protokolldaten ist dokumentiert und erfordert nicht, dass ich einen Agenten ausführe, aber es gibt keine solche Lösung für die Telemetrie.
- Ich habe einen Bericht von jemandem gefunden, bei dem beim Cloud Run mithilfe des agentenbasierten Ansatzes verlorene Spuren festgestellt wurden
Wie macht Google das?
Ich ging in den Quellcode für das Cloud Endpoints ESP (die Cloud Run-Integration befindet sich in der Beta), um zu sehen, ob sie es auf andere Weise lösen, aber dort wird das gleiche Muster verwendet: Es gibt einen Puffer mit Traces (1s) und es wird regelmäßig gelöscht.
Frage
Während meine Tracing-Integration in meinem Test-Setup zu funktionieren scheint, mache ich mir Sorgen über unvollständige und fehlende Traces, wenn ich diese in einer Produktionsumgebung ausführe.
Ist das ein hypothetisches Problem oder ein echtes Problem?
Es sieht so aus, als ob der richtige Weg, dies zu erreichen, darin besteht, Telemetrie in Protokolle zu schreiben, anstatt einen Agentenprozess zu verwenden. Wird das mit Stackdriver Trace unterstützt?