スレッド数を CloudWatch のカスタムメトリクスとして Publish する
micrometer を使ってスレッド数を CloudWatch のカスタムメトリクスとして Publish してみました
// https://mvnrepository.com/artifact/io.micrometer/micrometer-registry-cloudwatch libraryDependencies += "io.micrometer" % "micrometer-registry-cloudwatch" % "1.0.5"
package com.pigumer.example; import java.util.Properties; public class MicrometerProperties { public Properties DEFAULT; public MicrometerProperties() { DEFAULT = new Properties(); DEFAULT.setProperty("cloudwatch.enabled", "true"); DEFAULT.setProperty("cloudwatch.namespace", "MICROMETER"); DEFAULT.setProperty("cloudwatch.step", "PT1M"); DEFAULT.setProperty("cloudwatch.batchSize", "1"); } }
package com.pigumer.example; import com.amazonaws.services.cloudwatch.AmazonCloudWatchAsync; import com.amazonaws.services.cloudwatch.AmazonCloudWatchAsyncClientBuilder; import io.micrometer.cloudwatch.CloudWatchConfig; import io.micrometer.cloudwatch.CloudWatchMeterRegistry; import io.micrometer.core.instrument.Clock; import io.micrometer.core.instrument.binder.jvm.JvmThreadMetrics; import java.time.Duration; import java.util.Properties; import java.util.stream.IntStream; public class Main { private static AmazonCloudWatchAsync cloudWatch = AmazonCloudWatchAsyncClientBuilder.standard().withRegion("ap-northeast-1").build(); private static Clock clock = Clock.SYSTEM; private static CloudWatchConfig config = new CloudWatchConfig() { private Properties properties = new MicrometerProperties().DEFAULT; @Override public String get(String key) { return properties.getProperty(key); } }; private static Runnable sleep = () -> { try { Thread.sleep(60000); } catch (Exception e) { e.printStackTrace(); } }; public static void main(String[] args) throws Exception { CloudWatchMeterRegistry registry = new CloudWatchMeterRegistry(config, clock, cloudWatch); new JvmThreadMetrics().bindTo(registry); IntStream.range(1, 20).forEach(n -> new Thread(sleep).run()); Thread.sleep(60000 * 3); } }