2

Azure の関数アプリのすべての呼び出し (成功したかどうかに関係なく)からの情報をログに記録する必要があります。最初に log.LogInformation() を使用してみましたが、すべての関数呼び出しからメッセージが書き込まれているわけではないことがわかりました。いくつかの調査を行うと、高負荷のシナリオ (私の場合は高負荷のシナリオ) では、ランタイムが成功した呼び出しの一部をログに記録しない場合があることがわかりました。けっこうだ。

次に、カスタム イベントを使用してログを記録し、必要な情報を取得しようとしました。

                    TelemetryConfiguration config = TelemetryConfiguration.CreateDefault();
                    TelemetryClient tc = new TelemetryClient(config);
                    Dictionary<string, string> props = new Dictionary<string, string>();
                    props["msgid"] = msgid;
                    tc.TrackEvent("MsgToBenefitsService", props);

それでもうまくいきません。私が行ったいくつかの実行では、1000 回の呼び出しからのアプリ インサイトで 82 行しか表示されませんでした。カスタム イベントがログに記録されない可能性があることを示すドキュメントを見つけることができなかったので、1000 回の呼び出しに対して 1000 個のイベントがログに記録されることを期待していました。

上記のロギング コードに問題はありますか? また、呼び出しから AppInsights に情報を書き込めることを保証するオプションはありますか? それとも、関数アプリから自分自身を明示的にログに記録する必要があるのでしょうか?

背景として、この関数アプリには、トピックからメッセージを読み取るサービス バス トリガーがあります。ランタイムの v3 を使用しています。

どんな助けでも大歓迎です。

ありがとう。

4

1 に答える 1

1

host.jsonでサンプリングを無効にしてください:

"applicationInsights": {
  "samplingSettings": {
    "isEnabled": false
  }
}

Application Insights でのapplicationInsights.samplingSettingsサンプリング

于 2021-01-09T18:29:35.130 に答える