Google Cloud Runを使用したStackdriver Trace


8

私はGoogle Cloud RunのStackdriver Trace統合について詳しく説明しています。エージェントと連携させることはできますが、いくつか質問があります。

とすれば

  • Stackdriverエージェントは、トレースを小さなバッファに集約し、定期的に送信します。
  • Cloud Runサービスがリクエストを処理していない場合、CPUアクセスは制限されます。
  • Cloud Runサービスにはシャットダウンフックはありません。シャットダウンする前にバッファをクリアすることはできません。コンテナはSIGKILLを取得するだけです。これは、アプリケーションから取得できない信号です。
  • リクエストとレスポンスのサイクル外で情報を送信するバックグラウンドプロセスを実行すると、Knative Containerランタイムコントラクトに違反しているようです
  • ロギングデータのコレクションは文書化されており、エージェントを実行する必要はありませんが、テレメトリに対するそのようなソリューションはありません。
  • エージェントベースのアプローチを使用してCloud Runでトレースが失われたという報告1つ見つかりました

Googleの仕組み

Cloud Endpoints ESP(Cloud Run統合はベータ版)のソースコードを調べて、別の方法で解決するかどうかを確認しましたが、同じパターンが使用されています。トレース(1s)と定期的にクリアされます。

質問

トレース統合がテストセットアップで機能しているように見えますが、これを運用環境で実行すると、トレースが不完全で欠落していることが心配です。

  • これは架空の問題ですか、それとも本当の問題ですか?

  • これに取り組む正しい方法は、エージェントプロセスを使用する代わりに、テレメトリーをログに書き込むことです。Stackdriver Traceでサポートされていますか?


2
なんてよく書かれた質問!!! いいね!これありがとう。
コルバン

回答:


1

あなたが正しい。ほとんどのトレースライブラリはバックグラウンドでトレーススパンをサンプリング/アップロードする傾向があるため、これはかなりの懸念事項です。

(1)コンテナがリクエストを処理していない場合、CPUはほぼゼロにスケーリングされ、(2)非アクティブのためにいつでもコンテナインスタンスが強制終了される可能性があるため、アプリで収集されたトレーススパンを確実にアップロードすることはできません。おっしゃったように、CPUを完全に停止していないために動作することがありますが、常に動作するとは限りません。

一部のStackdriver(またはOpenTelemetry fka OpenCensus)ライブラリのように見えるので、トレーススパンをプッシュするライフサイクルを制御できます。

たとえば、OpenCensus Stackdriverエクスポーター用のこのGoパッケージFlush()には、ランタイムに依存して定期的にトレーススパンをアップロードするのではなく、リクエストを完了する前に呼び出すことができるメソッドがあります:https : //godoc.org/contrib.go.opencensus.io/ exporter / stackdriver#Exporter.Flush

他の言語の他のトレースライブラリも同様のFlush()メソッドを公開していると思います。そうでない場合は、コメントで教えてください。これは、これらのライブラリに対する有効な機能リクエストになります。


現在のnode.jsトレースエージェントライブラリには、フラッシュメソッドがありません:(
Daniel Goldberg

1
これは、GitHubリポジトリに対する有効な問題リクエストになると思います。また、Googleの従業員がこれをサポートしているものについて調査するための有効な使用例です。育ててくれてありがとう。
AhmetB-Google

2

これは架空の問題ですか、それとも本当の問題ですか?

Cloud Runサービスが単一のリクエストを受信することを検討する場合、コンテナーインスタンスのCPUがスロットルされる前にライブラリがデータをフラッシュする時間がないため、それは間違いなく問題です。

ただし、実際の使用例では:

  • Cloud Runサービスは、継続的または頻繁にリクエストを受信します。つまり、そのコンテナインスタンスは、継続的にCPUを使用するか、CPUを時々使用可能にするかのいずれかになります。
  • トレースを削除してもかまいません。インスタンスがダウンしているために一部のトレースが収集されない場合は、これが発生する前に、十分に多様なサンプルのセットを収集している可能性があります。また、集約されたレポートだけに関心がある場合もあります。その場合、個々のトレースを収集することは重要ではありません。

通常、トレースライブラリ自体がトレースするリクエストをサンプリングしますが、リクエストの100%をトレースすることはめったにありません。

これに取り組む正しい方法は、エージェントプロセスを使用する代わりに、テレメトリーをログに書き込むことです。Stackdriver Traceでサポートされていますか?

いいえ、Stackdriver TraceはAPIに送信されたスパンからデータを取得します。Stackdriver Traceにデータを送信するには、OpenCenssやOpenTelemetryなどのライブラリを使用できます。独自のStackdriver Traceライブラリは、推奨される方法ではありません。


1
この仮定は、バッチ/ cronジョブにCloud Runを使用するようなユースケース(たとえば、1日1回、または2時間ごとに1回)に当てはまると思います。1つのリクエストを受け取り、サンプリングレートを100%に設定しますが、リクエストが完了した後、1日1回のトレースデータを見逃す可能性が高くなります。
AhmetB-Google
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.