OpenTSDB数据写入
来源:互联网 发布:公安部网络安全保卫局 编辑:程序博客网 时间:2024/06/05 11:35
OpenTSDB支持几种写入方式。包括Telnet API、HTTP API、import方式、客户端采集器(tcollector/telegraf)。Telnet适合测试用,tcollector/telegraf是日志采集客户端可用于流式加载日志,import方式适合批量导入数据。当然,最后还有一种方式就是直接写入Hbase(官网不推荐),这样OpenTSDB也可以直接展示数据。
一、创建metric
两种方式,选择其一即可。不管何种导入方式都必须先设置metric。
1. 事先在opentsdb中创建metric。如生成两个名为mymetric.data_1和mymetric.data_2的metric。如下:
tsdb mkmetric mymetric.data_1 mymetric.data_2
2.设置自动生成metric。修改opentsdb.conf设置:
tsd.core.auto_create_metrics = true
二、Telnet Put 方式
参考:http://opentsdb.net/docs/build/html/api_telnet/put.html
尝试将数据点写入存储。Telnet API无法处理UTF-8字符,可改用/api/put方法或直接使用Java API。命令格式如下:
put <metric> <timestamp> <value> <tagk_1>=<tagv_1>[ <tagk_n>=<tagv_n>]
终端运行示例:
echo "put mymetric.test.data 1295643636 48 a=foo" | nc -w 15 tsdHost tsdPort
三、HTTP API Put 方式
参考:http://opentsdb.net/docs/build/html/api_http/put.html
此端点允许在OpenTSDB中通过HTTP存储数据,可替代Telnet接口。放置请求只能通过与POST方法关联的内容来执行。
为了节省带宽,put API允许客户端在单个请求中存储多个数据点。数据点之间可以毫无关联。每个数据点被单独处理,并且一个数据的错误将不会影响良好数据的存储。这意味着如果你的请求有100个数据点,其中1个数据点有错误。那么该错误数据点会被拒绝写入,但其余的99个数据点仍将被写入。
虽然API每个请求都支持多个数据点,但API在处理完每个请求之前不会返回。这意味着必须验证度量和标记名称/值,解析值,并将数据排队等待存储。如果你的put请求具有大量的数据点,则API可能需要很长时间才能响应,尤其是如果OpenTSDB必须将UID分配给标记名称或值。因此,最好限制每个请求的最大数据点数; 50每个请求是一个好的起点。
另一个建议是在HTTP客户端上启用keep-alives,这样您可以在每次放置数据时重新使用与服务器的连接。
1 HTTP 请求解析
2 数据写入示例
- 单点数据写入
{ "metric": "sys.cpu.nice", "timestamp": 1346846400, "value": 18, "tags": { "host": "web01", "dc": "lga" }}
- 多点数据写入
多点数据写入必须被包装成数组形式
[ { "metric": "sys.cpu.nice", "timestamp": 1346846400, "value": 18, "tags": { "host": "web01", "dc": "lga" } }, { "metric": "sys.cpu.nice", "timestamp": 1346846400, "value": 9, "tags": { "host": "web02", "dc": "lga" } }]
3 返回响应
默认情况下,如果所有数据点都已成功存储,put端点将使用HTTP 204状态码进行响应,而无内容。如果一个或多个数据点有错误,API将在内容中返回一个带有错误消息的400状态码。响应解析说明和响应示例如下图所示:
四、批量导入
参考:http://opentsdb.net/docs/build/html/user_guide/cli/import.html
Import命令允许将时间序列数据批量加载到OpenTSDB中。可提供一个或多个文件,OpenTSDB将解析和加载数据。数据必须和Telnet put的数据格式一致,文本文件中每一行作为一个数据点。此外,文件还可以可选地使用GZip压缩,并且以.gz扩展名结束。
1 输入格式
路径可以是相对路径,也可以是绝对路径。
import path [...paths]import /home/hobbes/timeseries1.gz /home/hobbes/timeseries2.gz
2 参数说明
格式和Telnet 接口相同。
<metric> <timestamp> <value> <tagk=tagv> [<tagkN=tagvN>]
- metric Is the name of the metric. Note that the metric name may not include spaces.
- timestamp Is the absolute timestamp of the data point in seconds or milliseconds
- value Is the value to store
- tagk=tagv Is a pair of one or more space sparate tag name and value pairs. Note that the tags may not have spaces in them.
Example:
sys.cpu.user 1356998400 42 host=web01 cpu=0
代码示例如下:
./tsdb import --config=/Applications/opentsdb/src/opentsdb.conf /Applications/opentsdb/my_test_data/opentsdb.txt
文件的内容格式如下,其中时间戳必须升序:
mymetric.test.data 1479303678 0.841470984808 host=xyd_hostmymetric.test.data 1479303679 0.909297426826 host=xyd_hostmymetric.test.data 1479303680 0.14112000806 host=xyd_hostmymetric.test.data 1479303681 -0.756802495308 host=xyd_hostmymetric.test.data 1479303682 -0.958924274663 host=xyd_hostmymetric.test.data 1479303683 -0.279415498199 host=xyd_hostmymetric.test.data 1479303684 0.656986598719 host=xyd_hostmymetric.test.data 1479303685 0.989358246623 host=xyd_hostmymetric.test.data 1479303686 0.412118485242 host=xyd_hostmymetric.test.data 1479303687 -0.544021110889 host=xyd_hostmymetric.test.data 1479303688 -0.999990206551 host=xyd_hostmymetric.test.data 1479303689 -0.536572918 host=xyd_host
五、Tcollector/Telegraf 客户端写入
这里使用Tcollect收集,Telegraf不做演示。Tcollector是一个客户端程序,用来收集本机的指标数据,并将数据发送到OpenTSDB。
Tcollector GitHub地址:https://github.com/OpenTSDB/tcollector/
Tcollector 官方地址:http://opentsdb.net/docs/build/html/user_guide/utilities/tcollector.html
关于Tcollector安装和介绍,在此就不详细说明了。这里展示的是按照官方要求,直接用python定义一个收集器,向opentsdb发送数据。
运行:
sudo ./tcollector start
用Python自定义一个mycollector.py,注意文件权限为755,也可直接设为777。
#!/usr/bin/env python import sysimport timeimport mathfrom collectors.lib import utilsCOLLECTION_INTERVAL = 5 # secondsdef getValue(num): return math.cos(num)def main(): utils.drop_privileges() i = 100 while True: print("xyd.test.cos %d %s"% (int(time.time()), getValue(i))) i += 0.1 sys.stdout.flush() time.sleep(COLLECTION_INTERVAL)if __name__ == "__main__": sys.stdin.close() sys.exit(main())
执行效果如下,生成一个只有正值的cos函数,貌似opentsdb不显示负数的:
- opentsdb学习-写入数据
- OpenTsdb 写入数据
- opentsdb 数据写入要点
- OpenTSDB数据写入
- 关于OpenTSDB的Writing Data数据写入
- Opentsdb插入数据导致RegionServer写入请求分布不均匀
- OpenTSDB数据写入HTTP API接口,统计总记录数
- OpenTSDB HTTP 写入示例
- Opentsdb http 写入常见问题
- Opentsdb插入数据导致RegionServer写入请求分布不均匀(二):Opentsdb 预切分Hbase中 tsdb表
- OpenTSDB 定时批量写入示例
- OpenTSDB 安装 启动 数据存储
- opentsdb
- opentsdb采集的数据存放在哪里
- OpenTSDB安装,配置,数据存储介绍
- OpenTSDB数据采集器tcollector介绍及运行说明
- 通过postman向OpenTSDB插入数据并查询
- java封装openTsDb连接以及查询,插入数据
- 配置多个git远程仓库的ssh-Key切换
- Android app 与 ActivityManagerService的通信原理(简化版)
- 199. Binary Tree Right Side View (Medium)
- Notes of Daily Work
- svhost占用内存过高
- OpenTSDB数据写入
- 那你不是也没休息
- 114. Flatten Binary Tree to Linked List (Medium)
- 自己写的C语言通用日志框架,可以控制日志输出等级
- 文章标题
- 引用块内容
- S3C2440A
- 验证码实现及简单验证码校对
- Spring Boot 1.4 使用log4j错误