451 Unavailable For Legal Reasons

とあるゲームエンジニアのブログです

Application Insightsで本番運用時に気を付けること

Application Insightsとは?

Microsoft Azureのアプリケーション監視サービスです。 azure.microsoft.com

本番運用で考慮すべき「データ速度」

azure.microsoft.com

月間クォータの他にも、データ速度でのスロットルの上限もあります。上限は、Free 価格レベルでは、5 分間の平均が 1 秒あたり 200 データ ポイント、有料レベルでは、1 分間の平均が 1 秒あたり 500 データ ポイントになります。

とあるゲームアプリをApplication Insightsで監視しているのですが、初期にデフォルト設定で本番投入したらスロットルが発動し続けました。

こんなメッセージがAzureポータルに表示され続けます。 f:id:master-0717:20160223125946p:plain

スロットルが発動するということは不要にデータ送信していることになっていてネットワーク帯域がもったいないし、ポータルにすごい頻度でメッセージが表示され続けるのは辛いです。

そこで「Application Insights の価格とクォータの管理」に記載されている下記の2つを実施したところ、スロットルが発動しなくなりました。

記載内容
  • サンプリングの使用。このテクノロジは、メトリックや、検索で関連するアイテム間を移動する機能を損なうことなく、データ レートを削減します。
  • ApplicationInsights.config を編集し、不要なコレクション モジュールを無効にします。たとえば、パフォーマンス カウンターや依存関係のデータが重要ではないと判断した場合などに検討します。
具体的には
  • TelemetryModulesは下記の2つのみに

    • RequestTrackingTelemetryModule
    • ExceptionTrackingTelemetryModule
  • RequestTelemetryによるサンプリングを全リクエストの1%に

本番で設定しているアラート

現状、下記の3項目です。

  • 直近5分以内にレスポンスタイムが3秒以上
  • 直近5分以内にExceptionが30回以上
  • 2つのロケーションからの可用性テスト失敗

f:id:master-0717:20160223130802p:plain

Application InsightsにはProactive Detectionという、機械学習およびデータ マイニングのアルゴリズムを使用して異常パターンを検出してくれるサービスがあるので、レスポンスタイムやException数ぐらいなら監視項目設定の必要が無いかもしれません。

blog.shibayan.jp

Azure App Serviceと組み合わせて使う場合はInstrumentationKeyをWeb.configへ

Azure App ServiceはappSettingsをスロット毎に上書きできるので、InstrumentationKeyをWeb.configへ定義してApplication_Startで設定しておくと便利です。

azure.microsoft.com

protected void Application_Start()
{
  Microsoft.ApplicationInsights.Extensibility.
    TelemetryConfiguration.Active.InstrumentationKey = 
      // - for example -
      WebConfigurationManager.Settings["ikey"];
  //...
まとめ

Application Insights便利ですが、データ送信量を間引くのはconfigファイルやTelemetryConfigurationクラスのプロパティへの設定で簡単に出来てほしいところ。DependencyCollectorなんかも間引ければ本番で使用したいです。