なんかいろいろと書いてくブログ

関東のどこかで働く、一般人

Application Insightsについて調べました。

はじめに

Azureのアプリケーション監視ツールである「Application Insights」。 この導入で躓いたので、勉強をを兼ねてその仕組み等々を書いていきたいと思います。

執筆経緯

業務でAzure Functionの開発をしていましたが、 ローカルで動くものが、Azure上ではうんともすんとも言わない。

しかも、リモートデバックでAzure上での動きを見ようにも通信が不安定ですぐに切れる。 エラーログも取得方法がわからず…

そうこう調べているうちに辿り着いたのが件のApplication Insightsでした。 実行可否のモニタリングができると聞き、 試行錯誤しながらApplication Insightsを有効に成功! しかし、何度試してみてもモニタリングできず…

さらに深く調べてみるとIFunctionInvoker.InvokeAsync Methodで、
Parameterが設定できないのが原因のようでした。

最終的には上司に助言いただき、導入できるようにはなったが
ここで理解を深めておかないと禍根を残すと思い、記事をかくことにしました。

Application Insights


公式ドキュメント

概要

簡単にいえば、アプリケーションのパフォーマンスの監視機能である。 アプリケーションにSDKをインストールすることにより、 Azureで、モニタリングが可能になる。 (ちなみに、自分はこの部分に問題があったため動かなかった) なお、公式ドキュメントでは

アプリケーションおよびそのコンポーネントの実行場所は問いません。 Azure でホストされている必要はありません。

と記載されていることから、アプリケーションがAzure上にある必要はないらしい。

モニタリングできること

以下、引用

  • 要求レート、応答時間、およびエラー率
  • 依存率、応答時間、およびエラー率
  • 例外
  • Web ページからの AJAX 呼び出し
  • ユーザー数とセッション数
  • Windows または Linux サーバー コンピューターの CPU、メモリ、ネットワーク使用率などのパフォーマンス カウンター。
  • Docker または Azure のホスト診断
  • アプリの診断トレース ログ
  • 販売された品目や勝利したゲームなどのビジネス イベントを追跡するためにクライアントまたはサーバーのコード内に書き込んだカスタム イベントとメトリック。

今回、自分が収集したかったのは例外で アプリケーションないでchathしたExceptionを確認したかった。

モニタリングの確認方法

Azureには確認方法が用途に合わせて複数存在する。 ので、収取したいデータや、運用に合わせてどうやって確認するかを選択すれば良い。 以下に公式ドキュメントに記載されている物をいくつか紹介する。


自動通知

監視しているアプリケーション内で以下のような以上が発生した際に 電子メールで任意の宛先に送信することができる。

定常的なパフォーマンスの監視にはスマート検出が役に立つだろう。 ※規定で有効になっており、初期ではサブスクリプションの監視権限を持つ人と、
 その共同作業者に通知されるように設定されるらしい。

  • 障害発生率(リクエストの失敗等)の以上な増加
  • パフォーマンスの異常な低下
  • その他、メモリリークや例外発生の異常な増加etc...

Application Insightsは機械学習を利用して、想定される障害の発生率を計算しており、 この発生率を著しく上回った場合にメールとして自動的に通知するらしい。

因みに、このアラートルールはユーザが独自に設定できる。 "Home>アプリケーションのApplication insights>アラート(サイドバー)" で、設定画面に遷移する。


障害の診断

Application Insightsには障害を記録し、いつの時点でどのような障害が発生したかを確認することができる機能が実装されている(これが確認したかった!) 調査>失敗 で確認できます。
確認できるのは発生した例外、失敗したリクエスト、依存関係が確認でき、 ローカルで動くがAzure上で動かない時や、 運用しているアプリの障害発生時にはお世話になることだろう。

ただし、この失敗の中身をみるには、コードをアプリ上に記載する必要がある。 (ここが躓いたポイントなので、早いうちに記事としてまとめたい)

終わりに

今回は、執筆する体力が尽きたので確認方法について 2種類しか紹介できなかったが、実際はもっと多くの機能が実装されているため、
もっと便利かつ精緻なモニタリングも可能なのだろう。

今後もAzureにはお世話になるので、 もっと触った機能、学んだことは都度紹介していきたい。