Application Insightsとは?
Microsoft Azureのアプリケーション監視サービスです。 azure.microsoft.com
本番運用で考慮すべき「データ速度」
月間クォータの他にも、データ速度でのスロットルの上限もあります。上限は、Free 価格レベルでは、5 分間の平均が 1 秒あたり 200 データ ポイント、有料レベルでは、1 分間の平均が 1 秒あたり 500 データ ポイントになります。
とあるゲームアプリをApplication Insightsで監視しているのですが、初期にデフォルト設定で本番投入したらスロットルが発動し続けました。
こんなメッセージがAzureポータルに表示され続けます。
スロットルが発動するということは不要にデータ送信していることになっていてネットワーク帯域がもったいないし、ポータルにすごい頻度でメッセージが表示され続けるのは辛いです。
そこで「Application Insights の価格とクォータの管理」に記載されている下記の2つを実施したところ、スロットルが発動しなくなりました。
記載内容
- サンプリングの使用。このテクノロジは、メトリックや、検索で関連するアイテム間を移動する機能を損なうことなく、データ レートを削減します。
- ApplicationInsights.config を編集し、不要なコレクション モジュールを無効にします。たとえば、パフォーマンス カウンターや依存関係のデータが重要ではないと判断した場合などに検討します。
具体的には
TelemetryModulesは下記の2つのみに
- RequestTrackingTelemetryModule
- ExceptionTrackingTelemetryModule
RequestTelemetryによるサンプリングを全リクエストの1%に
本番で設定しているアラート
現状、下記の3項目です。
- 直近5分以内にレスポンスタイムが3秒以上
- 直近5分以内にExceptionが30回以上
- 2つのロケーションからの可用性テスト失敗
Application InsightsにはProactive Detectionという、機械学習およびデータ マイニングのアルゴリズムを使用して異常パターンを検出してくれるサービスがあるので、レスポンスタイムやException数ぐらいなら監視項目設定の必要が無いかもしれません。
Azure App Serviceと組み合わせて使う場合はInstrumentationKeyをWeb.configへ
Azure App ServiceはappSettingsをスロット毎に上書きできるので、InstrumentationKeyをWeb.configへ定義してApplication_Startで設定しておくと便利です。
protected void Application_Start() { Microsoft.ApplicationInsights.Extensibility. TelemetryConfiguration.Active.InstrumentationKey = // - for example - WebConfigurationManager.Settings["ikey"]; //...
まとめ
Application Insights便利ですが、データ送信量を間引くのはconfigファイルやTelemetryConfigurationクラスのプロパティへの設定で簡単に出来てほしいところ。DependencyCollectorなんかも間引ければ本番で使用したいです。