SPL函数

更新时间:2025-04-01 02:04:07

Logstore中的时序数据通过SPL指令处理后,可以调用时序SPL函数进行结果可视化。

函数列表

函数名称

说明

函数名称

说明

second_to_nano函数

时间转换函数:将秒级时间戳转为纳秒级,适用于高精度场景。

series_forecast函数

时间序列预测函数:基于历史数据预测未来趋势,适用于监控、分析和规划。

series_pattern_anomalies函数

异常检测函数:基于机器学习算法,识别时间序列中的异常点或异常模式,适用于监控、告警和数据分析等场景。

series_decompose_anomalies函数

时间序列分解与异常检测函数:基于时间序列分解算法,将原始数据拆分为趋势、季节性和残差分量,并通过统计方法分析残差分量以识别异常点,适用于实时监控、根因分析及数据质量检测等场景。

series_drilldown函数

用于时间序列分析的下钻函数,允许在时间分组统计的基础上,进一步对特定时间段内的数据进行细粒度分析。

second_to_nano函数

时间转换函数,用于将秒级时间戳转换为纳秒级时间戳。它通常用于处理日志中的时间字段,尤其是在需要更高精度时间戳的场景下。

重要
  • 精度:确保数据库和应用程序支持足够的精度,以处理纳秒级别的时间数据。

  • 数据类型:需要选择合适的数据类型来存储纳秒级的数据,比如 BIGINT,以避免溢出或精度丢失。

语法

second_to_nano(seconds)

参数说明

参数

说明

参数

说明

seconds

秒级时间戳(可以是整数或浮点数)。

返回值

返回对应的纳秒级时间戳(以整数形式表示)。

示例

统计不同时间段(纳秒级)不同请求的数量。

  • 查询分析语句

    * | extend ts = second_to_nano(__time__)
    | stats count=count(*) by ts,request_method
  • 输出结果

    image

series_forecast函数

用于时间序列预测。它基于历史时间序列数据,利用机器学习算法对未来的时间点进行预测。该函数常用于监控、趋势分析和容量规划等场景。

使用限制

  • 已经通过make-series构造出series格式数据,并且时间单位为纳秒。

  • 每行的时间点数量至少为31个 。

语法

series_forecast(array(T) field, bigint periods)

series_forecast(array(T) field, bigint periods, varchar params)

参数说明

参数

说明

参数

说明

field

输入时间序列的指标列。

periods

期望预测结果中时间点的数量。

params

可选。算法参数,json 格式。

返回值

row(
  time_series array(bigint),
  metric_series array(double),
  forecast_metric_series array(double),
  forecast_metric_upper_series array(double),
  forecast_metric_lower_series array(double),
  forecast_start_index bigint,
  forecast_length bigint,
  error_msg varchar)

列名

类型

说明

列名

类型

说明

time_series

array(bigint)

纳秒级时间戳数组。包含输入时间段的时间戳和预测时间段的时间戳。

metric_series

array(double)

metric 数组,长度和 time_series 一致。

对原始输入 metric 进行修改(修改 NaN 等)并用 NaN 扩充预测时间段。

forecast_metric_series

array(double)

预测结果数组,长度和 time_series 一致。

包含对输入 metric 的拟合值以及预测时间段的预测值。

forecast_metric_upper_series

array(double)

预测结果上界数组,长度和 time_series 一致。

forecast_metric_lower_series

array(double)

预测结果下界数组,长度和 time_series 一致。

forecast_start_index

bigint

表示时间戳数组中预测时间段的起始下标。

forecast_length

bigint

表示时间戳数组中预测时间段时间点的数量。

error_msg

varchar

错误信息。为 null 则表示该行时间序列预测成功,否则展示失败原因。

示例

统计不同request_method接下来10个时间点的数量。

  • SPL语句

    * | extend ts = second_to_nano(__time__ - __time__ % 60)
      | stats latency_avg = max(cast(status as double)), inflow_avg = min(cast (status as double)) by ts, request_method
      | make-series   latency_avg  default = 'last',
                    inflow_avg default = 'last'
                    on ts 
                    from 'min' to 'max'
                     step '1m' 
                    by request_method
     | extend test=series_forecast(inflow_avg, 10)
  • 输出结果

    image

算法参数

"pred":"10min"

期望预测结果中时间点的间隔, 单位支持

D        daily frequency
H        hourly frequency
T, min   minutely frequency
S        secondly frequency

"uncertainty_config": {"interval_width": 0.9999}

  • uncertainty_config.interval_width 取值范围是 (0, 1),取值越大预测结果中上下界之间的范文越大

"seasonality_config":

{"seasons": [{"name": "month", "period": 30.5, "fourier_order": 1}]}

  • seasonality_config.seasons 中包含自定义的时序周期

    • name 周期名称

    • periods 每一个周期包含多少天

    • fourier_order 周期拟合强度

  • 服务默认设置了天、周和年周期,如果需要拟合其他周期,在 seasonality_config.seasons 中配置

series_pattern_anomalies函数

用于检测时间序列数据中异常模式。它基于机器学习算法,能够自动识别时间序列中的异常点或异常模式,适用于监控、告警和数据分析等场景。

使用限制

  • 已经通过make-series构造出series格式数据,并且时间单位为纳秒。

  • 每行的时间点数量至少为11个 。

语法

series_pattern_anomalies(array(T) metric_series)

参数说明

参数

说明

参数

说明

metric_series

输入时间序列的指标列,仅支持数值类型。

返回值

row(
  anomalies_score_series array(double),
  anomalies_type_series array(varchar)
  error_msg varchar)
) 

列名

类型

说明

列名

类型

说明

anomalies_score_series

array(double)

异常分数序列,与输入时间序列相对应。范围为 [0,1] 代表每个时间点的异常分数。

anomalies_type_series

array(varchar)

异常类型描述序列,与输入时间序列相对应。代表每个时间点的异常类型。非异常的时间点表示为null。

error_msg

varchar

错误信息。值为null则表示该行时间序列异常检测成功,否则展示失败原因。

示例

检测当前时间点的序列是否有异常。

  • SPL语句

    * | extend ts = second_to_nano(__time__ - __time__ % 60)
      | stats latency_avg = max(cast(status as double)), inflow_avg = min(cast (status as double)) by ts, request_method
      | where request_method is not null
      | make-series   latency_avg  default = 'last',
                    inflow_avg default = 'last'
                    on ts 
                    from 'min' to 'max'
                     step '1m' 
                    by request_method
     | extend test=series_pattern_anomalies(inflow_avg)
  • 输出结果

    image

series_decompose_anomalies函数

用于时间序列分解和异常检测的函数。它基于时间序列分解算法,将原始时间序列数据拆分为趋势分量、季节性分量和残差分量,并通过分析残差分量来检测异常点。

使用限制

  • 已经通过make-series构造出series格式数据,并且时间单位为纳秒。

  • 每行的时间点数量至少为11个 。

语法

series_decompose_anomalies(array(T) metric_series)

series_decompose_anomalies(array(T) metric_series, varchar params)

参数说明

参数

说明

参数

说明

metric_series

输入时间序列的指标列。

params

可选。算法参数,json 格式。

返回值

row(
  metric_baseline_series array(double)
  anomalies_score_series array(double),
  anomalies_type_series array(varchar)
  error_msg varchar)
) 

列名

类型

说明

列名

类型

说明

metric_baseline_series

array(double)

算法拟合的 metric 数据。

anomalies_score_series

array(double)

异常分数序列,与输入时间序列相对应。范围为 [0,1] 代表每个时间点的异常分数。

anomalies_type_series

array(varchar)

异常类型描述序列,与输入时间序列相对应。代表每个时间点的异常类型。非异常的时间点表示为 null。

error_msg

varchar

错误信息。值为null则表示该行时间序列异常检测成功,否则展示失败原因。

示例

对所有时间线异常检测之后,保留最近 5 min 异常分数值大于等于0的时间线。

  • SPL语句

    * | extend ts = second_to_nano(__time__ - __time__ % 60)
      | stats latency_avg = max(cast(status as double)), inflow_avg = min(cast (status as double)) by ts, request_method
      | where request_method is not null
      | make-series   latency_avg  default = 'last',
                    inflow_avg default = 'last'
                    on ts 
                    from 'min' to 'max'
                     step '1m' 
                    by request_method
     | extend test=series_decompose_anomalies(inflow_avg, '{"confidence":"0.005"}')
     | extend anomalies_score_series = test.anomalies_score_series
     | where array_max(slice(anomalies_score_series, -5, 5)) >= 0
  • 输出结果

    image

算法参数

参数

类型

示例

描述

参数

类型

示例

描述

auto_period

string

"true"

只能设置 "true" 或 "false"。表示是否开启时序周期自动检测。如果设置为 "true",自定义的 period_num 和 period_unit 不生效。

period_num

string

"[1440]"

序列周期包含多少个时间点。可以输入多个周期长度,目前服务只考虑长度最长的一个周期。

period_unit

string

"[\"min\"]"

序列周期的每个时间点的时间单位。可以输入多个时间单位,时间单位的数量必须和设置的周期的数量相同。

period_config

string

"{\"cpu_util\": {\"auto_period\":\"true\", \"period_num\":\"720\", \"period_unit\":\"min\"}}"

如果需要针对不同的特征设置不同的周期,可以配置 period_config 字段,prediod_config 中的字段名为要设置的特征的名称,字段值为 object,在其中设置 auto_period,period_num,period_unit 三个字段。

trend_sampling_step

string

"8"

时序分解时对于趋势成分的下采样率,需要可以转换成正整数。采样率越大,趋势成分的拟合速度越快,趋势成分的拟合精度会降低。默认为 "1"。

season_sampling_step

string

"1"

时序分解时对于周期成分的下采样率,需要可以转换成正整数。采样率越大,周期成分的拟合速度越快,周期成分的拟合精度降低,默认为 "1"。

batch_size

string

"2880"

异常分析时使用滑动窗口的形式分段处理。batch_size 表示窗口的大小。窗口越小,分析的速度越快,准确度可能会降低。默认窗口的大小与序列的长度一致。

confidence

string

"0.005"

异常分析的敏感度,需要可以转换成浮点数,取值范围是(0,1.0)。数值越小,算法对异常的敏感度越低,检测到的异常数量减少。

confidence_trend

string

"0.005"

在分析趋势项时,对于异常的敏感度。设置该参数后自动忽略 confidence。数值越小,算法对于趋势项的异常的敏感度越低,趋势项检测到的异常数量减少。

confidence_noise

string

"0.005"

在分析残差项时,对于异常的敏感度。设置该参数后自动忽略 confidence。数值越小,算法对于残差项的异常的敏感度越低,残差项检测到的异常数量减少。

series_drilldown函数

用于时间序列分析的下钻函数,允许在时间分组统计的基础上,进一步对特定时间段内的数据进行细粒度分析。

语法

series_drilldown(array(varchar) label_0_array,array(varchar) label_1_array,array(varchar) label_2_array, ... ,array(array(bigint)) time_series_array,array(array(double)) metric_series_array,bigint begin_time,bigint end_time)

series_drilldown(array(varchar) label_0_array,array(varchar) label_1_array,array(varchar) label_2_array, ... ,array(array(bigint)) time_series_array,array(array(double)) metric_series_array,bigint begin_time,bigint end_time,varchar config)

参数说明

参数

说明

参数

说明

label_x_array

数组中每个元素为对应时间序列的label。函数重载最多支持 7 个 label array。

time_series_array

外层数组中每个元素为一个 time series。

metric_sereis_array

外层数组中每个元素为一个 metric series

begin_time

需要进行根因下探的开始时间点,一般设置为异常的开始时间,单位为纳秒。

end_time

需要进行根因下探的结束时间点,一般设置为异常的结束时间,单位为纳秒。

config

可选。算法参数,json 格式。

返回值

row(dirlldown_result varchar, error_msg varchar)

列名

类型

说明

列名

类型

说明

dirlldown_result

varchar

下探的结果,JSON格式。

error_msg

varchar

错误信息。为 null 则表示该行时间序列预测成功,否则展示失败原因。

示例

  • SPL语句

    *
    | extend ts= (__time__- __time__%60)*1000000000
    | stats access_count = count(1) by ts, Method, ProjectName
    | extend access_count = cast( access_count as double)
    | make-series   access_count = access_count default = 'null'
                    on ts
                    from 'sls_begin_time' to 'sls_end_time'
                    step '1m'
                    by Method, ProjectName
    | stats m_arr = array_agg(Method), ProjectName = array_agg(ProjectName), ts_arr = array_agg(__ts__), metrics_arr = array_agg(access_count)
    | extend ret = series_drilldown(ARRAY['Method', 'Project'], m_arr, ProjectName, ts_arr, metrics_arr, 1739192700000000000, 1739193000000000000, '{"fill_na": "1", "gap_size": "3"}')
    | project ret
  • 输出结果

    image

  • 本页导读 (1)
  • 函数列表
  • second_to_nano函数
  • 语法
  • 参数说明
  • 返回值
  • 示例
  • series_forecast函数
  • 使用限制
  • 语法
  • 参数说明
  • 返回值
  • 示例
  • series_pattern_anomalies函数
  • 使用限制
  • 语法
  • 参数说明
  • 返回值
  • 示例
  • series_decompose_anomalies函数
  • 使用限制
  • 语法
  • 参数说明
  • 返回值
  • 示例
  • 算法参数
  • series_drilldown函数
  • 语法
  • 参数说明
  • 返回值
  • 示例
AI助理

点击开启售前

在线咨询服务

你好,我是AI助理

可以解答问题、推荐解决方案等