JavaアプリからノンコーディングでAzure Application Insightsにメトリックス情報などを送信する その2

はじめに

先日、以下のようなエントリーを投稿しました。

miyohide.hatenablog.com

このエントリーは上記のエントリーの続きでより詳細なことを検証します。

Spring Actuatorの設定でmanagement.endpoints.web.exposure.includeにmetricsを含めることは不要

Spring Actuatorの設定サンプルの記事ではよくmanagement.endpoints.web.exposure.includeに参照したいデータを指定する必要があるとよく書かれています。例えば、application.propertiesに以下のような記述をする例をよく見ます(本当は全オープンしてはだめ)。

management.endpoints.web.exposure.include=*

参考:

docs.spring.io

実際HTTPでアクセスするときには正しいのですが、今回のApplication Insights Java 3.0エージェントを使う場合には一切不要です。つまり、HTTPアクセスでメトリックスを取らない場合はapplication.propertiesにはmanagement.endpoints.web.exposure.includeの記述が不要となります。

メトリックスページで取得したメトリックスを参照する方法とより詳細なデータ参照の方法

Spring Actuatorで得られるメトリックスは、Application Insightsのメトリックスページにて「メトリック名前空間」から「ログベースのメトリック」を選択すると参照できるようになります。

f:id:miyohide:20200712162751p:plain

上記の例では「jvm_memory_used」を表示しようとしています。ただ、「jvm_memory_used」の値は実際には「heap」と「nonheap」の値の二種類存在し、また「heap」「nonheap」それぞれにおいて得られる情報も異なります。これをそれぞれ分割して表示するためには「フィルターの追加」と「分割を適用する」の2つの機能を利用します。具体的な作業方法については割愛しますが、うまく設定するとそれぞれ下図のように表示させることができます。

f:id:miyohide:20200712163848p:plain

ログをApplication Insightsに送信する

ログをApplication Insightsに送信することもノンコーディングで実現できます。以下のドキュメントにあるように既定ではWARNレベル以上のログが送信されるようです。

docs.microsoft.com

そのため、以下のような実装を行ってログの送信を試してみます。

package com.example.demo;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

@Controller
@RequestMapping(path="/users")
public class MainController {
    @Autowired
    private UserRepository userRepository;
    private static final Logger logger = LoggerFactory.getLogger(MainController.class);

    @PostMapping(path="/add")
    public @ResponseBody String addNewUser(@RequestParam String name, @RequestParam String email) {
        logger.warn("***** addNewUser start ******");
        User u = new User();
        u.setName(name);
        u.setEmail(email);
        userRepository.save(u);
        logger.warn("***** addNewUser end ******");
        return "Saved User data. name = [" + name + "], email = [" + email + "]";
    }
   // 省略
}

上記のControllerのメソッドが実行されるような処理を実行すると、ログがApplication Insightsのtracesテーブルにに送信されていることが確認できました。

f:id:miyohide:20200712164603p:plain

ソース

github.com