开启本地安装的opentsdb服务,首先构造一段数据,一共8个点,插入OpenTSDB,代码如下:
# coding:utf-8
import requests
payload = {
"metric": "sys.cpu.data",
"timestamp": '1490586540',
"value": '29',
"tags": {
"host": "web01"
}
}
payload1 = {
"metric": "sys.cpu.data",
"timestamp": '1490586541',
"value": '30',
"tags": {
"host": "web01"
}
}
payload2 = {
"metric": "sys.cpu.data",
"timestamp": '1490586542',
"value": '29',
"tags": {
"host": "web02"
}
}
payload3 = {
"metric": "sys.cpu.data",
"timestamp": '1490586543',
"value": '23',
"tags": {
"host": "web01"
}
}
payload4 = {
"metric": "sys.cpu.data",
"timestamp": '1490586544',
"value": '23',
"tags": {
"host": "web02"
}
}
payload5 = {
"metric": "sys.cpu.data",
"timestamp": '1490586545',
"value": '33',
"tags": {
"host": "web01"
}
}
payload6 = {
"metric": "sys.cpu.data",
"timestamp": '1490586546',
"value": '22',
"tags": {
"host": "web02"
}
}
payload7 = {
"metric": "sys.cpu.data",
"timestamp": '1490586547',
"value": '23',
"tags": {
"host": "web02"
}
}
ls = [payload, payload1, payload2, payload3, payload4, payload5, payload6, payload7]
def send_json(json):
s = requests.Session()
r = s.post("http://localhost:4242/api/put?details", json=json)
return r.text
if __name__ == "__main__":
print send_json(ls)
一个最简单的查询必须包括,开始时间、指标名、聚合函数,如下图所示,详细信息可参考官网查询和读取数据:
我这里用的是Python Request包模拟HTTP请求,进行数据查询!!这里分get请求和post请求两种方式。
# -*- coding: utf-8 -*-
import requests
def get_data_by_get(query):
r = requests.get("http://localhost:4242/api/query?" + query)
if len(r.json()) > 0:
dps = r.json()[0]['dps']
return dps
else:
return None
if __name__ == "__main__":
print get_data_by_get('start=1490586530&m=sum:sys.cpu.data')
{u’1490586546’: 22, u’1490586547’: 23, u’1490586544’: 51, u’1490586545’: 56, u’1490586542’: 56, u’1490586543’: 49, u’1490586540’: 29, u’1490586541’: 30}
# -*- coding: utf-8 -*-
import requests
def get_data_by_post(cond_dic):
r = requests.post("http://localhost:4242/api/query", json=cond_dic)
if len(r.json()) > 0:
dps = r.json()[0]['dps']
return dps
else:
return None
def build_post_json():
cond_dic = {
"start": 1490586530,
# "end": 1489836195,
"queries": [
{
"aggregator": "sum",
"metric": "sys.cpu.data",
# "tags": {"host": "web01"}
},
]
}
return cond_dic
if __name__ == "__main__":
print get_data_by_post(build_post_json())
{u’1490586546’: 22, u’1490586547’: 23, u’1490586544’: 51, u’1490586545’: 56, u’1490586542’: 56, u’1490586543’: 49, u’1490586540’: 29, u’1490586541’: 30}
上面示例是基于Python的OpenTSDB查询和读取数据的基本实现,但是细心的朋友可以发现,插入数据的数值是:
1490586540 29
1490586541 30
1490586542 29
1490586543 23
1490586544 23
1490586545 33
1490586546 22
1490586547 23
1490586540 29
1490586541 30
1490586542 56
1490586543 49
1490586544 51
1490586545 56
1490586546 22
1490586547 23
关于host=web01和host=web02 两组时间序列原始数据的图形展示,可见本文的第一幅图所示。
在OpenTSDB自带的查询页面的中也可进行查询测试。
选择sum方式聚合:
选择zimsum方式聚合:
关于sum聚合和zimsum聚合的详细信息可参考官方Aggregation部分,其中也包含了其他的聚合方式,值得详细阅读。
本文展示了opentsdb数据查询的基本实现,若有更高级的查询需求,可使用其他查询组件实现。此外,本文还展示了不同的聚合方式对查询结果的影响,主要是“sum”、“zimsum”聚合的使用。这里是踩了坑的,之前对使用“sum”聚合得到的结果,十分不解,还是得好好阅读官方文档了。
参考资料都是官方的,个人认为以下资料比较重要,需要好好阅读:
聚合函数:
http://opentsdb.net/docs/build/html/user_guide/query/aggregators.html
查询接口介绍:
http://opentsdb.net/docs/build/html/user_guide/query/index.html
http://opentsdb.net/docs/build/html/api_http/query/index.html
查询示例:
http://opentsdb.net/docs/build/html/user_guide/query/examples.html