LoginSignup
1
1

More than 3 years have passed since last update.

バッチの起動監視(Java×PushGateway×Prometheus)

Posted at

この記事の概要

  • バッチの起動監視をどうしようかと悩んでいた時にPushGatewayというものを見つけた
  • 導入からPrometheusでメトリクスが見れるところまでをまとめてみた

構成

image.png

  • 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にアクセス スクリーンショット 2019-09-21 22.14.29.png
  • まだ真っ白な画面が表示されるだけだが、バッチからメトリクスが通知されるとこの画面に表示される
  • ちなみにPrometheusからメトリクエスを取得させるときに使用するエンドポイントは/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を見てみると、、、 スクリーンショット 2019-09-21 22.36.32.png
  • 確かに登録されてる!

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)で確認 スクリーンショット 2019-09-21 23.22.13.png
  • ベターな方法はありそうだが、changes(batch_start_time[2m])というPromQLでバッチが起動したタイミングがわかる!

実際の運用

  • 現場ではGrafanaを用いて可視化&アラートを飛ばしている
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1