Pushgateway를 사용한 SpringBatch 지표 수집
10120 단어 SpringBootpushgatewaySpringBatch
개요
따라서 배치가 끝날 때 Pushgateway에 메트릭을 보내 메트릭을 prometheus에서 수집 할 수 있습니다.
구성
SpringBatch --> pushgateway <-- prometheus
이 기사에서는 SpringBatch --> pushgateway
의 부분을 메인으로
Pushgateway 구축
여기서 로컬로 Pushgateway를 구축합니다.
1. 다운로드
여기 에서 단말기에 있던 것을 다운로드
Mac의 경우 "prometheus-2.19.2.darwin-amd64.tar.gz"
2. 해동
gunzip pushgateway-1.2.0.darwin-amd64.tar.gz
tar -xf pushgateway-1.2.0.darwin-amd64.tar
3. 시작
cd pushgateway-1.2.0.darwin-amd64
./pushgateway
4. UI에 액세스
localhost:9091
에 액세스하여 이런 화면이 나오면 OK!
지표가 전송되면 지표가 표시됩니다.
SpringBatch 구현
1. 애플리케이션 생성
spring initializr 사용
gradle 이용의 경우의 build.gradle는 이런 느낌
※ 약간 손으로 추가가 필요합니다
build.gradleplugins {
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!」를 출력하는 것만의 배치
BankConfiguration@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. 설정
SpringBatch --> pushgateway <-- prometheus
여기서 로컬로 Pushgateway를 구축합니다.
1. 다운로드
여기 에서 단말기에 있던 것을 다운로드
Mac의 경우 "prometheus-2.19.2.darwin-amd64.tar.gz"
2. 해동
gunzip pushgateway-1.2.0.darwin-amd64.tar.gz
tar -xf pushgateway-1.2.0.darwin-amd64.tar
3. 시작
cd pushgateway-1.2.0.darwin-amd64
./pushgateway
4. UI에 액세스
localhost:9091
에 액세스하여 이런 화면이 나오면 OK!지표가 전송되면 지표가 표시됩니다.
SpringBatch 구현
1. 애플리케이션 생성
spring initializr 사용
gradle 이용의 경우의 build.gradle는 이런 느낌
※ 약간 손으로 추가가 필요합니다
build.gradleplugins {
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!」를 출력하는 것만의 배치
BankConfiguration@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. 설정
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'
}
@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;
}
}
}
application.yml
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
실행!
UI로 전송된 지표가 표시되었습니다! !
prometheus에서 참조하는 경우 /metrics
경로를 지정하면 OK입니다.
덤
쉘 스크립트에서도 curl로 push 할 수 있습니다.
# 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
Reference
이 문제에 관하여(Pushgateway를 사용한 SpringBatch 지표 수집), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/rhirabay/items/1982ac8d250e8b38f6b7
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
쉘 스크립트에서도 curl로 push 할 수 있습니다.
# 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
Reference
이 문제에 관하여(Pushgateway를 사용한 SpringBatch 지표 수집), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/rhirabay/items/1982ac8d250e8b38f6b7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)