qryn/parser/logql.bnf
2024-02-02 13:08:43 +02:00

80 lines
4.8 KiB
BNF

<SYNTAX> ::= <log_stream_selector> | <agg_statement> | <summary> | <user_macro>
log_stream_fp_selector ::= "{" <OWSP> <log_stream_selector_rule> *(<OWSP> "," <OWSP> <log_stream_selector_rule>) <OWSP> "}"
log_stream_selector ::= <log_stream_fp_selector> <OWSP> *(<OWSP><log_pipeline>)
log_stream_selector_rule ::= <label> <OWSP> <operator> <OWSP> <quoted_str>
label ::= (<ALPHA> | "_") *(<ALPHA> | "." | "_" | <DIGITS>)
operator ::= <stream_selector_operator_registry>
quoted_str ::= (<QUOTE><QUOTE>) | (<AQUOTE><AQUOTE>) | <QLITERAL> | <AQLITERAL>
log_pipeline ::= <line_filter_expression> | <parser_expression> | <label_filter_pipeline> | <line_format_expression> | <labels_format_expression>
line_filter_expression ::= <line_filter_operator> <OWSP> <quoted_str>
line_filter_operator ::= <line_filter_operator_registry>
parser_expression ::= "|" <OWSP> <parser_fn_name> <OWSP> <opt_parameters>
parser_fn_name ::= <parser_registry>
opt_parameters ::= <parameter> <OWSP> *("," <OWSP> <parameter>) | <BLANK>
parameter ::= <label> <OWSP> "=" <OWSP> <quoted_str> | <quoted_str> | <label>
label_filter_pipeline ::= "|" <OWSP> <complex_label_filter_expression>
complex_label_filter_expression ::= (<label_filter_expression> | <bracketed_label_filter_expression>) *(<OWSP> <and_or> <WSP> <OWSP> <label_filter_expression> | <OWSP> <and_or> <WSP> <OWSP> <bracketed_label_filter_expression>)
bracketed_label_filter_expression ::= "(" <OWSP> <complex_label_filter_expression> <OWSP> ")"
and_or ::= "and" | "or"
label_filter_expression ::= <string_label_filter_expression> | <number_label_filter_expression>
string_label_filter_expression ::= <label> <OWSP> <operator> <OWSP> <quoted_str>
number_label_filter_expression ::= <label> <OWSP> <number_operator> <OWSP> <number_value>
number_operator ::= <number_operator_registry>
number_value ::= <duration_value> | <bytes_value> | <NUMBER>
duration_value ::= <NUMBER> ("ns"|"us"|"ms"|"s"|"m"|"h"|"d"|"w")
bytes_value ::= <NUMBER> ("b"|"kib"|"kb"|"mb"|"mib"|"gib"|"gb"|"lib"|"tb"|"pib"|"pb"|"eib"|"eb")
line_format_fn ::= "line_format_native" | "line_format"
line_format_expression ::= "|" <OWSP> <line_format_fn> <OWSP> <quoted_str>
labels_format_expression ::= "|" <OWSP> "label_format" <OWSP> <labels_format_expression_param> *(<OWSP> "," <OWSP> <labels_format_expression_param>)
labels_format_expression_param ::= <label_rename_param> | <label_inject_param>
label_rename_param ::= <label> <OWSP> "=" <OWSP> <label>
label_inject_param ::= <label> <OWSP> "=" <OWSP> <quoted_str>
log_range_aggregation ::= <log_range_aggregation_fn> <OWSP> "(" <OWSP> <log_stream_selector> <OWSP> "[" <duration_value> "]" <OWSP> ")"
log_range_aggregation_fn ::= <log_range_aggregation_registry>
aggregation_operator ::= <aggregation_operator_fn> <OWSP> (<prefix_agg_operator> | <postfix_agg_operator>)
postfix_agg_operator ::= "(" <OWSP> [<NUMBER> <OWSP> "," <OWSP>] (<log_range_aggregation> | <unwrap_function>) <OWSP> ")" [<OWSP> <req_by_without> <OWSP>]
prefix_agg_operator ::= <req_by_without> <OWSP> "(" <OWSP> [<NUMBER> <OWSP> "," <OWSP>] (<log_range_aggregation> | <unwrap_function>) <OWSP> ")"
aggregation_operator_fn ::= <high_level_aggregation_registry>
opt_by_without ::= <req_by_without> | <BLANK>
req_by_without ::= <by_without> <OWSP> "(" <OWSP> <label_list> <OWSP> ")"
by_without ::= "by" | "without"
label_list ::= <label> <OWSP> *("," <OWSP> <label>)
unwrap_expression ::= <log_stream_selector> <OWSP> <unwrap_statement>
unwrap_statement ::= "|" <OWSP> ("unwrap" 1*<WSP> <label> | <unwrap_value_statement>)
unwrap_function ::= <unwrap_fn> <OWSP> "(" <OWSP> [<scalar_param> <OWSP> ","] <OWSP> <unwrap_expression> <OWSP> "[" <duration_value> "]" <OWSP> ")" [ <OWSP> <req_by_without_unwrap> ]
scalar_param ::= <NUMBER>
unwrap_fn ::= <unwrap_registry>
req_by_without_unwrap ::= <by_without_unwrap> <OWSP> "(" <OWSP> <label_list> <OWSP> ")"
by_without_unwrap ::= "by" | "without"
agg_statement ::= (<aggregation_operator> | <log_range_aggregation> | <unwrap_function> | <parameterized_expression> | <parameterized_unwrapped_expression>) [<OWSP> <compared_agg_statement_cmp>]
compared_agg_statement_cmp ::= <number_operator> <OWSP> <number_value>
unwrap_value_statement ::= "unwrap_value"
parameterized_unwrapped_expression ::= <parameterized_unwrapped_expression_fn><OWSP>"("<OWSP><parameter_value><OWSP>","<OWSP><unwrap_expression><OWSP>"["<duration_value>"]"<OWSP>")" [ <OWSP> <req_by_without_unwrap> ] [<OWSP> <compared_agg_statement_cmp>]
parameterized_unwrapped_expression_fn ::= <parameterized_unwrapped_registry>
parameterized_expression ::= <parameterized_expression_fn><OWSP>"("<OWSP><parameter_value><OWSP>","<OWSP>(<agg_statement>|<parameterized_unwrapped_expression>)<OWSP>")" [<OWSP> <compared_agg_statement_cmp>]
parameter_value ::= <NUMBER>
parameterized_expression_fn ::= <parameterized_aggregation_registry>
summary ::= "summary" <OWSP> "(" <OWSP> <log_stream_selector> <OWSP> ")"