はじめに
先日、以下のようなエントリーを投稿しました。
このエントリーは上記のエントリーの続きでより詳細なことを検証します。
Spring Actuatorの設定でmanagement.endpoints.web.exposure.includeにmetricsを含めることは不要
Spring Actuatorの設定サンプルの記事ではよくmanagement.endpoints.web.exposure.include
に参照したいデータを指定する必要があるとよく書かれています。例えば、application.properties
に以下のような記述をする例をよく見ます(本当は全オープンしてはだめ)。
management.endpoints.web.exposure.include=*
参考:
実際HTTPでアクセスするときには正しいのですが、今回のApplication Insights Java 3.0エージェントを使う場合には一切不要です。つまり、HTTPアクセスでメトリックスを取らない場合はapplication.properties
にはmanagement.endpoints.web.exposure.include
の記述が不要となります。
メトリックスページで取得したメトリックスを参照する方法とより詳細なデータ参照の方法
Spring Actuatorで得られるメトリックスは、Application Insightsのメトリックスページにて「メトリック名前空間」から「ログベースのメトリック」を選択すると参照できるようになります。
上記の例では「jvm_memory_used」を表示しようとしています。ただ、「jvm_memory_used」の値は実際には「heap」と「nonheap」の値の二種類存在し、また「heap」「nonheap」それぞれにおいて得られる情報も異なります。これをそれぞれ分割して表示するためには「フィルターの追加」と「分割を適用する」の2つの機能を利用します。具体的な作業方法については割愛しますが、うまく設定するとそれぞれ下図のように表示させることができます。
ログをApplication Insightsに送信する
ログをApplication Insightsに送信することもノンコーディングで実現できます。以下のドキュメントにあるように既定ではWARN
レベル以上のログが送信されるようです。
そのため、以下のような実装を行ってログの送信を試してみます。
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
テーブルにに送信されていることが確認できました。