728x90
implementation("software.amazon.awssdk:cloudwatch:2.25.30")
import software.amazon.awssdk.services.cloudwatch.CloudWatchClient
import software.amazon.awssdk.services.cloudwatch.model.*
@Component
class CloudWatchMetricsService {
private val cloudWatchClient: CloudWatchClient = CloudWatchClient.create()
fun getCpuUtilization(instanceId: String): Double {
val request = GetMetricStatisticsRequest.builder()
.namespace("AWS/EC2")
.metricName("CPUUtilization")
.dimensions(
Dimension.builder().name("InstanceId").value(instanceId).build()
)
.startTime(Instant.now().minus(Duration.ofMinutes(5)))
.endTime(Instant.now())
.period(60)
.statistics(Statistic.AVERAGE)
.build()
val response = cloudWatchClient.getMetricStatistics(request)
val dataPoints = response.datapoints()
return dataPoints.maxByOrNull { it.timestamp() }?.average() ?: 0.0
}
}
@Component
class KafkaThrottler(
private val metricsService: CloudWatchMetricsService,
private val kafkaListenerEndpointRegistry: KafkaListenerEndpointRegistry
) {
private val listenerId = "id"
@Scheduled(fixedRate = 10000)
fun monitorCpuAndThrottleKafka() {
val cpu = metricsService.getCpuUtilization(" ")
val container = kafkaListenerEndpointRegistry.getListenerContainer(listenerId)
if (cpu > 75) {
container.pause()
println("CPU high ($cpu%) → Kafka paused")
} else {
container.resume()
println("CPU normal ($cpu%) → Kafka resumed")
}
}
}
instance ID
IAM 권한 - cloudwatch - GetMetricsStatistics
Kafka Listener ID
728x90
'Kotlin Spring' 카테고리의 다른 글
단방향 암호화 sha512 (0) | 2024.12.18 |
---|---|
오토와이어링할 수 없습니다. '' 타입의 bean을 찾을 수 없습니다. (1) | 2024.12.18 |
Kotlin when 문 (1) | 2024.12.15 |
DataFetchingEnvironment 세팅하는 방법 (0) | 2024.12.11 |
Webflux 는 어디서 동작하나? (0) | 2024.12.10 |