本文主要介绍在时序数据库中进行自定义分析后使用定时SQL。通过定时执行SQL查询,可以对时序数据进行灵活、高效的分析处理。
前提条件
已经采集数据到MetricStore,具体操作,请参见指标数据采集(Metric)。
时序库中创建定时SQL任务
登录日志服务控制台。在Project列表区域,单击目标Project。
在 页签中,单击目标MetricStore。
- ,系统将跳转到自定义分析页面。在自定义分析页面,输入SQL查询分析语句。SQL查询分析语法请参见
在时序数据的SQL语法中,FROM的表名只能为{metrics_store_name}.prom,
{metrics_store_name}
为采集到数据的源MetricStore名称。表名两端的双引号('''')需要保留。例如* | SELECT * FROM "my_metric_store.prom" WHERE __name__ != ''
。查询结果字段说明如下:字段
字段类型
说明
示例
__name__
varchar
Metric名称。
nginx_ingress_controller_response_size
__labels__
map<varchar, varchar>
Label信息,格式为
{key}#$#{value}|{key}#$#{value}|{key}#$#{value}
。app#$#ingress-nginx|controller_class#$#nginx|controller_namespace#$#kube-system|controller_pod#$#nginx-ingress-controller-589877c6b7-hw9cj
__time_nano__
bigint
时间戳,单位为纳秒。
1585727297293000000
__value__
double
某个时间点对应的值。
36.0
在自定义分析页面,如果想将查询分析结果保存为定时SQL,可以单击另存为定时SQL。
自定义分析页面执行 SQL查询分析语句后,本质上是将时序数据转为了日志数据,您可将查询结果通过定时SQL导入到新的日志库或时序库。
在创建定时SQL面板中,写入模式分为日志库导入日志库和日志库导入时序库。
与导入日志库不同的是,时序库对数据格式及数据类型有一定的要求,如下:
指标字段:日志数据中应包含可以转换为时序数据库指标的字段,例如数值型字段(如计数、平均值等)。这些字段将被用于生成时序数据库中的指标数据。
标签字段(可选):如果需要对时序数据进行更细粒度的分类或查询优化,建议在日志数据中添加标签字段(Labels)。这些字段可以在定时SQL任务中通过附加静态标签的方式增强数据局部性。
时间字段:日志数据必须包含时间戳字段(如__time__),用于标识每条日志的时间信息。如果未在SQL代码中定义__time__字段,默认会使用调度窗口的开始时间作为时间戳。
避免__name__、__labels__、__value__直接配置到指标列或Lables。
数据处理常用 - SQL函数
element_at()
__labels__可使用element_at函数获取其中某个Key的值,例如element_at(__labels__, 'key')。
示例1
查询和分析全部数据。
*| SELECT * FROM "my_metric_store.prom" WHERE __name__ != ''
示例2
针对指标 http_request_count,查询__labels__中'domain'值为www.example.com的数据,并对__value__字段进行求和计算。
*| SELECT sum(__value__) FROM "my_metric_store.prom" WHERE __name__='http_request_count' and element_at(__labels__, 'domain')='www.example.com'
示例3
针对指标 http_request_count,查询__labels__中 'domain'值为www.example.com的数据,并对__value__字段按小时粒度执行聚合求和计算。
*| SELECT sum(__value__),date_trunc('hour', __time_nano__/1000000) as t FROM "my_metric_store.prom" WHERE __name__='http_request_count' and element_at(__labels__, 'domain')='www.example.com' GROUP BY t ORDER BY t DESC
split_to_map()
__labels__可使用split_to_map函数进行拆分,组合成map数据结构。
示例
* | select split_to_map(__labels__, '|', '#$#') as labels, __name__ as metric, __value__ as value, __time_nano__ as time FROM "test-c.prom" where __name__ != ''
相关内容
使用SQL查询时序库示例: