由于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)

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

效果图:

参考:

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

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

OpenTSDB查询和写入毫秒级数据的更多相关文章

  1. OpenTSDB在HBase中的底层数据结构设计

    0.时序数据库 时间序列(Time Series):是一组按照时间发生先后顺序进行排列的数据点序列,通常一组时间序列的时间间隔为一恒定值(如1秒,5分钟,1小时等). 时间序列数据可被简称为时序数据. ...

  2. 双汇大数据方案选型:从棘手的InfluxDB+Redis到毫秒级查询的TDengine

    双汇发展多个分厂的能源管控大数据系统主要采用两种技术栈:InfluxDB/Redis和Kafka/Redis/HBase/Flink,对于中小型研发团队来讲,无论是系统搭建,还是实施运维都非常棘手.经 ...

  3. Elasticsearch如何做到亿级数据查询毫秒级返回?

    阅读本文大概需要 6 分钟. 如果面试的时候碰到这样一个面试题:ES 在数据量很大的情况下(数十亿级别)如何提高查询效率? 这个问题说白了,就是看你有没有实际用过 ES,因为啥?其实 ES 性能并没有 ...

  4. ES 调优查询亿级数据毫秒级返回!怎么做到的?--文件系统缓存

    一道面试题的引入: 如果面试的时候碰到这样一个面试题:ElasticSearch(以下简称ES) 在数据量很大的情况下(数十亿级别)如何提高查询效率? 这个问题说白了,就是看你有没有实际用过 ES,因 ...

  5. 使用bitset实现毫秒级查询

    前言 因为业务要求api的一次请求响应时间在10ms以内,所以传统的数据库查询操作直接被排除(网络io和磁盘io).通过调研,最终使用了bieset,目前已经正常运行了很久 *** bitset介绍 ...

  6. linq根据传入数据集合查询对应子级数据

    工作中经常用到的linq根据传入数据集合查询对应子级数据,整理共享,希望大家都能用得上,代码中doublesArray 为父节点对应ID数据集合,再根据ID数据集合查询全部子级数据. //获取缓存数据 ...

  7. linq依据传入数据集合查询相应子级数据

    工作中经经常使用到的linq依据传入数据集合查询相应子级数据,整理共享,希望大家都能用得上,代码中doublesArray 为父节点相应ID数据集合,再依据ID数据集合查询所有子级数据. //获取缓存 ...

  8. python 连接数据库,查询结果写入数据到excel

    使用Python链接数据库查询数据,并将查询结果写入到Excel中,实现方法上主要有两步,第一,查数据,第二,写Excel. 一.导入需要的包 import time import xlwt from ...

  9. mysql搭建亿级cmd5数据库,毫秒级查询 完全过程

    前言: 最近也在玩数据库,感觉普通机子搞数据库,还是差了点,全文查找,慢的要查一分钟更久. 但是搞cmd5库很不错,亿级数据库,毫秒级. qq 944520563好吧,下面开始,首先你得需要一个mys ...

随机推荐

  1. 阿里云服务器(Linux)上打开新端口

    1.配置安全组: 2.开放防火墙规则 查看想开的端口是否已开 # firewall-cmd --query-port=8888/tcp    提示no表示未开 开永久端口号 firewall-cmd ...

  2. 51 Nod 阶乘后面0的数量

    1003 阶乘后面0的数量  基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题  收藏  关注 n的阶乘后面有多少个0? 6的阶乘 = 1*2*3*4*5*6 = 72 ...

  3. 【CF1263E】Editor(线段树,栈)

    题意:有一个无限长度的文本编辑器,刚开始没有内容,光标在第一格,接下来有n个操作,操作可能有3种: 1.光标左移一格,如果已经在第一格则不动 2.光标右移一格 3.将当前光标所在格的字符改成输入的字符 ...

  4. 深入理解Vuex 模块化(module)

    todo https://www.jb51.net/article/124618.htm

  5. SNMP命令

    snmp命令 配置管理网络协议Weblogic项目管理Cisco Snmputil 命令 Snmputil是一个命令行下的软件,使用语法如下: usage: snmputil get|getnext| ...

  6. CodeForge源码分享

    <a target=_blank href=http://www.codeforge.cn/point/?recoid=2215596>CodeForge源码分享</a>

  7. spark 笔记 9: Task/TaskContext

    DAGScheduler最终创建了task set,并提交给了taskScheduler.那先得看看task是怎么定义和执行的. Task是execution执行的一个单元. Task: execut ...

  8. CentOS 6.4编译安装和部署Zabbix 2.0版本监控(中文)

    [一].zabbix简介 zabbix是一个基于web界面的提供分布式系统监视以及网络监视功能的企业级开元解决方案 zabbix由2部分构成,zabbix_server和可选组件zabbix_agen ...

  9. wordpress 更新时需要FTP 服务器账户密码的解决方法

    首先进入 apache下的wordpress 的目录下 (这是apache服务器默认安装的路径) cd /var/www 接着,给html整个文件夹进行赋值权限,如果不赋予权限 更新的时候会报权限不足 ...

  10. [MVC HtmlHelper简单了解]

    HtmlHelper用来在视图中显示Html控件,简化代码,使用方便!,降低了View视图中的代码复杂度!可以更快速的完成工作! 以下是一些常用 的html标签 辅助方法 使用HTML辅助方法输出   ...