首页 > 其他分享 >vminsert 写

vminsert 写

时间:2024-03-01 10:44:05浏览次数:24  
标签:headers vminsert Label newBuilder add build Types

public boolean writeMetrics(String metricFamily, String help, List<VictoriaMetric> victoriaMetricList) {
try {
if(metricFamily == null || help == null || CollectionUtils.isEmpty(victoriaMetricList)){
throw new RuntimeException("所有参数不可空!");
}
Remote.WriteRequest.Builder writeRequestBuilder = Remote.WriteRequest.newBuilder();
Types.MetricMetadata.Builder builder = Types.MetricMetadata.newBuilder();
builder.setType(Types.MetricMetadata.MetricType.GAUGE);
builder.setMetricFamilyName(metricFamily);
builder.setHelp(help);
Types.MetricMetadata metricMetadata = builder.build();
writeRequestBuilder.addMetadata(metricMetadata);
//必须要有 metric_name
for (VictoriaMetric victoriaMetric: victoriaMetricList){
Types.TimeSeries.Builder timeSeriesBuilder = Types.TimeSeries.newBuilder();
Types.Label metricNameLabel = Types.Label.newBuilder().setName("__name__").setValue(victoriaMetric.getMetricName()).build();//metrics name
List<Types.Label> labelList = new ArrayList<>();
labelList.add(metricNameLabel);
if(MapUtils.isNotEmpty(victoriaMetric.getTags())){
for(Map.Entry<String,String> entry : victoriaMetric.getTags().entrySet()){
Types.Label label = Types.Label.newBuilder().setName(entry.getKey()).setValue(entry.getValue()).build();
labelList.add(label);
}
}
Types.Label time = Types.Label.newBuilder().setName("datatime").setValue(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))).build();
labelList.add(time);
Types.Sample sample = Types.Sample.newBuilder().setTimestamp(System.currentTimeMillis()).setValue(victoriaMetric.getMetricValue()).build();
timeSeriesBuilder.addAllLabels(labelList);
timeSeriesBuilder.addSamples(sample);
writeRequestBuilder.addTimeseries(timeSeriesBuilder.build());
}
Remote.WriteRequest writeRequest = writeRequestBuilder.build();
byte[] compressedMessage = Snappy.compress(writeRequest.toByteArray());
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Encoding", "snappy");
headers.add("X-Prometheus-Remote-Write-Version", "0.1.0");
headers.add("Content-Type","application/x-protobuf");
headers.add("Content-Encoding", "snappy");
HttpEntity requestEntity = new HttpEntity(compressedMessage, headers);
ResponseEntity<Object> exchange = restTemplate.exchange(vminsertUrl+"/prometheus/api/v1/write", HttpMethod.POST, requestEntity, Object.class);
log.info(JSONObject.toJSONString(exchange));
if(exchange.getStatusCode().is2xxSuccessful() ){
return true;
}else{
return false;
}
} catch (Exception e) {
log.error("------writeBatchMetrics victoriaMetricList:{}",JSONObject.toJSONString(victoriaMetricList),e);
return false;

}
}

 

public class VictoriaMetric{

private String metricName;
private double metricValue;
private Map<String,String> tags;

}

标签:headers,vminsert,Label,newBuilder,add,build,Types
From: https://www.cnblogs.com/xiamingqing/p/18046458

相关文章