4
1

はじめに

Azureでシステム開発を請け負うことになりそうなのだが、
とっても高価な運用管理システムを使うのはコスト的に見合わないプロジェクトって、監視とかどうするんだっけな?と思って調べ始めたのがきっかけで、「Applicaiton Insights」というものにたどり着きました。

当初は、Spring BootアプリのLoggerからデータを飛ばせたらなと思いつつ、調査を始めたのですが、
この「Applicaiton Insights」を使えば、各種アプリのメトリクスも取得できそうなので、合わせてやってみようと思います。

最終的には、よくあるアプリの監視で、一定レベル以上のログが出力されたら、メールを生成して何か起こっているよと伝えることを目標とします。脱運用管理システムです。

Azure Monitor

統合モニタリングサービスです。このサービスを使用することで、Azureリソースのパフォーマンス、可用性、セキュリティをリアルタイムで監視することができます。

Application Insights

Azure上で動作するアプリの、パフォーマンスモニタリングを行うためのサービスです。

やってみる

Azure Insightsの設定

Insightsを起動する

まずは、管理コンソールのAzureサービスから、以下を探して選択してください。
image.png

作成する

左上にある、「作成」を選択
image.png

必要な項目を入力し、作成を進める。
image.png

デプロイが完了したら、以下の概要ページを表示する。「接続文字列」をあとで使うので、コピーして保存しておく
image.png

Spring Bootアプリの設定

Application Insights Javaというライブラリを使います。ダウンロードはこちら

Spring Bootを起動する際の、JVM引数に以下のような指定をすることで、「Application Insights Java」を有効にすることができます。

java -javaagent:"path/to/applicationinsights-agent-3.5.3.jar" -jar <myapp.jar>

さらに、applicationinsights-agent-3.5.3.jarと、同じフォルダに、「applicationinsights.json」というファイルを作成し、そこに設定値を記載します。「connectionString」には、Insightの概要ページで保存した、「接続文字列」を張り付けてください。

applicationinsights.json
{
  "connectionString": "InstrumentationKey=xxx;IngestionEndpoint=https://japaneast-1.in.applicationinsights.azure.com/;LiveEndpoint=https://japaneast.livediagnostics.monitor.azure.com/;ApplicationId=xxxxxx-xxxx-xxx-xxxx-xxxx",
  "role": {
    "name": "my cloud role name"
  }
}

サンプルソース

ここまでできたら、あとは、Loggerで、ログを出力するだけ

public class IndexController {

    private static final Logger logger = LoggerFactory.getLogger(IndexController.class);

    @GetMapping("/")
    public String index(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {

        logger.error("This is Error log。これは、エラーメッセージです。");

        return "Hello world!";
    }
}

試してみる

この状態で、Spring Bootを起動し、http://localhost:8080/にアクセスすると、
Insights 側に、ログなどいろいろと出力されます。

image.png

Alertの設定

さて、ここまでできたら、あとはこのログを監視して、特定の条件に一致したらメールを飛ばすというのをやってみます。

Monitorの起動

Azureサービスから、「Monitor」を選んでください。
image.png

アクショングループの作成

メニューから「アラート」を選択し、「アクショングループ」を作成します。
image.png

必要な項目を入力し、「次へ」
image.png

通知の方法や、メールアドレスなどを設定し、次へ(以降は設定しなくてよいので、そのまま作成まで進めてOK)
image.png

アラートルールの作成

メニューから「アラート」を選択し、「アラートルール」を作成します。
image.png

スコープを設定します。以下の画面から「範囲の選択」を選び、対象となるInsightsを選択し、適用したのち次へ

image.png

次に条件を設定します。
image.png

検索クエリは以下の通り、エラーレベルが3(Error)以上が出力された場合に動作するようにします。

traces
| where severityLevel >= 3 // 3はエラーレベル
| order by timestamp desc

次にアクションを設定。
前段で作ったアクショングループと紐づけを実施します。

image.png

詳細では、ルール名と、ルールの説明を設定して、完了。あとは作成まで進めてOK
image.png

実行してみた結果

さて、ここまでやったら、もう一度、http://localhost:8080/にアクセスします。
しばらく放置すると、設定したメールアドレス宛に、アラートメールが送信されます。
※5分間隔なので、ちょっと待ちましょう。

こんな感じのメールを受信しました。
image.png

最後に

調べ始めてから、検証できるまで大体3時間程度。
ログの監視以外にも、レスポンスの時間などのメトリクスも取得できるし、結構いいかなと思いました。

ただAzure内部で実行しても、おそらくHTTP(HTTPS)経由でInsightsを呼ぶ気がします。なので性能面とかは若干気になりました(実際には検証してみないと何とも)

とはいえ、高価な運用管理システムを使わずにアプリのログまで監視できるというのは、小さなシステムで始めたい層にとっては意味があるかなと感じました。

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1