mirror of https://github.com/prometheus/prometheus
685 lines
11 KiB
Plaintext
685 lines
11 KiB
Plaintext
# Numeric literals
|
|
|
|
0.123e3
|
|
|
|
==>
|
|
|
|
PromQL(NumberLiteral)
|
|
|
|
# Double-quoted string literal
|
|
|
|
"test string"
|
|
|
|
==>
|
|
|
|
PromQL(StringLiteral)
|
|
|
|
# Single-quoted string literal
|
|
|
|
'test string'
|
|
|
|
==>
|
|
|
|
PromQL(StringLiteral)
|
|
|
|
# Backtick-quoted string literal
|
|
|
|
`test string`
|
|
|
|
==>
|
|
|
|
PromQL(StringLiteral)
|
|
|
|
# Backtick-quoted multi-line string literal
|
|
|
|
`test
|
|
|
|
string`
|
|
|
|
==>
|
|
|
|
PromQL(StringLiteral)
|
|
|
|
# Addition
|
|
|
|
1 + 2
|
|
|
|
==>
|
|
|
|
PromQL(BinaryExpr(NumberLiteral, Add, NumberLiteral))
|
|
|
|
# Complex expression
|
|
|
|
sum by(job, mode) (rate(node_cpu_seconds_total[1m])) / on(job) group_left sum by(job)(rate(node_cpu_seconds_total[1m]))
|
|
|
|
==>
|
|
|
|
PromQL(
|
|
BinaryExpr(
|
|
AggregateExpr(
|
|
AggregateOp(Sum),
|
|
AggregateModifier(
|
|
By,
|
|
GroupingLabels(
|
|
LabelName,
|
|
LabelName
|
|
)
|
|
),
|
|
FunctionCallBody(
|
|
FunctionCall(
|
|
FunctionIdentifier(Rate),
|
|
FunctionCallBody(
|
|
MatrixSelector(
|
|
VectorSelector(
|
|
Identifier
|
|
),
|
|
Duration
|
|
)
|
|
)
|
|
)
|
|
)
|
|
),
|
|
Div,
|
|
MatchingModifierClause(
|
|
On,
|
|
GroupingLabels(
|
|
LabelName
|
|
)
|
|
GroupLeft
|
|
),
|
|
AggregateExpr(
|
|
AggregateOp(Sum),
|
|
AggregateModifier(
|
|
By,
|
|
GroupingLabels(
|
|
LabelName
|
|
)
|
|
),
|
|
FunctionCallBody(
|
|
FunctionCall(
|
|
FunctionIdentifier(Rate),
|
|
FunctionCallBody(
|
|
MatrixSelector(
|
|
VectorSelector(
|
|
Identifier
|
|
),
|
|
Duration
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
# Quoted label name in grouping labels
|
|
|
|
sum by("job", mode) (test_metric) / on("job") group_left sum by("job")(test_metric)
|
|
|
|
==>
|
|
|
|
PromQL(
|
|
BinaryExpr(
|
|
AggregateExpr(
|
|
AggregateOp(Sum),
|
|
AggregateModifier(
|
|
By,
|
|
GroupingLabels(
|
|
QuotedLabelName(StringLiteral),
|
|
LabelName
|
|
)
|
|
),
|
|
FunctionCallBody(
|
|
VectorSelector(
|
|
Identifier
|
|
)
|
|
)
|
|
),
|
|
Div,
|
|
MatchingModifierClause(
|
|
On,
|
|
GroupingLabels(
|
|
QuotedLabelName(StringLiteral)
|
|
)
|
|
GroupLeft
|
|
),
|
|
AggregateExpr(
|
|
AggregateOp(Sum),
|
|
AggregateModifier(
|
|
By,
|
|
GroupingLabels(
|
|
QuotedLabelName(StringLiteral)
|
|
)
|
|
),
|
|
FunctionCallBody(
|
|
VectorSelector(
|
|
Identifier
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
# Case insensitivity for aggregations and binop modifiers.
|
|
|
|
SuM BY(testlabel1) (testmetric1) / IGNOring(testlabel2) AVG withOUT(testlabel3) (testmetric2)
|
|
|
|
==>
|
|
|
|
PromQL(
|
|
BinaryExpr(
|
|
AggregateExpr(
|
|
AggregateOp(Sum),
|
|
AggregateModifier(
|
|
By,
|
|
GroupingLabels(
|
|
LabelName
|
|
)
|
|
),
|
|
FunctionCallBody(
|
|
VectorSelector(
|
|
Identifier
|
|
)
|
|
)
|
|
),
|
|
Div,
|
|
MatchingModifierClause(
|
|
Ignoring,
|
|
GroupingLabels(
|
|
LabelName
|
|
)
|
|
),
|
|
AggregateExpr(
|
|
AggregateOp(Avg),
|
|
AggregateModifier(
|
|
Without,
|
|
GroupingLabels(
|
|
LabelName
|
|
)
|
|
),
|
|
FunctionCallBody(
|
|
VectorSelector(
|
|
Identifier
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
# Case insensitivity for set operators
|
|
|
|
metric1 and metric2 AND metric3 unless metric4 UNLESS metric5 or metric6 OR metric7
|
|
|
|
==>
|
|
|
|
PromQL(
|
|
BinaryExpr(
|
|
BinaryExpr(
|
|
BinaryExpr(
|
|
BinaryExpr(
|
|
BinaryExpr(
|
|
BinaryExpr(
|
|
VectorSelector(Identifier),
|
|
And,
|
|
VectorSelector(Identifier)
|
|
),
|
|
And,
|
|
VectorSelector(Identifier)
|
|
),
|
|
Unless,
|
|
VectorSelector(Identifier)
|
|
),
|
|
Unless,
|
|
VectorSelector(Identifier)
|
|
),
|
|
Or,
|
|
VectorSelector(Identifier)
|
|
),
|
|
Or,
|
|
VectorSelector(Identifier)
|
|
)
|
|
)
|
|
|
|
# Duration units
|
|
|
|
foo[1y2w3d4h5m6s7ms]
|
|
|
|
==>
|
|
|
|
PromQL(MatrixSelector(VectorSelector(Identifier),Duration))
|
|
|
|
# Incorrectly ordered duration units
|
|
|
|
foo[1m2h]
|
|
|
|
==>
|
|
|
|
PromQL(SubqueryExpr(VectorSelector(Identifier),Duration,⚠,Duration))
|
|
|
|
# Using a function name as a metric name
|
|
|
|
rate
|
|
|
|
==>
|
|
|
|
PromQL(VectorSelector(Identifier))
|
|
|
|
# Match operators
|
|
|
|
metric_name{a="1",b!="2",c=~"3",d!~"4"}
|
|
|
|
==>
|
|
|
|
PromQL(
|
|
VectorSelector(
|
|
Identifier,
|
|
LabelMatchers(
|
|
UnquotedLabelMatcher(
|
|
LabelName,
|
|
MatchOp(EqlSingle),
|
|
StringLiteral
|
|
),
|
|
UnquotedLabelMatcher(
|
|
LabelName,
|
|
MatchOp(Neq),
|
|
StringLiteral
|
|
),
|
|
UnquotedLabelMatcher(
|
|
LabelName,
|
|
MatchOp(EqlRegex),
|
|
StringLiteral
|
|
),
|
|
UnquotedLabelMatcher(
|
|
LabelName,
|
|
MatchOp(NeqRegex),
|
|
StringLiteral
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
# Binary expression with bool modifier
|
|
|
|
metric_name > bool 1
|
|
|
|
==>
|
|
|
|
PromQL(
|
|
BinaryExpr(
|
|
VectorSelector(
|
|
Identifier
|
|
),
|
|
Gtr,
|
|
BoolModifier(Bool),
|
|
NumberLiteral
|
|
)
|
|
)
|
|
|
|
# Binary expression with group_x() labels.
|
|
|
|
metric1 + on(foo) group_left(bar, baz) metric2
|
|
|
|
==>
|
|
|
|
PromQL(
|
|
BinaryExpr(
|
|
VectorSelector(
|
|
Identifier
|
|
),
|
|
Add,
|
|
MatchingModifierClause(
|
|
On,
|
|
GroupingLabels(
|
|
LabelName
|
|
)
|
|
GroupLeft,
|
|
GroupingLabels(
|
|
LabelName,
|
|
LabelName
|
|
)
|
|
),
|
|
VectorSelector(
|
|
Identifier
|
|
)
|
|
)
|
|
)
|
|
|
|
# Function last_over_time
|
|
|
|
last_over_time(data[1m])
|
|
|
|
==>
|
|
PromQL(
|
|
FunctionCall(
|
|
FunctionIdentifier(LastOverTime),
|
|
FunctionCallBody(
|
|
MatrixSelector(
|
|
VectorSelector(
|
|
Identifier
|
|
),
|
|
Duration
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
# Function sgn
|
|
|
|
sgn(data)
|
|
|
|
==>
|
|
PromQL(
|
|
FunctionCall(
|
|
FunctionIdentifier(Sgn),
|
|
FunctionCallBody(
|
|
VectorSelector(
|
|
Identifier
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
# Function clamp
|
|
|
|
clamp(data,0,1)
|
|
|
|
==>
|
|
PromQL(
|
|
FunctionCall(
|
|
FunctionIdentifier(Clamp),
|
|
FunctionCallBody(
|
|
VectorSelector(Identifier),
|
|
NumberLiteral,
|
|
NumberLiteral
|
|
)
|
|
)
|
|
)
|
|
|
|
# Metric start
|
|
|
|
start
|
|
|
|
==>
|
|
PromQL(VectorSelector(Identifier))
|
|
|
|
# Metric end
|
|
|
|
end
|
|
|
|
==>
|
|
PromQL(VectorSelector(Identifier))
|
|
|
|
# Simple At start
|
|
|
|
foo @ start()
|
|
|
|
==>
|
|
PromQL(
|
|
StepInvariantExpr(
|
|
VectorSelector(
|
|
Identifier
|
|
),
|
|
At,
|
|
AtModifierPreprocessors(Start),
|
|
)
|
|
)
|
|
|
|
# Simple At end
|
|
|
|
foo @ end()
|
|
|
|
==>
|
|
PromQL(
|
|
StepInvariantExpr(
|
|
VectorSelector(
|
|
Identifier
|
|
),
|
|
At,
|
|
AtModifierPreprocessors(End),
|
|
)
|
|
)
|
|
|
|
# Simple At number
|
|
|
|
foo @ 1234
|
|
|
|
==>
|
|
PromQL(
|
|
StepInvariantExpr(
|
|
VectorSelector(
|
|
Identifier
|
|
),
|
|
At,
|
|
NumberLiteral
|
|
)
|
|
)
|
|
|
|
# At Modifier with space between bracket
|
|
|
|
foo @ start( )
|
|
|
|
==>
|
|
PromQL(
|
|
StepInvariantExpr(
|
|
VectorSelector(
|
|
Identifier
|
|
),
|
|
At,
|
|
AtModifierPreprocessors(Start),
|
|
)
|
|
)
|
|
|
|
# Complex test with At modifier
|
|
|
|
rate(process_cpu_seconds_total[1m])
|
|
and
|
|
topk(7, rate(process_cpu_seconds_total[1h] @ 1234))
|
|
|
|
==>
|
|
PromQL(
|
|
BinaryExpr(
|
|
FunctionCall(
|
|
FunctionIdentifier(Rate),
|
|
FunctionCallBody(
|
|
MatrixSelector(
|
|
VectorSelector(Identifier),
|
|
Duration
|
|
)
|
|
)
|
|
),
|
|
And,
|
|
AggregateExpr(
|
|
AggregateOp(Topk),
|
|
FunctionCallBody(
|
|
NumberLiteral,
|
|
FunctionCall(
|
|
FunctionIdentifier(Rate),
|
|
FunctionCallBody(
|
|
StepInvariantExpr(
|
|
MatrixSelector(VectorSelector(Identifier), Duration),
|
|
At,
|
|
NumberLiteral
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
# At modifier with negative number
|
|
|
|
foo @ - 1234
|
|
|
|
==>
|
|
PromQL(
|
|
StepInvariantExpr(
|
|
VectorSelector(
|
|
Identifier
|
|
),
|
|
At,
|
|
NumberLiteral
|
|
)
|
|
)
|
|
|
|
# At modifier with explicit positive number
|
|
|
|
foo @ + 1234
|
|
|
|
==>
|
|
PromQL(
|
|
StepInvariantExpr(
|
|
VectorSelector(
|
|
Identifier
|
|
),
|
|
At,
|
|
NumberLiteral
|
|
)
|
|
)
|
|
|
|
# Metric prefixed by Inf
|
|
|
|
infra
|
|
|
|
==>
|
|
PromQL(VectorSelector(Identifier))
|
|
|
|
# Metric prefixed by Nan
|
|
|
|
nananere
|
|
|
|
==>
|
|
PromQL(VectorSelector(Identifier))
|
|
|
|
# Mixed-case NaN.
|
|
|
|
NaN
|
|
|
|
==>
|
|
PromQL(NumberLiteral)
|
|
|
|
# Lower-cased NaN.
|
|
|
|
nan
|
|
|
|
==>
|
|
PromQL(NumberLiteral)
|
|
|
|
# Inf.
|
|
|
|
Inf
|
|
|
|
==>
|
|
PromQL(NumberLiteral)
|
|
|
|
# Negative Inf.
|
|
|
|
-Inf
|
|
|
|
==>
|
|
PromQL(NumberLiteral)
|
|
|
|
# Positive Inf.
|
|
|
|
+Inf
|
|
|
|
==>
|
|
PromQL(NumberLiteral)
|
|
|
|
# Lower-cased Inf.
|
|
|
|
inf
|
|
|
|
==>
|
|
PromQL(NumberLiteral)
|
|
|
|
# Upper-cased Inf.
|
|
|
|
INF
|
|
|
|
==>
|
|
PromQL(NumberLiteral)
|
|
|
|
# Negative number literal.
|
|
|
|
-42
|
|
|
|
==>
|
|
PromQL(NumberLiteral)
|
|
|
|
# Explicitly positive number literal.
|
|
|
|
+42
|
|
|
|
==>
|
|
PromQL(NumberLiteral)
|
|
|
|
# Trying to illegally use NaN as a metric name.
|
|
|
|
NaN{foo="bar"}
|
|
|
|
==>
|
|
PromQL(BinaryExpr(NumberLiteral,⚠,VectorSelector(LabelMatchers(UnquotedLabelMatcher(LabelName,MatchOp(EqlSingle),StringLiteral)))))
|
|
|
|
# Trying to illegally use Inf as a metric name.
|
|
|
|
Inf{foo="bar"}
|
|
|
|
==>
|
|
PromQL(BinaryExpr(NumberLiteral,⚠,VectorSelector(LabelMatchers(UnquotedLabelMatcher(LabelName,MatchOp(EqlSingle),StringLiteral)))))
|
|
|
|
# Negative offset
|
|
|
|
foo offset -5d
|
|
|
|
==>
|
|
PromQL(OffsetExpr(VectorSelector(Identifier), Offset, Sub, Duration))
|
|
|
|
# Negative offset with space
|
|
|
|
foo offset - 5d
|
|
|
|
==>
|
|
PromQL(OffsetExpr(VectorSelector(Identifier), Offset, Sub, Duration))
|
|
|
|
# Positive offset
|
|
|
|
foo offset 5d
|
|
|
|
==>
|
|
PromQL(OffsetExpr(VectorSelector(Identifier), Offset, Duration))
|
|
|
|
# Parsing only metric names with alternative @top { "top": "MetricName" }
|
|
|
|
sum:my_metric_name:rate5m
|
|
|
|
==>
|
|
MetricName(Identifier)
|
|
|
|
# Testing Atan2 inherited precedence level
|
|
|
|
1 + foo atan2 bar
|
|
|
|
==>
|
|
PromQL(BinaryExpr(NumberLiteral,Add,BinaryExpr(VectorSelector(Identifier),Atan2,VectorSelector(Identifier))))
|
|
|
|
# Testing quoted metric name
|
|
|
|
{"metric_name"}
|
|
|
|
==>
|
|
PromQL(VectorSelector(LabelMatchers(QuotedLabelName(StringLiteral))))
|
|
|
|
# Testing quoted label name
|
|
|
|
{"foo"="bar"}
|
|
|
|
==>
|
|
PromQL(VectorSelector(LabelMatchers(QuotedLabelMatcher(QuotedLabelName(StringLiteral), MatchOp(EqlSingle), StringLiteral))))
|
|
|
|
# Testing quoted metric name and label name
|
|
|
|
{"metric_name", "foo"="bar"}
|
|
|
|
==>
|
|
PromQL(VectorSelector(LabelMatchers(QuotedLabelName(StringLiteral), QuotedLabelMatcher(QuotedLabelName(StringLiteral), MatchOp(EqlSingle), StringLiteral)))) |