使用Pushgateway来收集SpringBatch的指标统计

总结

    • APIだと、メトリクス用のエンドポイントによってメトリクス収集が可能だが、バッチだと処理終了とともにアプリケーションが終了してしまうため、APIと同じようにはいかない

 

    そこでバッチ終了時にPushgatewayにメトリクスを送信することで、メトリクスをprometheusから収集可能な状態にする

形成

SpringBatch --> pushgateway <-- prometheus

在这篇文章中,主要讨论了SpringBatch和pushgateway的部分。

搭建Pushgateway

在这里,我们将构建一个本地的Pushgateway。

1. 下载

请从这里将设备上的内容下载下来。
对于Mac的用户,请下载 “prometheus-2.19.2.darwin-amd64.tar.gz”。

解凍 – To defrost / thaw.

gunzip pushgateway-1.2.0.darwin-amd64.tar.gz
tar -xf pushgateway-1.2.0.darwin-amd64.tar

3. 开动 (qǐ

cd pushgateway-1.2.0.darwin-amd64
./pushgateway

4. 访问用户界面

访问localhost:9091,如果出现这样的界面就可以了!当指标被发送时,将会显示指标。

Screen Shot 2020-07-05 at 0.11.32.png

我要实现SpringBatch。

创建应用程序

使用Spring Initializer

如果使用Gradle,build.gradle文件应该是这样的。
*可能需要手动添加一些内容。

plugins {
    id 'org.springframework.boot' version '2.3.1.RELEASE'
    id 'io.spring.dependency-management' version '1.0.9.RELEASE'
    id 'java'
    id 'com.github.ben-manes.versions' version '0.28.0'
}

sourceCompatibility = 11
targetCompatibility = 11

repositories {
    mavenCentral()
}

dependencies {
    compileOnly('org.projectlombok:lombok')
    annotationProcessor('org.projectlombok:lombok')

    implementation 'org.springframework.boot:spring-boot-starter-batch'
    implementation 'org.springframework.boot:spring-boot-starter-actuator'
    implementation 'io.micrometer:micrometer-registry-prometheus'
    implementation 'io.prometheus:simpleclient_pushgateway'
    runtimeOnly 'com.h2database:h2'
}

2. 执行批处理

因为批处理本身并不是主要的,所以这个批处理只是输出“Hello World!”。

@RequiredArgsConstructor
@Configuration
@EnableBatchProcessing
public class BankConfiguration {

    private final StepBuilderFactory stepBuilderFactory;
    private final JobBuilderFactory jobBuilderFactory;

    @Bean
    public HelloWorldTasklet helloWorldTasklet() {
        return new HelloWorldTasklet();
    }

    @Bean
    public Step helloWorldStep() {
        return stepBuilderFactory.get("helloWorldStep")
                .tasklet(helloWorldTasklet())
                .build();
    }

    @Bean
    public Job helloWorldJob() {
        return jobBuilderFactory.get("helloWorldJob")
                .incrementer(new RunIdIncrementer())
                .flow(helloWorldStep())
                .end()
                .build();
    }

    public class HelloWorldTasklet implements Tasklet {
        @Override
        public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
            System.out.println("Hello world");

            return RepeatStatus.FINISHED;
        }
    }
}

3. 设置

    Application properties
management:
  metrics:
    export:
      prometheus:
        pushgateway:
          # Pushgatewayへのメトリクス送信を有効化(デフォルト:false)
          enabled: true
          # PushgatewayのURL(デフォルト:http://localhost:9091)
          base-url: http://localhost:9091
          # メトリクスをpushする間隔(デフォルト:1m)
          push-rate: 30s
          # アプリケーションの識別子
          job: "hello-world-job"
          # メトリクスのタグ
          grouping-key: 
            tag1: "value1"
            tag2: "value2"
          # バッチ終了時の動作
          # -   none:なにもしない(デフォルト)
          # -   push:終了前にメトリクスを送信する
          # - delete:終了前にメトリクスを削除する
          shutdown-operation: push

开始行动!

Screen Shot 2020-07-05 at 0.44.15.png

已成功显示了发送到用户界面的度量指标!!

如果要从prometheus引用,只需指定/metrics路径即可。

额外的东西

也可以使用curl在Shell脚本中进行推送

# echo "<メトリクス名> <値>" | curl --data-binary @- http://<host>:<port>/metrics/job/<ジョブ名>/<タグ名1>/<値1>/<タグ名2>/<値2>/...
echo "some_metric 12.3" | curl --data-binary @- http://localhost:9091/metrics/job/jnb_name/tag1/val1
广告
将在 10 秒后关闭
bannerAds