批处理启动监控(Java×PushGateway×Prometheus)
这篇文章的摘要 (Zhè de
-
- バッチの起動監視をどうしようかと悩んでいた時に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:指定容器名称。
确认动作
生成混合批次
apply plugin: 'java'
repositories {
mavenCentral()
}
dependencies {
compile('io.prometheus:simpleclient_pushgateway:0.6.0')
}
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();
}
}
}
开始吧!
Prometheus建设
开动
# /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
确认动作
实际运营
- 現場ではGrafanaを用いて可視化&アラートを飛ばしている