由于OpenTSDB没有支持Java的SDK进行调用,所以基于Java开发OpenTSDB的调用将要依靠HTTP请求的方式进行。

1.毫秒级数据写入

/api/put:通过POST方式插入JSON格式数据,将毫秒级的时间戳赋值给timestamp参数即可,JSON格式:

{
"metric":"self.test",
"timestamp":1567675709879,
"value":,
"tags":{
"host":"web1"
}
}

Java中毫秒级时间戳获取方式:

// 获取当前时间的Unix时间戳
long millisecond = System.currentTimeMillis();
long millisecond2 = DateTimeUtil.stringLongToMillisecond("2019/09/05 17:28:29:879"); // 日期时间格式字符串转换为(Unix时间戳)长整型类型
public static long stringLongToMillisecond(String string) throws Exception {
return stringLongToDate(string).getTime();
} // 日期时间格式字符串转换为Date类型
public static Date stringLongToDate(String string) throws Exception {
return sdfLong.parse(string);
} private static SimpleDateFormat sdfLong = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss:SSS");

2.毫秒级数据查询

主要是设置msResolution这个参数,如果该字段为false,则同一秒内的点将按照 aggregator 指定的方式聚合得到该秒的最终值

(在查询时默认返回秒级数据(按照查询中指定的聚合方式对 1秒内的时序数据进行采样聚合,形成最终结果))

/api/query:可以选择 Get 或者 Post 两种方式,推荐使用 Post 方式,请求JSON 格式:

{
"start": 1456123705, // 该查询的起始时间
"end": 1456124985, // 该查询的结束时间
"globalAnnotation": false, // 查询结果中是否返回 global annotation
"noAnnotations": false, // 查询结果中是否返回 annotation
"msResolution": true, // 返回的点的精度是否为毫秒级,如果该字段为false,
// 则同一秒内的点将按照 aggregator 指定的方式聚合得到该秒的最终值
"showTSUIDs": true, // 查询结果中是否携带 tsuid
"showQuery": true, // 查询结果中是否返回对应的子查询
"showSummary": false, // 查询结果中是否携带此次查询时间的一些摘要信息
"showStats": false, // 查询结果中是否携带此次查询时间的一些详细信息
"delete": false, // 注意:如果该值设为true,则所有符合此次查询条件的点都会被删除
"queries": [
// 子查询,为一个数组,可以指定多条相互独立的子查询
]
}

子查询格式:

{
"metric": "JVM_Heap_Memory_Usage_MB", // 查询使用的 metric
"aggregator": "sum", // 使用的聚合函数
"downsample": "1ms", // 采样时间间隔和采样函数
"tags": { // tag组合,在OpenTSDB 2.0 中已经标记为废弃
// 推荐使用下面的 filters 字段
"host": "server01"
},
"filters": [], // TagFilter,下面将详细介绍 Filter 相关的内容
"explicitTags": false, // 查询结果是否只包含 filter 中出现的 tag
"rate": false, // 是否将查询结果转换成 rate
"rateOption": {} // 记录了 rate 相关的参数,具体参数后面会进行介绍
}

3.测试结果

向OpenTSDB中插入两条时间相差1ms的数据

分别采用秒级和毫秒级对该时间段进行查询,结果:

秒级查询结果:[{"metric":"metric1","tags":{"tag1":"test","tag2":"mort"},"aggregateTags":[],"dps":{"1567675709":43.0}}]
毫秒级查询结果:[{"metric":"metric1","tags":{"tag1":"test","tag2":"mort"},"aggregateTags":[],"dps":{"1567675709879":21.0,"1567675709880":22.0}}]

秒级查询返回一条数据(将两条进行聚合,代码中zimsum方式,返回21+22)

毫秒级查询直接返回所有数据,无聚合、降采

效果图:

OpenTSDB查询和写入毫秒级数据-LMLPHP

参考:

https://blog.csdn.net/zx711166/article/details/80913861

https://github.com/shifeng258/opentsdb-client

05-07 15:34