はじめに
いままでアプリの使用状況を分析する機能をApp Center Analyticsを用いて実現していました。
しかし、廃止されるとの通達が来ており、代替できるサービスがないか探していました。
そこで目をつけたのがAzure MonitorのApplication Insightsです。
Webアプリ専用かなと思っていましたが、非HTTPアプリケーションであっても利用でき、それが今までのApp Center Analyticsでの使用状況を分析するのと、同じような方法(実装)かつ機能としても同等のことが満たせそうでしたので調査しました。
App Center Analytics(変更前)
そもそも今までどうしていたかというと、dotnetで開発しているデスクトップアプリケーションに対して、アプリの任意の操作時に以下のようなイベントを通知して、その結果を収集していました。
Analytics.TrackEvent("イベントの名前", new Dictionary<string, string> {
{ "プロパティ名1", "プロパティ値1" },
{ "プロパティ名2", "プロパティ値2"}
});
参考となる記事
Application Insights(変更後)
デスクトップアプリケーションを対象にするような場合は、WorkerService
という非HTTPアプリケーション用のSDKがあります。
利用方法もApp Center AnalyticsのSecretの文字列指定がApplication Insightsの接続文字列指定に変わり、それを用いて初期化・起動する流れは変わらず、任意の操作時にTrackEventを呼ぶ部分がAnalyticsからTelemetryClientのTrackEventになるだけで置換できそうです。
収集されたログの確認についてはイベントで、App Center Analytics時と同じようなイベント名に対するカウント一覧を見ることができます。
ただ、各イベントのパラメータを使って収集された詳細なログはデフォルトでは表示されるビューがなさそうです。
そのため、クエリで取得して再現するかたちになりそうでした。
TrackEventで通知した情報はログのcustomEvents
に収集されています。
そこで、以下のようなクエリでイベントの各引数の値の一覧とそのカウントを表示してみました。
customEvents
| where name == "イベント名"
| extend properties = bag_keys(customDimensions)
| mv-expand properties
| project propertyName = tostring(properties), propertyValue = tostring(customDimensions[tostring(properties)])
| summarize propertyCount = count() by propertyName, propertyValue
| order by propertyName, propertyCount desc
引数1個だけのイメージですが、例えば以下のように表示されます。
// スケジュールを指定した際に何が指定されたか記録する
TelemetryClient.TrackEvent("スケジュール指定", new Dictionary<string, string> {
{ "ScheduleType", "Weekly" }
});
ログ画面だけだと毎回の分析が大変なので、ダッシュボードに各クエリの画面を集めれば、App Center Analytics時では1個1個イベント詳細を見に行かないと駄目でしたが、Application Insightsであれば一覧で各イベントの詳細を並べる・・・なんてこともできそうです。
おわり
代替できそうって話ばっかり書いていますが、無料で使えていたApp Center Analyticsに対して、Application Insightsはログのデータ量に対する従量課金制となるので、料金が発生します。
それを踏まえても乗り換えれると判断できれば代替手段になりそうですが、まだ自分も実際にアプリの利用者1人あたり一月でどの程度ログ記録するのか見積もれていないため検証段階です。