본문 바로가기

빅데이터

prometheus 자바 클라이언트로 지표 수집하기

프로메테우스는 지표를 모니터링하기에 적합합니다. 지표를 모니터링하면 애플리케이션 동작에 대한 상태변화를 즉각적으로 알고 대처할 수 있습니다. 자바애플리케이션에서 프로메테우스로 지표를 보내는 방법은 크게 3가지 방법이 있습니다.

 

- JMX 익스포터
- PUSH 게이트웨이
- 자바 클라이언트

 

여기서는 자바 클라이언트를 사용하는 방법을 설명합니다.

https://github.com/prometheus/client_java

 

prometheus/client_java

Prometheus instrumentation library for JVM applications - prometheus/client_java

github.com

우선 build.gradle에 관련 라이브러리를 추가합니다.

dependencies {
...

    implementation 'io.prometheus:simpleclient:0.11.0'
    implementation 'io.prometheus:simpleclient_hotspot:0.6.0'
    implementation 'io.prometheus:simpleclient_httpserver:0.6.0'
}

다음은 main()안에 HTTP server를 열어 줍니다. 주의할점은 다른 애플리케이션이 점유하고 있지 않는 포트로 열어야 오류없이 실행됩니다.

public static void main(String[] args) {
    try {
        HTTPServer server = new HTTPServer(9990);
        DefaultExports.initialize();
    } catch (Exception e) {
        log.error(e.getMessage(), e);
    }
    ...

DefaultExports는 프로메테우스 자바 클라이언트가 제공하는 기본 JVM관련 지표를 포함하여 넘겨줄지 여부를 결정하는 것입니다.

 

다음으로는 어떤 지표값을 보낼지 정해야합니다. 지표는 다음과 같은 종류가 있습니다.

 

- counter
- gauge
- summary
- historgram

상기 지표관련 설명은 아래 링크를 참고하세요.

https://github.com/prometheus/client_java#instrumenting

 

prometheus/client_java

Prometheus instrumentation library for JVM applications - prometheus/client_java

github.com

여기서는 counter를 적용해보겠습니다. counter를 사용하면 특정 메서드가 몇번 호출되었는지 TPS지표를 측정할 수 있습니다.

static final Counter requests = Counter.build()
        .name("http_requests").help("Total requests.")
        .labelNames("group").register();

우선 Counter 인스턴스를 생성합니다. 생성시 메트릭 이름, 라벨이름을 등록합니다.

void httpMethod(){
    requests.labels("abc").inc();
}

이제 기본 설정은 완료되었습니다.

 

애플리케이션을 실행하고 지정한 포트로 접속하면 다음과 같은 화면이 나타나게 됩니다.

프로메테우스의 서비스 디스커버리로 해당 포트와 연결하거나 scrape_config로 해당 포트를 지정하고나면 다음과 같이 데이터를 수집이 되는것을 프로메테우스 웹 콘솔에서 확인할 수 있습니다.

counter지표의 경우 rate()함수를 통해 데이터가 얼마나 호출되었는지 확인할 수 있습니다.

rate(http_requests_total[1m])

참고자료

https://prometheus.io/

 

Prometheus - Monitoring system & time series database

An open-source monitoring system with a dimensional data model, flexible query language, efficient time series database and modern alerting approach.

prometheus.io

 

반응형