写在前面,这里是补充下java代码的一些实现,感谢同事w给我提供的帮助。参考文献和其他文章列表放在末尾。
这篇文章讲的OpenTSDB如何存储数据的java实现,实现步骤很简单,也有其他一些方法,不过post应该是最普遍的:
第一创建一个对post请求进行分析的响应类,可以对返回响应码进行分析。进一步可以获取响应内容和实现重试发送的功能。
第二是将实体数据转化为opentsdb标准json数据格式并存入,并用post请求发送。
第一创建一个对post请求进行分析的响应类,可以对返回响应码进行分析。进一步可以获取响应内容和实现重试发送的功能。
/**
* post请求
*
* @param url 请求url
* @param data json类型字符串数据
* @return 响应内容
*/
public static boolean postReturnBoolean(String url, String data) throws Exception {
//成功响应码开头
final String successCodeHead = "2";
//创建客户端
CloseableHttpClient client = getClient();
HttpPost post = new HttpPost(url);
// 构造请求数据
StringEntity entity = new StringEntity(data, ContentType.APPLICATION_JSON);
post.setEntity(entity);
//HTTP响应、响应状态码
CloseableHttpResponse response = null;
Integer statusCode = null;
String responseContent = null;
try {
//执行post请求
response = client.execute(post);
//获取响应状态码
statusCode = response.getStatusLine().getStatusCode();
LOGGER.info("response code:" + statusCode);
if (!successCodeHead.equals(statusCode.toString().substring(0, 1))) {
HttpEntity httpEntity = response.getEntity();
responseContent = EntityUtils.toString(httpEntity, "UTF-8");
JSONObject error = JSON.parseObject(responseContent);
String errorMessage = error.getJSONObject("error").getString("message");
LOGGER.error(errorMessage);
throw new Exception(errorMessage);
} else {
return true;
}
} catch (ClientProtocolException e) {
LOGGER.error("Http Client ClientProtocolException",e);
} catch (IOException e) {
LOGGER.error("Http Client IOException",e);
} finally {
try {
response.close();
} catch (Exception e) {
LOGGER.error("响应关闭失败",e);
}
}
return false;
}
第二是将实体数据转化为opentsdb标准json数据格式并存入,并用post请求发送。
public boolean put2tsdb(List<DataPutEntity> data) throws Exception {
List<OpenTsdbDataEntity> putData = new ArrayList<>();
//转为opentsdb标准数据格式
for (DataPutEntity onePieceData : data) {
//获取属性,准备做Mertic
String Foo1 = onePieceData.getFoo1();
//获取两个其他属性,做tags
String Foo2= onePieceData.getFoo2();
String Foo3= onePieceData.getFoo3();
//时间戳
Long timestamp = onePieceData.getTimestamp();
//值
Float value = onePieceData.getValue();
//质量标签
Integer quality = onePieceData.getQuality();
//值数据
OpenTsdbDataEntity valueData = new OpenTsdbDataEntity();
valueData.setMetric(stdCode);
HashMap<String, String> tags = new HashMap<>();
tags.put(Foo2_TAG_KEY, Foo2);
tags.put(Foo3_TAG_KEY, Foo3);
valueData.setTags(tags);
valueData.setTimestamp(timestamp);
valueData.setValue(value);
putData.add(valueData);
}
String dataJson = JSON.toJSONString(putData);
//显示拼装数据的json,便于监控
LOGGER.info("输入openTSDB的数据是"+dataJson);
//通过Http API发送数据 URL_PUT=IP:端口/api/put
boolean isSuccessful = HttpClientPost.postReturnBoolean(URL_PUT, dataJson);
//返回是否发送成功标志
return isSuccessful;
}
OpenTSDB系列
OpenTSDB的/ API / PUT(opentsdb的输入的api)简介https://blog.csdn.net/jyj1100/article/details/81323705
OpenTSDB使用/ API / PUT进行数据存储的java实现https://blog.csdn.net/jyj1100/article/details/81330623
(转)opentsdb查询的简介——基础知识和UI操作https://blog.csdn.net/jyj1100/article/details/81324017
OpenTSDB的/ API / query(opentsdb的查询的api)简介(一)https://blog.csdn.net/jyj1100/article/details/81326660
OpenTSDB的/ API / query(opentsdb的查询的api)简介(二)https://blog.csdn.net/jyj1100/article/details/81329290
OpenTSDB使用/ API / query进行数据查询的java实现https://blog.csdn.net/jyj1100/article/details/81347817
其他OpenTSDB系列文章见
OpenTSDB系列目录https://blog.csdn.net/jyj1100/article/details/83450282