From afd5af4eb3971bec22c3703c696e88ab89a1c517 Mon Sep 17 00:00:00 2001 From: qinfuxiang Date: Fri, 3 Dec 2021 11:48:04 +0800 Subject: [PATCH] =?UTF-8?q?Java=20metrics=20=E5=AD=A6=E4=B9=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../code-metrics/pom.xml | 11 +++++ .../fast/cloud/nacos/metrics/jmx/Hello.java | 46 +++++++++++++++++++ .../cloud/nacos/metrics/jmx/HelloAgent.java | 21 +++++++++ .../cloud/nacos/metrics/jmx/HelloMBean.java | 18 ++++++++ .../metric/DeadLockHealthCheckExample.java | 28 +++++++++++ .../metric/JvmInstrumentationExample.java | 24 ++++++++++ .../metric/RestfulServiceHealthCheck.java | 14 ++++++ .../RestfulServiceHealthCheckExample.java | 28 +++++++++++ 8 files changed, 190 insertions(+) create mode 100644 fast-source-code-analysis/code-metrics/src/main/java/fast/cloud/nacos/metrics/jmx/Hello.java create mode 100644 fast-source-code-analysis/code-metrics/src/main/java/fast/cloud/nacos/metrics/jmx/HelloAgent.java create mode 100644 fast-source-code-analysis/code-metrics/src/main/java/fast/cloud/nacos/metrics/jmx/HelloMBean.java create mode 100644 fast-source-code-analysis/code-metrics/src/main/java/fast/cloud/nacos/metrics/metric/DeadLockHealthCheckExample.java create mode 100644 fast-source-code-analysis/code-metrics/src/main/java/fast/cloud/nacos/metrics/metric/JvmInstrumentationExample.java create mode 100644 fast-source-code-analysis/code-metrics/src/main/java/fast/cloud/nacos/metrics/metric/RestfulServiceHealthCheck.java create mode 100644 fast-source-code-analysis/code-metrics/src/main/java/fast/cloud/nacos/metrics/metric/RestfulServiceHealthCheckExample.java diff --git a/fast-source-code-analysis/code-metrics/pom.xml b/fast-source-code-analysis/code-metrics/pom.xml index 140ae51..32dfbb0 100644 --- a/fast-source-code-analysis/code-metrics/pom.xml +++ b/fast-source-code-analysis/code-metrics/pom.xml @@ -22,6 +22,17 @@ 3.2.6 + + io.dropwizard.metrics + metrics-jvm + 3.2.6 + + + + io.dropwizard.metrics + metrics-healthchecks + 3.2.6 + diff --git a/fast-source-code-analysis/code-metrics/src/main/java/fast/cloud/nacos/metrics/jmx/Hello.java b/fast-source-code-analysis/code-metrics/src/main/java/fast/cloud/nacos/metrics/jmx/Hello.java new file mode 100644 index 0000000..a7bc420 --- /dev/null +++ b/fast-source-code-analysis/code-metrics/src/main/java/fast/cloud/nacos/metrics/jmx/Hello.java @@ -0,0 +1,46 @@ +package fast.cloud.nacos.metrics.jmx; + +public class Hello implements HelloMBean { + private String name; + + private String age; + + @Override + public void getTelephone() { + System.out.println("get Telephone"); + } + + @Override + public void helloWorld() { + System.out.println("hello world"); + } + + @Override + public void helloWorld(String str) { + System.out.println("helloWorld:" + str); + } + + @Override + public String getName() { + System.out.println("get name 123"); + return name; + } + + @Override + public void setName(String name) { + System.out.println("set name 123"); + this.name = name; + } + + @Override + public String getAge() { + System.out.println("get age 123"); + return age; + } + + @Override + public void setAge(String age) { + System.out.println("set age 123"); + this.age = age; + } +} diff --git a/fast-source-code-analysis/code-metrics/src/main/java/fast/cloud/nacos/metrics/jmx/HelloAgent.java b/fast-source-code-analysis/code-metrics/src/main/java/fast/cloud/nacos/metrics/jmx/HelloAgent.java new file mode 100644 index 0000000..4d37add --- /dev/null +++ b/fast-source-code-analysis/code-metrics/src/main/java/fast/cloud/nacos/metrics/jmx/HelloAgent.java @@ -0,0 +1,21 @@ +package fast.cloud.nacos.metrics.jmx; + +import javax.management.MBeanServer; +import javax.management.ObjectName; +import java.lang.management.ManagementFactory; + +/** + * @author qinfuxiang + */ +public class HelloAgent { + + public static void main(String[] args) throws Exception { + MBeanServer server = ManagementFactory.getPlatformMBeanServer(); + ObjectName helloName = new ObjectName("jmxBean:name=hello"); + //create mbean and register mbean + Hello hello = new Hello(); + hello.setName("123"); + server.registerMBean(hello, helloName); + Thread.currentThread().join(); + } +} diff --git a/fast-source-code-analysis/code-metrics/src/main/java/fast/cloud/nacos/metrics/jmx/HelloMBean.java b/fast-source-code-analysis/code-metrics/src/main/java/fast/cloud/nacos/metrics/jmx/HelloMBean.java new file mode 100644 index 0000000..ff8bfdc --- /dev/null +++ b/fast-source-code-analysis/code-metrics/src/main/java/fast/cloud/nacos/metrics/jmx/HelloMBean.java @@ -0,0 +1,18 @@ +package fast.cloud.nacos.metrics.jmx; + +public interface HelloMBean +{ + public String getName(); + + public void setName(String name); + + public String getAge(); + + public void setAge(String age); + + public void helloWorld(); + + public void helloWorld(String str); + + public void getTelephone(); +} diff --git a/fast-source-code-analysis/code-metrics/src/main/java/fast/cloud/nacos/metrics/metric/DeadLockHealthCheckExample.java b/fast-source-code-analysis/code-metrics/src/main/java/fast/cloud/nacos/metrics/metric/DeadLockHealthCheckExample.java new file mode 100644 index 0000000..cc74581 --- /dev/null +++ b/fast-source-code-analysis/code-metrics/src/main/java/fast/cloud/nacos/metrics/metric/DeadLockHealthCheckExample.java @@ -0,0 +1,28 @@ +package fast.cloud.nacos.metrics.metric; + +import com.codahale.metrics.ConsoleReporter; +import com.codahale.metrics.MetricRegistry; +import com.codahale.metrics.health.HealthCheckRegistry; +import com.codahale.metrics.health.jvm.ThreadDeadlockHealthCheck; + +import java.util.concurrent.TimeUnit; + +/** + * @author qinfuxiang + */ +public class DeadLockHealthCheckExample { + + public static void main(String[] args) throws InterruptedException { + final HealthCheckRegistry healthService = new HealthCheckRegistry(); + healthService.register("thread-dead-lock-hc", new ThreadDeadlockHealthCheck()); + + final MetricRegistry metricRegistry = new MetricRegistry(); + ConsoleReporter consoleReporter = ConsoleReporter.forRegistry(metricRegistry).build(); + + metricRegistry.gauge("thread-dead-lock-hc",() -> healthService::runHealthChecks); + + consoleReporter.start(10, TimeUnit.SECONDS); + + Thread.currentThread().join(); + } +} diff --git a/fast-source-code-analysis/code-metrics/src/main/java/fast/cloud/nacos/metrics/metric/JvmInstrumentationExample.java b/fast-source-code-analysis/code-metrics/src/main/java/fast/cloud/nacos/metrics/metric/JvmInstrumentationExample.java new file mode 100644 index 0000000..4d82fce --- /dev/null +++ b/fast-source-code-analysis/code-metrics/src/main/java/fast/cloud/nacos/metrics/metric/JvmInstrumentationExample.java @@ -0,0 +1,24 @@ +package fast.cloud.nacos.metrics.metric; + +import com.codahale.metrics.ConsoleReporter; +import com.codahale.metrics.MetricRegistry; +import com.codahale.metrics.jvm.ClassLoadingGaugeSet; +import com.codahale.metrics.jvm.GarbageCollectorMetricSet; +import com.codahale.metrics.jvm.ThreadStatesGaugeSet; + +import java.util.concurrent.TimeUnit; + +/** + * @author qinfuxiang + */ +public class JvmInstrumentationExample { + public final static MetricRegistry metricRegistry = new MetricRegistry(); + public final static ConsoleReporter consoleReporter = ConsoleReporter.forRegistry(metricRegistry).build(); + public static void main(String[] args) throws InterruptedException { + consoleReporter.start(10, TimeUnit.SECONDS); + metricRegistry.registerAll(new GarbageCollectorMetricSet()); + metricRegistry.registerAll(new ThreadStatesGaugeSet()); + metricRegistry.registerAll(new ClassLoadingGaugeSet()); + Thread.currentThread().join(); + } +} diff --git a/fast-source-code-analysis/code-metrics/src/main/java/fast/cloud/nacos/metrics/metric/RestfulServiceHealthCheck.java b/fast-source-code-analysis/code-metrics/src/main/java/fast/cloud/nacos/metrics/metric/RestfulServiceHealthCheck.java new file mode 100644 index 0000000..6677e67 --- /dev/null +++ b/fast-source-code-analysis/code-metrics/src/main/java/fast/cloud/nacos/metrics/metric/RestfulServiceHealthCheck.java @@ -0,0 +1,14 @@ +package fast.cloud.nacos.metrics.metric; + +import com.codahale.metrics.health.HealthCheck; + +/** + * @author qinfuxiang + */ +public class RestfulServiceHealthCheck extends HealthCheck { + + @Override + protected Result check() throws Exception { + return Result.healthy("The Restful service well."); + } +} diff --git a/fast-source-code-analysis/code-metrics/src/main/java/fast/cloud/nacos/metrics/metric/RestfulServiceHealthCheckExample.java b/fast-source-code-analysis/code-metrics/src/main/java/fast/cloud/nacos/metrics/metric/RestfulServiceHealthCheckExample.java new file mode 100644 index 0000000..1283948 --- /dev/null +++ b/fast-source-code-analysis/code-metrics/src/main/java/fast/cloud/nacos/metrics/metric/RestfulServiceHealthCheckExample.java @@ -0,0 +1,28 @@ +package fast.cloud.nacos.metrics.metric; + +import com.codahale.metrics.ConsoleReporter; +import com.codahale.metrics.MetricRegistry; +import com.codahale.metrics.health.HealthCheckRegistry; +import com.codahale.metrics.health.jvm.ThreadDeadlockHealthCheck; + +import java.util.concurrent.TimeUnit; + +/** + * @author qinfuxiang + */ +public class RestfulServiceHealthCheckExample { + public static void main(String[] args) throws InterruptedException { + final HealthCheckRegistry healthService = new HealthCheckRegistry(); + healthService.register("thread-dead-lock-hc", new ThreadDeadlockHealthCheck()); + healthService.register("restful-check-hc", new RestfulServiceHealthCheck()); + + final MetricRegistry metricRegistry = new MetricRegistry(); + ConsoleReporter consoleReporter = ConsoleReporter.forRegistry(metricRegistry).build(); + + metricRegistry.gauge("app-health-check",() -> healthService::runHealthChecks); + + consoleReporter.start(10, TimeUnit.SECONDS); + + Thread.currentThread().join(); + } +}