Insightsで処理カウントを集計したいが想定外の値になってしまう

:white_question_mark: Question
とある処理を行った回数を集計したいため、『ログフィールドを追加』で追加した変数の値をInsights上で集計することで実現しようとしています。

試してみたのですが、想定していたのよりも大きな値になってしまいます。ワークフロー内である処理を行うことを1カウントとしています。とあるプロセスで、2カウントを想定してたのに、Insightsの表示上では20カウントとなってしまいました。想定通りのカウント値にするには、どのように対応すればよいですか?

:light_bulb: Answer

原因:

『ログフィールドを追加』でログフィールドに変数を追加すると、以降の『メッセージをログ』やそのほかのログメッセージで追加されたログフィールドと変数の値が出力されます。このことにより、重複されたカウントが出力されるため、集計すると実際のカウントよりも大きな値となってしまいます。

この事象が起きる実例を示します。

以下のワークフローでは、『ログフィールドを追加』で「処理カウント」を値「1」で登録しています。

上記を実行すると、『ログ フィールドを追加』アクティビティで追加した「追加したログフィールド」が、『メッセージをログ』アクティビティの「処理終了」メッセージにより「“ループカウント”:1」を出力しますが、ジョブの終了時に発生するログエントリーでも「“ループカウント”:1」が出力されてしまいます。

つまり、ログエントリーが出力されるたびに、追加されたフィールドはすべて出力される仕様です。

次がログの出力例:

上記の場合、「ループカウント」の値を集計すると合計が「2」となってしまいます。以降、出力されるログエントリーの分だけ「追加したログフィールド」の集計値も多くなってしまいます。

改善策:

手法1:
カウントが必要になる度に、『ログフィールドを追加』→『メッセージをログ』→『ログフィールドを削除』をします。このことにより、カウントの重複が発生しないようにします。

ご覧の通り、「“追加したログフィールド”:1」の出力が1回に留まるため、想定通りの集計値になります。

手法2:
まずは、カウントを取るための変数(例:int32型で “iCount” 等)を使用し、必要に応じて増分させてカウントを取ります。そして、最後に上記の手法1の方法でこのカウントの変数をログに出力させることでカウント値をInsightsに渡します。欠点としては、(処理例外等により)最後の個所まで処理されなかった場合はカウント値がInsightsに渡らないことです。

この場合、Insights上で取得される"45"が処理カウントとなります。