前提
Sentryを使用してエラー情報を検知しているアプリケーションであること。
使用言語、フレームワーク
- Java 8
- Spring Boot(Maven)
概要
Sentryに送信されるエラー情報がいつのバージョンのアプリケーションで発生したエラーのものであるか確認できるようにしたい。
メリット
- 発生したエラーのアプリケーションのバージョンの特定が一目でわかる。
- Sentryの画面で特定のバージョンで発生したエラーの一覧を以下のように検索することができるようになる。
![]() |
---|
前提条件
- アプリケーションのバージョンが定義されていること。
- リリースの度にバージョンが更新されていること。
以下の定義ファイルの <version>
内をSentryに送信します。
今回は、バージョン情報をSentryにタグとして送信します。
定義ファイル
<?xml version="1.0" encoding="UTF-8"?>
<project xmls="~">
:
<groupId>com.example</groupId>
<artifactId>myproject</artifactId>
<version>100.0.100</version>
:
</project>
修正手順
以下の順番で修正を行います。
- 依存関係の追加
- エンドポイントの追加
- エンドポイントに表示する情報の追加
- Sentryへの送信処理の追加
1. 依存関係の追加
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
2. エンドポイントの追加
management:
endpoints:
web:
exposure:
include: "info"
base-path: "/"
base-pathは環境に応じて変更してください。
3. エンドポイントに表示する情報の追加
info:
application:
version: @project.version@
ここまで設定すると http://localhost:8080/info
にアクセスすることで以下のようにここまでの手順で設定したバージョン情報を確認することができます。
{"application":{"version":"100.0.100"}}
4. Sentryへの送信処理の追加
設定ファイル:@SpringBootApplicationアノテーションを設定しているクラスに以下の処理を追加します。
※ すでにSentryへの送信処理を実装している場合は、version
関連の処理を追加してください。
(引数の追加とtagの送信部分です。)
※ 戻り値の型は
@Bean
public HandlerExceptionResolver sentryExceptionResolver(
@Value("${sentry.url:#{null}}") Optional<String> sentryUrl,
@Value("${info.application.version:#{null}}") Optional<String> appVersion) {
if (sentryUrl.isPresent()) {
try {
SentryClient sentryClient = Sentry.init(sentryUrl.get());
// ここで、タグとしてバージョン情報を追加しています。
appVersion.ifPresent(s -> sentryClient.addTag("version", s));
} catch (InvalidDsnException e) {
LOGGER.warn(e.getMessage(), e);
}
}
return new SentryExceptionResolverImpl();
}
※ sentry.url
も info.application.version
と同様に application.yml
に定義しています。
設定後
上記設定を完了後、アプリケーション内でエラーが発生した場合、以下のような version
のタグが表示されるようになります。
versionの数値部分をクリックすることで、冒頭でメリットとして挙げた検索結果を確認できます。
![]() |
---|