Micrometer를 사용하면 Metrics를 관리하고 여러 백엔드의 측정 결과를 리포팅 할 수 있습니다.
이 문서에서는 Micrometer에 대한 SPI(Vert.x Metrics Service Provider Interface) 구현을 소개합니다.
Metrics 리포팅 방법: InfluxDB와 연동
InfuxDB에 대한 구성은 docs.infuxdata: instructions to get InfluxDB up and running을 참고합니다.
vertx-micrometer-metrics와 micrometer-registry-influx 모듈을 classpath에 등록합니다.
Maven 사용자는 POM 파일에 다음을 추가합니다.
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-micrometer-metrics</artifactId>
<version>3.9.15</version>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-influx</artifactId>
<version>${micrometer.version}</version>
</dependency>
Gradle 사용자는 Build 파일에 다음을 추가합니다.
compile 'io.vertx:vertx-micrometer-metrics:3.9.15'
compile 'io.micrometer:micrometer-registry-influx:${micrometer.version}'
Vertx의 디폴트 설정은 SPI 구현을 사용하지 않습니다. VertxOptions에서 Metrics 수집을 허용합니다.
Vertx vertx = Vertx.vertx(new VertxOptions().setMetricsOptions(
new MicrometerMetricsOptions()
.setInfluxDbOptions(new VertxInfluxDbOptions().setEnabled(true))
.setEnabled(true)));
VertxOptions에서 Metrics를 리포팅하는 InfluxDB 정보를 입력합니다.
Vertx vertx = Vertx.vertx(new VertxOptions().setMetricsOptions(
new MicrometerMetricsOptions()
.setInfluxDbOptions(new VertxInfluxDbOptions().setEnabled(true)
.setUri("<InfluxDB URI>")
.setDb("<InfluxDB Name>"))
.setUserName("<InfluxDB Username>")
.setPassword("<InfluxDB Password>"))
.setEnabled(true)));
Metrics 리포팅 방법: Prometheus와 연동
Prometheus에 대한 구성은 prometheus.io: instructions to get Prometheus up and running를 참고합니다.
vertx-micrometer-metrics와 micrometer-registry-prometheus 모듈을 classpath에 등록합니다. 수집된 Mertics를 표시하려면 vertx-web 모듈 역시 필요 할 수 있습니다.
Maven 사용자는 POM 파일에 다음을 추가합니다.
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-micrometer-metrics</artifactId>
<version>3.9.15</version>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
<version>${micrometer.version}</version>
</dependency>
Gradle 사용자는 Build 파일에 다음을 추가합니다.
compile 'io.vertx:vertx-micrometer-metrics:3.9.15'
compile 'io.micrometer:micrometer-registry-prometheus:${micrometer.version}'
Vertx의 디폴트 설정은 SPI 구현을 사용하지 않습니다. VertxOptions에서 Metrics 수집을 허용합니다.
Vertx vertx = Vertx.vertx(new VertxOptions().setMetricsOptions(
new MicrometerMetricsOptions()
.setPrometheusOptions(new VertxPrometheusOptions().setEnabled(true))
.setEnabled(true)));
VertxOptions에서 Metrics를 리포팅하는 Prometheus 정보를 입력합니다.
Vertx vertx = Vertx.vertx(new VertxOptions().setMetricsOptions(
new MicrometerMetricsOptions()
.setPrometheusOptions(new VertxPrometheusOptions().setEnabled(true)
.setStartEmbeddedServer(true)
.setEmbeddedServerOptions(new HttpServerOptions().setPort(8080))
.setEmbeddedServerEndpoint("/metrics/vertx"))
.setEnabled(true)));
임베디드 서버의 앤드포인트 setEmbeddedServerEndPoint()가 지정되지 않으면 디폴트 앤드포인트는 /metrics입니다.
웹 서버 라우터를 구성하고 Mertics를 바인딩합니다.
Vertx vertx = Vertx.vertx(new VertxOptions().setMetricsOptions(
new MicrometerMetricsOptions()
.setPrometheusOptions(new VertxPrometheusOptions().setEnabled(true))
.setEnabled(true)));
// Later on, creating a router
Router router = Router.router(vertx);
router.route("/metrics").handler(PrometheusScrapingHandler.create());
vertx.createHttpServer().requestHandler(router).listen(8080);
코드 | 비고 | |
Metrics 리포팅 방법: JMX와 연동
JMX(Java Management Extensions)는 Java 애플리케이션의 모니터링과 관리기능을 제공하는 모듈입니다.
Metrix를 JMX에 리포팅하려면 vertx-micrometer-metrics와 micrometer-registry-jmx 모듈을 classpath에 등록합니다.
Maven 사용자는 POM 파일에 다음을 추가합니다:
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-micrometer-metrics</artifactId>
<version>3.9.15</version>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-jmx</artifactId>
<version>${micrometer.version}</version>
</dependency>
Gradle 사용자는 Build 파일에 다음을 추가합니다:
compile 'io.vertx:vertx-micrometer-metrics:3.9.15'
compile 'io.micrometer:micrometer-registry-jmx:${micrometer.version}'
Vertx의 디폴트 설정은 SPI 구현을 사용하지 않습니다. VertxOptions에서 Metrics 수집을 허용합니다.
Vertx vertx = Vertx.vertx(new VertxOptions().setMetricsOptions(
new MicrometerMetricsOptions()
.setJmxMetricsOptions(new VertxJmxMetricsOptions().setEnabled(true))
.setEnabled(true)));
VertxOptions에서 Metrics를 리포팅하는 JMX 정보를 입력합니다.
Vertx vertx = Vertx.vertx(new VertxOptions().setMetricsOptions(
new MicrometerMetricsOptions()
.setJmxMetricsOptions(new VertxJmxMetricsOptions().setEnabled(true)
.setStep(5)
.setDomain("<JMX Domain>"))
.setEnabled(true)));
코드 | 비고 | |
Metrics 리포팅 방법: Micrometer 레지스트리와 동시 리포팅
Vertx에서는 Mircrometer에서 지원하는 모든 백엔드를 구현하고 있지 않습니다.
대신 Vertx의 Mircometer 레지스트리를 사용하면 기본으로 제공되지 않는 백엔드에 대해서도 리포팅 할 수 있습니다(Graphite, Ganglia, Atlas 등).
Micrometer Composite Registry를 사용하면 여러 백엔드 레지스트리에 대해 동일한 Metrics를 리포팅 할 수 있습니다.
CompositeMeterRegistry myRegistry = new CompositeMeterRegistry();
myRegistry.add(new JmxMeterRegistry(s -> null, Clock.SYSTEM));
myRegistry.add(new GraphiteMeterRegistry(s -> null, Clock.SYSTEM));
Vertx vertx = Vertx.vertx(new VertxOptions()
.setMetricsOptions(new MicrometerMetricsOptions()
.setMicrometerRegistry(myRegistry)
.setEnabled(true)));
코드 | 비고 | |
Vertx 애플리케이션이 |
정리 및 복습
- Vertx 애플리케이션에서
Micrometer Metrics를 활성화하고 백엔드에 리포팅할 수 있습니다. - 연동 가능한 백엔드는
InfluxDBPrometheusJMXGraphiteGangliaAtlas등이 있습니다. Vertx에서 제공하지 않는 백엔드는 Micrometer 레지스트리를 사용하여 리포팅합니다.- Micrometer Composite Registry를 사용하면
여러 백엔드 레지스트리에 대해 동일한 Metrics를 리포팅할 수 있습니다.
'Java > Vert.x' 카테고리의 다른 글
AWS EC2에서 호스팅되는 Vertx 앱 Hazelcast discovery로 클러스터링하기 (0) | 2023.11.29 |
---|---|
도커 컨테이너(Docker container)를 사용해 버텍스 앱을 Java 기본 이미지에서 실행 (0) | 2023.11.10 |
이벤트 루프 스레드(Event-Loop thread), 워커 스레드(Worker thread) 관련 Property에 따른 성능 밴드 튜닝 (0) | 2023.09.05 |
버텍스 코어: HTTP 요청 응답 및 청크로 전달(chunking) (0) | 2022.04.18 |
버텍스 코어: HTTP 서버와 HTTP 요청 처리 (0) | 2022.04.17 |