私は、ロギングの問題のために、最良の、またはより良い設計上の決定を探しています。 私はバックエンドサービスのためにクラスタでAkkaアクターを使用しており、HTTPリクエストを受け入れるにはフロントエンドでPlayしています。 私の質問は、最初のUUIDを生成してコンテキストに入れることによって、アプリケーションログ全体を同じHTTPリクエストに識別させるという古い質問から拡張されました。同じ「要求」のアクターログをグループ化/識別する
我々のデータの流れの一例は次のようになります。
"HTTPリクエスト/システムA" - > "Actor1 /クラスタB" - > "ACTOR2 /クラスタC" - >「システムAと完全に返信します要求」
これは、プロセスに少なくとも3つの別々のシステムが含まれていることを意味します。 私のすべてのログはLogstashに送られます。 システムAからの要求の開始からUUIDを生成することができます。 しかし、すべてのサブシステムにUUIDを/ piggy-backedで渡すことができます。これらはすべて、Protobufシリアル化を使用して通信し、ジョブを処理します同じhttp要求に属しています。
私はすべてのメッセージにidフィールドを追加することができますが、これは非常に醜いです。
ビジネスロジックの処理にあまりノイズをかけることなく、他のすべての呼び出し元のAkkaシステムに情報を伝達するためのよりよい方法があるかどうかは疑問です。
case class MessageWithUuid(message: Any, uuid: UUID)
その後、中にあなたのreceive
あなたがそれをアンラップし、ロギング用uuid
維持する必要があります:
私が知っているのは "醜い"オプションだけです。 – Rumoku
あなたは、httprequestに基づいて決定的なID生成を行うことができます。このようにすれば、すべてのシステムは単にログするときに同じIDを生成しますか? – C4stor
@ C4storどうすればいいのかよく分かりません。実際には、システムAのエントリポイントを除いて、他のすべてのアクターシステムはprotobufシリアライゼーションを使用して受信します。私はそれについてはっきりしていなかったと思います。 – lunaspeed