123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- import { LokiAndPromQueryModellerBase } from '../../prometheus/querybuilder/shared/LokiAndPromQueryModellerBase';
- import { QueryBuilderLabelFilter } from '../../prometheus/querybuilder/shared/types';
- import { getOperationDefinitions } from './operations';
- import { LokiOperationId, LokiQueryPattern, LokiVisualQueryOperationCategory } from './types';
- export class LokiQueryModeller extends LokiAndPromQueryModellerBase {
- constructor() {
- super(getOperationDefinitions);
- this.setOperationCategories([
- LokiVisualQueryOperationCategory.Aggregations,
- LokiVisualQueryOperationCategory.RangeFunctions,
- LokiVisualQueryOperationCategory.Formats,
- LokiVisualQueryOperationCategory.BinaryOps,
- LokiVisualQueryOperationCategory.LabelFilters,
- LokiVisualQueryOperationCategory.LineFilters,
- ]);
- }
- renderLabels(labels: QueryBuilderLabelFilter[]) {
- if (labels.length === 0) {
- return '{}';
- }
- return super.renderLabels(labels);
- }
- getQueryPatterns(): LokiQueryPattern[] {
- return [
- {
- name: 'Log query with parsing',
- // {} | logfmt | __error__=``
- operations: [
- { id: LokiOperationId.Logfmt, params: [] },
- { id: LokiOperationId.LabelFilterNoErrors, params: [] },
- ],
- },
- {
- name: 'Log query with filtering and parsing',
- // {} |= `` | logfmt | __error__=``
- operations: [
- { id: LokiOperationId.LineContains, params: [''] },
- { id: LokiOperationId.Logfmt, params: [] },
- { id: LokiOperationId.LabelFilterNoErrors, params: [] },
- ],
- },
- {
- name: 'Log query with parsing and label filter',
- // {} |= `` | logfmt | __error__=`` | label=`value`
- operations: [
- { id: LokiOperationId.LineContains, params: [''] },
- { id: LokiOperationId.Logfmt, params: [] },
- { id: LokiOperationId.LabelFilterNoErrors, params: [] },
- { id: LokiOperationId.LabelFilter, params: ['label', '=', 'value'] },
- ],
- },
- {
- name: 'Log query with parsing of nested json',
- // {} |= `` | json | line_format `{{ .message}}` | json
- operations: [
- { id: LokiOperationId.LineContains, params: [''] },
- { id: LokiOperationId.Json, params: [] },
- { id: LokiOperationId.LabelFilterNoErrors, params: [] },
- { id: LokiOperationId.LineFormat, params: ['{{.message}}'] },
- { id: LokiOperationId.Json, params: [] },
- { id: LokiOperationId.LabelFilterNoErrors, params: [] },
- ],
- },
- {
- name: 'Log query with reformatted log line',
- // {} |= `` | logfmt | line_format `{{.message}}`
- operations: [
- { id: LokiOperationId.LineContains, params: [''] },
- { id: LokiOperationId.Logfmt, params: [] },
- { id: LokiOperationId.LabelFilterNoErrors, params: [] },
- { id: LokiOperationId.LineFormat, params: ['{{.message}}'] },
- ],
- },
- {
- name: 'Log query with mapped log level',
- // {} |= `` | logfmt | label_format level=lvl
- operations: [
- { id: LokiOperationId.LineContains, params: [''] },
- { id: LokiOperationId.Logfmt, params: [] },
- { id: LokiOperationId.LabelFilterNoErrors, params: [] },
- { id: LokiOperationId.LabelFormat, params: ['lvl', 'level'] },
- ],
- },
- {
- name: 'Metrics query on value inside log line',
- // sum(sum_over_time({ | logfmt | __error__=`` | unwrap | __error__=`` [$__interval]))
- operations: [
- { id: LokiOperationId.LineContains, params: [''] },
- { id: LokiOperationId.Logfmt, params: [] },
- { id: LokiOperationId.LabelFilterNoErrors, params: [] },
- { id: LokiOperationId.Unwrap, params: [''] },
- { id: LokiOperationId.LabelFilterNoErrors, params: [] },
- { id: LokiOperationId.SumOverTime, params: ['$__interval'] },
- { id: LokiOperationId.Sum, params: [] },
- ],
- },
- {
- name: 'Metrics query for total requests per label of streams',
- // sum by() (count_over_time({}[$__interval)
- operations: [
- { id: LokiOperationId.LineContains, params: [''] },
- { id: LokiOperationId.CountOverTime, params: ['$__interval'] },
- { id: LokiOperationId.Sum, params: [] },
- ],
- },
- {
- name: 'Metrics query for total requests per parsed label or label of streams',
- // sum by() (count_over_time({}| logfmt | __error__=`` [$__interval))
- operations: [
- { id: LokiOperationId.LineContains, params: [''] },
- { id: LokiOperationId.Logfmt, params: [] },
- { id: LokiOperationId.LabelFilterNoErrors, params: [] },
- { id: LokiOperationId.CountOverTime, params: ['$__interval'] },
- { id: LokiOperationId.Sum, params: [] },
- ],
- },
- {
- name: 'Metrics query for bytes used by log stream',
- // bytes_over_time({}[$__interval])
- operations: [
- { id: LokiOperationId.LineContains, params: [''] },
- { id: LokiOperationId.BytesOverTime, params: ['$__interval'] },
- ],
- },
- {
- name: 'Metrics query for count of log lines per stream',
- // count_over_time({}[$__interval])
- operations: [
- { id: LokiOperationId.LineContains, params: [''] },
- { id: LokiOperationId.CountOverTime, params: ['$__interval'] },
- ],
- },
- {
- name: 'Metrics query for top n results by label or parsed label',
- // topk(10, sum by () (count_over_time({} | logfmt | __error__=`` [$__interval])))
- operations: [
- { id: LokiOperationId.Logfmt, params: [] },
- { id: LokiOperationId.LabelFilterNoErrors, params: [] },
- { id: LokiOperationId.CountOverTime, params: ['$__interval'] },
- { id: LokiOperationId.Sum, params: [] },
- { id: LokiOperationId.TopK, params: [10] },
- ],
- },
- {
- name: 'Metrics query for extracted quantile',
- // quantile_over_time(0.5,{} | logfmt | unwrap latency[$__interval]) by ()
- operations: [
- { id: LokiOperationId.Logfmt, params: [] },
- { id: LokiOperationId.LabelFilterNoErrors, params: [] },
- { id: LokiOperationId.Unwrap, params: ['latency'] },
- { id: LokiOperationId.LabelFilterNoErrors, params: [] },
- { id: LokiOperationId.QuantileOverTime, params: [0.5, '$__interval'] },
- { id: LokiOperationId.Sum, params: [] },
- ],
- },
- ];
- }
- }
- export const lokiQueryModeller = new LokiQueryModeller();
|