AzureにはApplication InsightsというAPMがあります。
Application Insights は Azure Monitor の機能であり、開発者や DevOps プロフェッショナル向けの拡張可能なアプリケーション パフォーマンス管理 (APM) サービスです。
Application Insightsを用いることでログの集約やエンドポイント毎の応答時間やエラー率、セッション数等を管理でき、以下のようなダッシュボードも構築できます。
Application Insightsは一般にはSDKを経由して利用する形式であり、JavaScriptにも対応しています。 これを利用すると、フロントエンドアプリで出力するログ、あるいは収集したいメトリクスをApplication Insightsで集中管理可能となります。 つまり、普通はブラウザに出力されるようなconsole.logをApplication Insightsに送信できるわけですね。
JavaScriptにApplication Insightsを組み込むためのサンプルコードを、Web ページ向けの Application Insightsから引用します。
import { ApplicationInsights } from '@microsoft/applicationinsights-web' const appInsights = new ApplicationInsights({ config: { instrumentationKey: 'YOUR_INSTRUMENTATION_KEY_GOES_HERE' /* ...Other Configuration Options... */ } }); appInsights.loadAppInsights(); appInsights.trackPageView(); // Manually call trackPageView to establish the current user/session/pageview
このように、組み込みにはinstrumentationKey
という、Application Insightsを作成したときに発行されるAPIKeyのようなものが必要になります。
JavaScriptでのフロントエンドアプリケーションに上記のようなコードが埋め込まれるということは、
第三者にinstrumentationKey
が漏出するということです。これは問題にならないのでしょうか?
多少リスクはある
Alternative way to protect your Application Insights Instrumentation Key”in JavaScriptに回答がありました。 回答者は、Microsoftのエンジニアです。
おおよそ読み取ったのは以下。
- JavaScriptに対するモニタリングサービスはいずれにせよ同種の問題を抱えている
- このキーが漏出した際、そのキーを使う第三者に可能なのは「書き込み」のみであり、(適切な設定をすれば)ログやメトリクスは参照できない。第三者に書き込まれたデータとそれ以外のデータを見分けられるようにする必要はある
もちろん、InstrumentationKey(IKey)が悪用された結果として大量のテレメトリがApplication Insightsに書き込まれ、課金額が大きくなるというのはあり得ます。 防止方法として、プロキシサーバを立て、プロキシサーバ側で何らかのアクセス制限を行った後でIKeyを付与しApplication Insightsに送るという方法が紹介されています。