概要
Functions(関数アプリ)のApplicationInsightsログに、一部のログが出力されていないことがあるのはご存知ですか?
「一部のログが出力されない」なので、そのこと自体に気づいていない・・・なんていう場合は、アラート検知が正しく行われていない可能性もありえます。
システム運用に穴ができてしまわないように、当記事をきっかけにご自身の環境を確認してみてください。
一部のログが出力されない原因がなにかというと、ApplicationInsightsのサンプリング機能が有効になっているために発生している可能性が高い、というのが今回の内容です。
サンプリング機能
サンプリング機能は、通信量およびログ情報の容量(コスト)が抑えられる等のメリットがあるが、有効に設定されている場合、ログが全く同じようなログが存在したりする場合は ApplicationInsightsにてサンプリング(間引き)が行われる機能がデフォルトで動作しています。どういう場合に間引くかは、AzureApplicationInsights側のロジックで決まってます。
上記のことから、アプリケーションのApplicationInsightsのサンプリング機能が有効になっている場合は、すべてのログが出力されない可能性があります。
下記資料にサンプリング機能の説明があるので、見てみてください。
ApplicationInsightsにおけるサンプリング > 簡単な概要
docs.microsoft.com
サンプリング機能の無効化
サンプリング機能の無効化の方法ですが、host.jsonファイル内の"samplingSettings"に"isEnabled":falseを設定するとできます。
下記資料に、host.jsonファイルのサンプルがあります。
AzureFunctions2.x以降のhost.jsonのリファレンス > サンプルhost.jsonファイル
docs.microsoft.com
===== 無効化設定の例 =====
{
"logging": {
"applicationInsights": {
"samplingSettings": {
"isEnabled": false
}
}
}
}
===== 無効化設定の例 =====
公開情報2つ目
docs.microsoft.com
サンプリング機能の状態(有効/無効)の確認方法
host.jsonで有効/無効は指定できますが、ちゃんと反映されているか不安なときがあります。その場合は、このやり方でAzure上の設定状況を確認できます。
ApplicationInsightsにおけるサンプリング > サンプリングが動作しているかどうかを把握する
docs.microsoft.com
===== 抜粋 =====
いずれかの種類の RetainedPercentage が 100 未満である場合、その種類のテレメトリはサンプリングされています
===== 抜粋 =====
今まで説明したを試してもログがでない事象が解決されない場合は、事象発生日時・該当Functions名を記載してAzureサポートに問い合せをしましょう。
以上です。