배치 시작 모니터링(Java×PushGateway×Prometheus)

이 기사 개요


  • 일괄 시작 모니터링을 어떻게 해야 할지 고민했을 때 PushGateway라는 것을 발견했습니다
  • 소개에서 Prometheus에서 메트릭을 볼 수있는 곳까지 요약

  • 구성




  • PushGateway와 Prometheus는 Docker로 시작
  • 메커니즘으로
  • Batch가 PushGateway에 메트릭 보내기
  • Prometheus가 PushGateway에서 메트릭 얻기

  • 모두 로컬에 존재하는 것으로 진행합니다

  • PushGateway 구축



    ※Docker를 사용할 수 있는 환경은 갖추어져 있는 전제입니다

    시작


    docker pull prom/pushgateway
    docker run -d \
        -p 9091:9091 \
        --name pushgateway \
        prom/pushgateway
    

    -d : 분리 모드로 시작. 별로 자세하지 않기 때문에 백그라운드에서 실행할 수 있는 정도의 인식
    -p : 포트 포워드 설정
    -name : 컨테이너 이름 지정

    동작 확인


  • http://localhost:9091 방문

  • 여전히 새하얀 화면이 표시되지만 일괄 처리에서 메트릭을 알리면이 화면에 표시됩니다
  • 참고로 Prometheus에서 메트릭 쿼리를 가져올 때 사용할 엔드포인트는 /metrics
  • http://localhost:9091/metrics


  • 배치(잡) 만들기



    build.gradle
    apply plugin: 'java'
    
    repositories {
        mavenCentral()
    }
    
    dependencies {
        compile('io.prometheus:simpleclient_pushgateway:0.6.0')
    }
    

    SampleBatch.java
    import java.io.IOException;
    import java.util.HashMap;
    import java.util.Map;
    
    public class SampleBatch {
        public static void main(String[] args) {
            String url = "localhost:9091";
            PushGateway pushGateway = new PushGateway(url);
    
            long now = System.currentTimeMillis();
    
            // メトリクスを収集(ここでは起動時間としてシステムミリ秒をセット)
            CollectorRegistry registry = new CollectorRegistry();
            Gauge lastStartAt = Gauge.build()
                    .name("batch_start_time")
                    .help("batch start time")
                    .register(registry);
            lastStartAt.set(now);
    
            // メトリクスにタグを設定
            Map<String, String> key = new HashMap<>();
            key.put("tagName", "tagValue");
    
            try {
                // メトリクスを登録
                pushGateway.pushAdd(registry, "sample-batch", key);
            } catch (IOException e) {
                // 例外処理
                e.printStackTrace();
            }
        }
    }
    

    실행!


  • 실행 후 PushGateway UI를 살펴보면,,,

  • 확실히 등록되었습니다!

  • Prometheus 구축



    시작



    prometheus.yml
    # /etc/prometheus/prometheus.yml
    
    global:
      scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
      evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
    alerting:
      alertmanagers:
      - static_configs:
        - targets:
    
    rule_files:
    
    scrape_configs:
    - job_name: 'pushgateway'
      scrape_interval: 1m
      metrics_path: /metrics
      static_configs:
      - targets: ['localhost:9091']
    
    
    docker pull prom/prometheus
    docker run -d \
      -p 9090:9090 \
      -v prometheus.yml:/etc/prometheus/prometheus.yml \
      --name prometheus \
      prom/prometheus
    

    동작 확인


  • UI (http://localhost:9090)에서 확인

  • 낫은 방법은 있을 것 같지만, changes(batch_start_time[2m]) 라는 PromQL로 배치가 기동한 타이밍을 알 수 있다!

  • 실제 운영


  • 현장에서는 Grafana를 사용하여 시각화 및 경고를 날리고있다
  • 좋은 웹페이지 즐겨찾기