跳转到主要内容
MoleSignal 用自研 evaluator(promql-parser + Arrow/DataFusion)在 metric 流上跑 PromQL。instant 与 range 查询均支持——range 查询按 [start, end] 步进、输出 matrix。本页是权威支持矩阵。

已支持

Range 向量函数(输入 metric[range])

rate、irate、increase、delta、idelta、deriv、predict_linear、resets、changes、holt_winters(别名 double_exponential_smoothing),以及全部 *_over_time:avg_over_time / min_over_time / max_over_time / sum_over_time / count_over_time / quantile_over_time / stddev_over_time / stdvar_over_time / last_over_time / present_over_time / mad_over_time。

聚合算子(含 by() / without())

sum、avg、min、max、count、stddev、stdvar、quantile、group、count_values、topk、bottomk、limitk、limit_ratio。

Histogram

histogram_quantile(q, sum by(le)(rate(metric_bucket[range]))):对 classic le bucket 线性插值。 histogram_fraction(lower, upper, v):classic le bucket 下,估算观测值落在 [lower, upper] 区间内的占比(同一套折线 CDF,(rank(upper) - rank(lower)) / total)。

Label / 排序

label_replace、label_join、sort、sort_desc、sort_by_label、sort_by_label_desc。

时间

time、timestamp、minute、hour、day_of_week、day_of_month、day_of_year、days_in_month、month、year(全部 UTC;日期类函数默认作用于 vector(time()))。

类型 / 缺失

vector、scalar、absent、absent_over_time。

数学 / 取整 / 三角

abs、ceil、floor、round、exp、ln、log2、log10、sqrt、sgn、clamp / clamp_min / clamp_max、sin / cos / tan / asin / acos / atan / sinh / cosh / tanh / asinh / acosh / atanh、pi、deg、rad。

运算符

算术 + - * / % ^、比较 == != > < >= <=(含 bool)、集合 and / or / unless、向量匹配 on(...) / ignoring(...) 配 group_left / group_right、一元负号。

修饰符 / 查询结构

选择器 @(start() / end() / <ts>)与 offset(含 matrix selector 上的);子查询 inner[range:step]。

未实装 / 已知差异

未支持的函数或语法会返回错误 promql function not yet supported: <name>,POST /api/v1/query(language: "promql")将其映射为 400。
告警规则的 query.language 为 promql 时,会在评估窗口的结束时刻把 PromQL 表达式作为即时查询来求值。规则本身是 MoleSignal 的 AlertRule,与 Prometheus rule format 不互通。见 创建规则。

标签匹配

= / != / =~ / !~(正则走 RE2,与 Prometheus PCRE 行为略有差异)。__name__ 匹配 metric_name 列,名字带点的指标用加引号的名字选择,例如 {"http.server.duration"}。不带指标名的选择器(例如 {job="api"}、{__name__=~"http_.*"})读取匹配器接受的每个指标,它的时间序列保留 __name__。

指标数据流布局

一个指标数据流装一个来源(例如一台 Prometheus)的全部指标,把标签存为独立列,而不是 JSON 串:
文件里同一指标的行连在一起,先按 metric_name 再按时间排序。选择器读取装着它的指标的数据流,在时间范围与查询重叠的 Parquet 文件里只读该指标所在的页,为每个不同的标签集合构造一个时间序列,并在引擎中套用标签匹配(=、!=、=~、!~)。@ 与 offset 会移动求值时刻。通过 OTLP 到达的指标参见 OTLP 指标字段。
最后修改于 2026年10月26日