Java实现Prometheus remote write协议写入VictoriaMetrics
要将Prometheus的Remote Write数据写入到VictoriaMetrics中,可以使用VictoriaMetrics提供的原生Remote Write支持。VictoriaMetrics兼容Prometheus的Remote Write协议,因此可以直接接受Prometheus发送的数据。
具体步骤
可以通过prometheus的http接口/api/v1/write提交数据,这个接口的数据格式有如下要求:
- 使用POST方式提交
- 需要经过protobuf编码,依赖github.com/gogo/protobuf/proto
- 可以使用snappy进行压缩,依赖github.com/golang/snappy
编译源文件
需要使用protoc工具将remote.proto,types.proto和gogo.proto编译成对应的Java文件,这里给出编译之后,Java文件能通过编译的protoc工具,remote.proto,types.proto和gogo.proto文件。
- protoc版本选择3.6.0:protoc3.6.0,在编译的时候选择高版本会出现以下错误导致Java文件编译不通过
a. Cannot resolve symbol ‘UnusedPrivateParam’
b. Cannot resolve method ‘internalBuildGeneratedFileFrom(String[], FileDescriptor[])’ - remote.proto,types.proto和gogo.proto文件:proto文件
- 根据protoc编译教程 教程将remote.proto,types.proto和gogo.proto文件编译成对应的Java文件
- 将编译后的三个Java文件复制到Java项目中,并在pom文件中加入如下几个依赖
<dependency>
<groupId>io.prometheus</groupId>
<artifactId>simpleclient</artifactId>
<version>0.16.0</version>
</dependency>
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>3.6.0</version>
</dependency>
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java-util</artifactId>
<version>3.6.0</version>
</dependency>
<!-- snappy compression -->
<dependency>
<groupId>org.xerial.snappy</groupId>
<artifactId>snappy-java</artifactId>
<version>1.1.7.3</version>
</dependency>
- 之后参考教程:Java写入VictoriaMetrics进行数据写入即可。