From 4068212f9bb2102dd844b98b6efec92cb7f4d835 Mon Sep 17 00:00:00 2001 From: leehaneum Date: Sun, 15 Feb 2026 12:32:20 +0900 Subject: [PATCH 1/9] chore: add Sentry integration dependency --- gradle/libs.versions.toml | 1 + pida-supports/monitoring/build.gradle.kts | 1 + pida-supports/monitoring/src/main/resources/monitoring.yml | 7 ++++++- 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 04fc4c0..7caf500 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -184,6 +184,7 @@ epages_restdocs_api_spec_restassured = { module = "com.epages:restdocs-api-spec- # Monitoring & Logging Libraries micrometer_tracing_bridge_brave = { module = "io.micrometer:micrometer-tracing-bridge-brave" } micrometer_registry_prometheus = { module = "io.micrometer:micrometer-registry-prometheus" } +sentry_spring_boot_starter_jakarta = { module = "io.sentry:sentry-spring-boot-starter-jakarta", version.ref = "sentry" } slf4j = { module = "org.slf4j:slf4j-api", version = "2.0.9" } # AWS Libraries diff --git a/pida-supports/monitoring/build.gradle.kts b/pida-supports/monitoring/build.gradle.kts index 3a62eb8..1d4c5ba 100644 --- a/pida-supports/monitoring/build.gradle.kts +++ b/pida-supports/monitoring/build.gradle.kts @@ -1,4 +1,5 @@ dependencies { implementation(libs.spring.boot.starter.actuator) implementation(libs.micrometer.registry.prometheus) + implementation(libs.sentry.spring.boot.starter.jakarta) } diff --git a/pida-supports/monitoring/src/main/resources/monitoring.yml b/pida-supports/monitoring/src/main/resources/monitoring.yml index 4c6e2f0..75acef2 100644 --- a/pida-supports/monitoring/src/main/resources/monitoring.yml +++ b/pida-supports/monitoring/src/main/resources/monitoring.yml @@ -5,4 +5,9 @@ management: include: health, prometheus health: defaults: - enabled: false \ No newline at end of file + enabled: false + +sentry: + dsn: ${SENTRY_DSN} + traces-sample-rate: 1.0 + environment: ${SPRING_PROFILES_ACTIVE:local} \ No newline at end of file From 6ce4e289e3027f40bb23af635afabd617995ed87 Mon Sep 17 00:00:00 2001 From: leehaneum Date: Sun, 15 Feb 2026 16:48:35 +0900 Subject: [PATCH 2/9] chore: configure Sentry integration in build files --- build.gradle.kts | 1 + gradle/libs.versions.toml | 4 ++++ pida-core/core-api/build.gradle.kts | 11 +++++++++++ 3 files changed, 16 insertions(+) diff --git a/build.gradle.kts b/build.gradle.kts index 7f16e9c..bd05ee3 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -13,6 +13,7 @@ plugins { alias(libs.plugins.asciidoctor.convert) apply false alias(libs.plugins.epages.restdocs.api.spec) apply false alias(libs.plugins.hidetake.swagger.generator) apply false + alias(libs.plugins.sentry.jvm.gradle) apply false } allprojects { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 7caf500..e41592a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -38,6 +38,7 @@ swaggerVersion = "2.8.5" # Sentry version sentry = "7.3.0" +sentry_gradle = "6.0.0" # AWS version aws = "2.40.13" @@ -79,6 +80,9 @@ ktlint = { id = "org.jlleitschuh.gradle.ktlint", version.ref = "ktlint" } spring_boot = { id = "org.springframework.boot", version.ref = "spring_boot" } spring_dependency_management = { id = "io.spring.dependency-management", version.ref = "spring_dependency_management" } +# Sentry Plugin +sentry_jvm_gradle = { id = "io.sentry.jvm.gradle", version.ref = "sentry_gradle" } + # Api-Docs Plugins asciidoctor_convert = { id = "org.asciidoctor.jvm.convert", version.ref = "asciidoctor_convert" } epages_restdocs_api_spec = { id = "com.epages.restdocs-api-spec", version.ref = "epages_restdocs_api_spec" } diff --git a/pida-core/core-api/build.gradle.kts b/pida-core/core-api/build.gradle.kts index e6a21c5..90f0332 100644 --- a/pida-core/core-api/build.gradle.kts +++ b/pida-core/core-api/build.gradle.kts @@ -1,3 +1,14 @@ +plugins { + id("io.sentry.jvm.gradle") +} + +sentry { + includeSourceContext.set(true) + org.set("pida-za") + projectName.set("java-spring-boot") + authToken.set(System.getenv("SENTRY_AUTH_TOKEN")) +} + tasks.getByName("bootJar") { enabled = true } From aead9ca7803a1d5ff3f8a7be813e7ea874d2bd3c Mon Sep 17 00:00:00 2001 From: leehaneum Date: Sun, 15 Feb 2026 17:12:26 +0900 Subject: [PATCH 3/9] chore: update Sentry integration and configuration in Dockerfiles --- docker/DockerfileDev | 11 +++++++++-- docker/DockerfileProd | 9 +++++++-- gradle/libs.versions.toml | 2 +- pida-core/core-api/build.gradle.kts | 6 ++++-- .../monitoring/src/main/resources/monitoring.yml | 3 ++- 5 files changed, 23 insertions(+), 8 deletions(-) diff --git a/docker/DockerfileDev b/docker/DockerfileDev index 2918072..ea46724 100644 --- a/docker/DockerfileDev +++ b/docker/DockerfileDev @@ -1,9 +1,16 @@ +FROM alpine:latest AS agent-downloader +RUN wget -O /sentry-opentelemetry-agent.jar https://get.sentry.io/sentry-opentelemetry-agent.jar + FROM amazoncorretto:21 ENV TZ="Asia/Seoul" -RUN mkdir -p /service/pida +RUN mkdir -p /service/pida /opt/sentry +COPY --from=agent-downloader /sentry-opentelemetry-agent.jar /opt/sentry/agent.jar COPY pida-core/core-api/build/libs/core-api-0.0.1.jar /service/pida/core-api-0.0.1.jar EXPOSE 8080 -CMD java -jar -Xmx2048m /service/pida/core-api-0.0.1.jar +CMD java \ + -javaagent:/opt/sentry/agent.jar \ + -Dsentry.auto.init=false \ + -jar -Xmx2048m /service/pida/core-api-0.0.1.jar diff --git a/docker/DockerfileProd b/docker/DockerfileProd index 1b4301e..4b5cd08 100644 --- a/docker/DockerfileProd +++ b/docker/DockerfileProd @@ -1,15 +1,20 @@ +FROM alpine:latest AS agent-downloader +RUN wget -O /sentry-opentelemetry-agent.jar https://get.sentry.io/sentry-opentelemetry-agent.jar + FROM amazoncorretto:21 ENV TZ="Asia/Seoul" ARG PROFILE ENV PROFILE=${PROFILE} -RUN mkdir -p /service/pida - +RUN mkdir -p /service/pida /opt/sentry +COPY --from=agent-downloader /sentry-opentelemetry-agent.jar /opt/sentry/agent.jar COPY pida-core/core-api/build/libs/core-api-0.0.1.jar /service/pida/core-api-0.0.1.jar EXPOSE 8080 CMD java \ + -javaagent:/opt/sentry/agent.jar \ + -Dsentry.auto.init=false \ -Dspring.profiles.active=${PROFILE} \ -jar /service/pida/core-api-0.0.1.jar diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index e41592a..726e0df 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -37,7 +37,7 @@ hidetake_swagger_generator = "2.18.2" swaggerVersion = "2.8.5" # Sentry version -sentry = "7.3.0" +sentry = "8.31.0" sentry_gradle = "6.0.0" # AWS version diff --git a/pida-core/core-api/build.gradle.kts b/pida-core/core-api/build.gradle.kts index 90f0332..737bb3e 100644 --- a/pida-core/core-api/build.gradle.kts +++ b/pida-core/core-api/build.gradle.kts @@ -2,10 +2,12 @@ plugins { id("io.sentry.jvm.gradle") } +val hasSentryToken = System.getenv("SENTRY_AUTH_TOKEN") != null + sentry { - includeSourceContext.set(true) + includeSourceContext.set(hasSentryToken) org.set("pida-za") - projectName.set("java-spring-boot") + projectName.set("pida") authToken.set(System.getenv("SENTRY_AUTH_TOKEN")) } diff --git a/pida-supports/monitoring/src/main/resources/monitoring.yml b/pida-supports/monitoring/src/main/resources/monitoring.yml index 75acef2..31a54df 100644 --- a/pida-supports/monitoring/src/main/resources/monitoring.yml +++ b/pida-supports/monitoring/src/main/resources/monitoring.yml @@ -10,4 +10,5 @@ management: sentry: dsn: ${SENTRY_DSN} traces-sample-rate: 1.0 - environment: ${SPRING_PROFILES_ACTIVE:local} \ No newline at end of file + environment: ${SPRING_PROFILES_ACTIVE:local} + send-default-pii: true From 74bd2d9c13a76fac2d36be9a283af2e8a9a37b6a Mon Sep 17 00:00:00 2001 From: leehaneum Date: Sun, 15 Feb 2026 17:13:28 +0900 Subject: [PATCH 4/9] chore: update monitoring configuration for error logging and exception resolution --- pida-supports/monitoring/src/main/resources/monitoring.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pida-supports/monitoring/src/main/resources/monitoring.yml b/pida-supports/monitoring/src/main/resources/monitoring.yml index 31a54df..9fd1ff2 100644 --- a/pida-supports/monitoring/src/main/resources/monitoring.yml +++ b/pida-supports/monitoring/src/main/resources/monitoring.yml @@ -12,3 +12,7 @@ sentry: traces-sample-rate: 1.0 environment: ${SPRING_PROFILES_ACTIVE:local} send-default-pii: true + exception-resolver-order: -2147483648 + logging: + minimum-event-level: error + minimum-breadcrumb-level: info From 6ea7c873c14aa5f7857a3f6b2c373a69d0559ddf Mon Sep 17 00:00:00 2001 From: leehaneum Date: Sun, 15 Feb 2026 17:22:29 +0900 Subject: [PATCH 5/9] chore: add Sentry OpenTelemetry agent configuration in local --- gradle/libs.versions.toml | 1 + pida-core/core-api/build.gradle.kts | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 726e0df..3c0cb92 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -189,6 +189,7 @@ epages_restdocs_api_spec_restassured = { module = "com.epages:restdocs-api-spec- micrometer_tracing_bridge_brave = { module = "io.micrometer:micrometer-tracing-bridge-brave" } micrometer_registry_prometheus = { module = "io.micrometer:micrometer-registry-prometheus" } sentry_spring_boot_starter_jakarta = { module = "io.sentry:sentry-spring-boot-starter-jakarta", version.ref = "sentry" } +sentry_opentelemetry_agent = { module = "io.sentry:sentry-opentelemetry-agent", version.ref = "sentry" } slf4j = { module = "org.slf4j:slf4j-api", version = "2.0.9" } # AWS Libraries diff --git a/pida-core/core-api/build.gradle.kts b/pida-core/core-api/build.gradle.kts index 737bb3e..c493761 100644 --- a/pida-core/core-api/build.gradle.kts +++ b/pida-core/core-api/build.gradle.kts @@ -11,6 +11,8 @@ sentry { authToken.set(System.getenv("SENTRY_AUTH_TOKEN")) } +val sentryAgent: Configuration by configurations.creating + tasks.getByName("bootJar") { enabled = true } @@ -19,7 +21,18 @@ tasks.getByName("jar") { enabled = false } +tasks.register("copySentryAgent") { + from(sentryAgent) + into(layout.buildDirectory.dir("agent")) + rename { "sentry-opentelemetry-agent.jar" } +} + +tasks.named("build") { + dependsOn("copySentryAgent") +} + dependencies { + sentryAgent(libs.sentry.opentelemetry.agent) implementation(libs.spring.boot.starter.web) implementation(libs.spring.boot.starter.aop) implementation(libs.spring.boot.starter.validation) From 7d46d85c8eb253c04addac25c836c0e42b2acc4e Mon Sep 17 00:00:00 2001 From: leehaneum Date: Sun, 15 Feb 2026 17:35:31 +0900 Subject: [PATCH 6/9] chore: add Sentry fingerprint callback for custom error handling --- pida-supports/monitoring/build.gradle.kts | 1 + .../sentry/SentryFingerprintCallback.kt | 44 +++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 pida-supports/monitoring/src/main/kotlin/com/pida/monitoring/sentry/SentryFingerprintCallback.kt diff --git a/pida-supports/monitoring/build.gradle.kts b/pida-supports/monitoring/build.gradle.kts index 1d4c5ba..b7b0142 100644 --- a/pida-supports/monitoring/build.gradle.kts +++ b/pida-supports/monitoring/build.gradle.kts @@ -2,4 +2,5 @@ dependencies { implementation(libs.spring.boot.starter.actuator) implementation(libs.micrometer.registry.prometheus) implementation(libs.sentry.spring.boot.starter.jakarta) + implementation(project(":pida-core:core-domain")) } diff --git a/pida-supports/monitoring/src/main/kotlin/com/pida/monitoring/sentry/SentryFingerprintCallback.kt b/pida-supports/monitoring/src/main/kotlin/com/pida/monitoring/sentry/SentryFingerprintCallback.kt new file mode 100644 index 0000000..706e810 --- /dev/null +++ b/pida-supports/monitoring/src/main/kotlin/com/pida/monitoring/sentry/SentryFingerprintCallback.kt @@ -0,0 +1,44 @@ +package com.pida.monitoring.sentry + +import com.pida.support.error.AuthenticationErrorException +import com.pida.support.error.ErrorException +import io.sentry.Hint +import io.sentry.SentryEvent +import io.sentry.SentryOptions +import org.springframework.stereotype.Component + +@Component +class SentryFingerprintCallback : SentryOptions.BeforeSendCallback { + override fun execute( + event: SentryEvent, + hint: Hint, + ): SentryEvent { + val exception = event.throwable ?: return event + + val fingerprint = resolveFingerprint(exception) + if (fingerprint != null) { + event.fingerprints = fingerprint + } + + return event + } + + private fun resolveFingerprint(exception: Throwable): List? = + when (exception) { + is ErrorException -> + listOf( + "ErrorException", + exception.errorType.kind.name, + exception.errorType.name, + ) + + is AuthenticationErrorException -> + listOf( + "AuthenticationErrorException", + exception.authenticationErrorType.kind.name, + exception.authenticationErrorType.name, + ) + + else -> null + } +} From 60051aaece45c8742b8d97d0ab6a635255f9d48e Mon Sep 17 00:00:00 2001 From: leehaneum Date: Sun, 15 Feb 2026 18:36:51 +0900 Subject: [PATCH 7/9] chore: update monitoring configuration for production and Sentry trace sampling --- .../monitoring/src/main/resources/monitoring.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/pida-supports/monitoring/src/main/resources/monitoring.yml b/pida-supports/monitoring/src/main/resources/monitoring.yml index 9fd1ff2..ee67f17 100644 --- a/pida-supports/monitoring/src/main/resources/monitoring.yml +++ b/pida-supports/monitoring/src/main/resources/monitoring.yml @@ -16,3 +16,11 @@ sentry: logging: minimum-event-level: error minimum-breadcrumb-level: info +--- +spring: + config: + activate: + on-profile: prod + +sentry: + traces-sample-rate: 0.1 From c6b6e78834104143255da033e93d8df7b22de3cb Mon Sep 17 00:00:00 2001 From: leehaneum Date: Sun, 15 Feb 2026 18:46:21 +0900 Subject: [PATCH 8/9] chore: remove default PII sending from Sentry configuration --- pida-supports/monitoring/src/main/resources/monitoring.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/pida-supports/monitoring/src/main/resources/monitoring.yml b/pida-supports/monitoring/src/main/resources/monitoring.yml index ee67f17..f762fac 100644 --- a/pida-supports/monitoring/src/main/resources/monitoring.yml +++ b/pida-supports/monitoring/src/main/resources/monitoring.yml @@ -11,7 +11,6 @@ sentry: dsn: ${SENTRY_DSN} traces-sample-rate: 1.0 environment: ${SPRING_PROFILES_ACTIVE:local} - send-default-pii: true exception-resolver-order: -2147483648 logging: minimum-event-level: error From 3e4483ed6573584a311a40b476cbd8f62dbbc76d Mon Sep 17 00:00:00 2001 From: leehaneum Date: Sun, 15 Feb 2026 18:47:29 +0900 Subject: [PATCH 9/9] chore: fix DockerfileDev CMD syntax for Java application --- docker/DockerfileDev | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docker/DockerfileDev b/docker/DockerfileDev index ea46724..d0a13a4 100644 --- a/docker/DockerfileDev +++ b/docker/DockerfileDev @@ -13,4 +13,5 @@ EXPOSE 8080 CMD java \ -javaagent:/opt/sentry/agent.jar \ -Dsentry.auto.init=false \ - -jar -Xmx2048m /service/pida/core-api-0.0.1.jar + -Xmx2048m \ + -jar /service/pida/core-api-0.0.1.jar