OpenTSDB数据写入 - 数据库其他综合

首页 > 教程中心 > Mysql教程 > OpenTSDB数据写入 - 数据库其他综合

发表文章

OpenTSDB数据写入 - 数据库其他综合

作者:用户 来源:互联网 时间:2017-03-13 09:24:46

数据库 openTsDb OpenTSDB数据写入 导入数据方式

摘要: OpenTSDB支持几种写入方式。包括Telnet API、HTTP API、import方式、客户端采集器(tcollector/telegraf)。Telnet适合测试用,tcollector/telegraf是日志采集客户端可用于流式加载日志,import方式适合批量导入数据。当然,最后还有一种方式就是直接写入Hbase(官网不推荐),这样OpenTSDB也可以直接展示数据。一、创建met...

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

尝试将数据点写入存储。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 Put

此端点允许在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状态码。响应解析说明和响应示例如下图所示:

 四、导入数据方式:批量导入

Import命令允许将时间序列数据批量加载到OpenTSDB中。可提供一个或多个文件,OpenTSDB将解析和加载数据。数据必须和Telnet put的数据格式一致,文本文件中每一行作为一个数据点。此外,文件还可以可选地使用GZip压缩,并且以.gz扩展名结束。

1 输入格式

路径可以是相对路径,也可以是绝对路径。

import path [...paths]
import /home/hobbes/timeseries1.gz /home/hobbes/timeseries2.gz

2 参数说明

格式和Telnet 接口相同。

    []

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_host
mymetric.test.data 1479303679 0.909297426826 host=xyd_host
mymetric.test.data 1479303680 0.14112000806 host=xyd_host
mymetric.test.data 1479303681 -0.756802495308 host=xyd_host
mymetric.test.data 1479303682 -0.958924274663 host=xyd_host
mymetric.test.data 1479303683 -0.279415498199 host=xyd_host
mymetric.test.data 1479303684 0.656986598719 host=xyd_host
mymetric.test.data 1479303685 0.989358246623 host=xyd_host
mymetric.test.data 1479303686 0.412118485242 host=xyd_host
mymetric.test.data 1479303687 -0.544021110889 host=xyd_host
mymetric.test.data 1479303688 -0.999990206551 host=xyd_host
mymetric.test.data 1479303689 -0.536572918 host=xyd_host

 五、导入数据方式:Tcollector/Telegraf

这里使用Tcollect收集,Telegraf不做演示。Tcollector是一个客户端程序,用来收集本机的指标数据,并将数据发送到OpenTSDB。

GitHub地址:https://github.com/OpenTSDB/tcollector/

官方地址:https://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 sys
import time
import math
from collectors.lib import utils

COLLECTION_INTERVAL = 5  # seconds

def getValue(num):
    return math.sin(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数据写入、导入数据方式、以便于您获取更多的相关信息。

猜你喜欢

转载自blog.csdn.net/wangshuminjava/article/details/86480451