From d3e7f4f356a0c808a18b1dd76a5de42c03533cba Mon Sep 17 00:00:00 2001 From: KimTaeO Date: Fri, 2 Feb 2024 16:49:50 +0900 Subject: [PATCH 1/3] =?UTF-8?q?add=20::=20prometheus=EB=A5=BC=20=EC=82=AC?= =?UTF-8?q?=EC=9A=A9=ED=95=98=EA=B8=B0=20=EC=9C=84=ED=95=9C=20dependency?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle.kts | 5 ++++- buildSrc/src/main/kotlin/Dependencies.kt | 3 +++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 0bb08a88..abe3f0c7 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -40,7 +40,7 @@ dependencies { testImplementation(Dependencies.SPRING_STARTER_TEST) testImplementation(Dependencies.SPRING_SECURITY_TEST) implementation(Dependencies.SPRING_AOP) - + implementation(Dependencies.SPRING_ACTUATOR) // kotlin implementation(Dependencies.JACKSON_MODULE_KOTLIN) @@ -73,6 +73,9 @@ dependencies { implementation(Dependencies.QUERY_DSL) implementation(Dependencies.QUERY_DSL_APT) kapt(Dependencies.QUERY_DSL_APT) + + // prometheus + implementation(Dependencies.PROMETHEUS_MICROMETER) } diff --git a/buildSrc/src/main/kotlin/Dependencies.kt b/buildSrc/src/main/kotlin/Dependencies.kt index 26ff28f4..59f30b0e 100644 --- a/buildSrc/src/main/kotlin/Dependencies.kt +++ b/buildSrc/src/main/kotlin/Dependencies.kt @@ -16,6 +16,7 @@ object Dependencies { const val SPRING_STARTER_TEST = "org.springframework.boot:spring-boot-starter-test" const val SPRING_SECURITY_TEST = "org.springframework.security:spring-security-test" const val SPRING_AOP = "org.springframework.boot:spring-boot-starter-aop" + const val SPRING_ACTUATOR = "org.springframework.boot:spring-boot-starter-actuator" // jackson const val JACKSON_MODULE_KOTLIN = "com.fasterxml.jackson.module:jackson-module-kotlin" @@ -43,4 +44,6 @@ object Dependencies { const val QUERY_DSL = "com.querydsl:querydsl-jpa:${DependencyVersions.QUERY_DSL_VERSION}" const val QUERY_DSL_APT = "com.querydsl:querydsl-apt:${DependencyVersions.QUERY_DSL_APT_VERSION}:jpa" + // prometheus + const val PROMETHEUS_MICROMETER = "io.micrometer:micrometer-registry-prometheus" } \ No newline at end of file From ebfac56b0daa5db664f41b41f5eb00f5fb1df72e Mon Sep 17 00:00:00 2001 From: KimTaeO Date: Fri, 2 Feb 2024 17:01:44 +0900 Subject: [PATCH 2/3] =?UTF-8?q?add=20=ED=94=84=EB=A1=9C=EB=A9=94=ED=85=8C?= =?UTF-8?q?=EC=9A=B0=EC=8A=A4=EB=A1=9C=20=EC=A0=95=EB=B3=B4=20=EC=88=98?= =?UTF-8?q?=EC=A7=91=EC=9D=84=20=EC=9C=84=ED=95=9C=20=EC=97=94=EB=93=9C?= =?UTF-8?q?=ED=8F=AC=EC=9D=B8=ED=8A=B8=20=EC=84=B8=ED=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/application.yml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 2aa1e43c..8c0f0b91 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -65,3 +65,20 @@ jwt: accessSecret: ${JWT_ACCESS} refreshSecret: ${JWT_REFRESH} oauthSecret: ${JWT_OAUTH} + +management: + endpoints: + enabled-by-default: false + web: + exposure: + include: health,info,prometheus + + endpoint: + health: + enabled: true + + info: + enabled: true + + prometheus: + enabled: true \ No newline at end of file From 1a730748c35da458b3ba670e04eff5ae7f118750 Mon Sep 17 00:00:00 2001 From: KimTaeO Date: Fri, 2 Feb 2024 18:07:01 +0900 Subject: [PATCH 3/3] add :: exporter endpoint sercurity config --- .../com/msg/gauth/global/security/SecurityConfig.kt | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/kotlin/com/msg/gauth/global/security/SecurityConfig.kt b/src/main/kotlin/com/msg/gauth/global/security/SecurityConfig.kt index 0c3ea5a2..e7f41cc6 100644 --- a/src/main/kotlin/com/msg/gauth/global/security/SecurityConfig.kt +++ b/src/main/kotlin/com/msg/gauth/global/security/SecurityConfig.kt @@ -4,9 +4,12 @@ import com.fasterxml.jackson.databind.ObjectMapper import com.msg.gauth.global.security.config.FilterConfig import com.msg.gauth.global.security.jwt.JwtTokenProvider import com.msg.gauth.global.security.jwt.TokenParser +import org.springframework.boot.actuate.autoconfigure.security.servlet.EndpointRequest +import org.springframework.boot.actuate.autoconfigure.security.servlet.SecurityRequestMatchersManagementContextConfiguration import org.springframework.context.annotation.Bean import org.springframework.context.annotation.Configuration import org.springframework.http.HttpMethod +import org.springframework.security.config.Customizer.withDefaults import org.springframework.security.config.annotation.web.builders.HttpSecurity import org.springframework.security.config.http.SessionCreationPolicy import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder @@ -15,6 +18,7 @@ import org.springframework.security.web.SecurityFilterChain import org.springframework.security.web.util.matcher.RequestMatcher import org.springframework.web.cors.CorsUtils + @Configuration class SecurityConfig( private val jwtTokenProvider: JwtTokenProvider, @@ -88,6 +92,11 @@ class SecurityConfig( .antMatchers(HttpMethod.POST, "/image").authenticated() .antMatchers(HttpMethod.DELETE, "/image").authenticated() + // Actuator + .antMatchers(HttpMethod.GET, "/actuator/health").hasRole("ADMIN") + .antMatchers(HttpMethod.GET, "/actuator/info").hasRole("ADMIN") + .antMatchers(HttpMethod.GET, "/actuator/prometheus").hasRole("ADMIN") + .anyRequest().denyAll() .and() .exceptionHandling()