import React, { PureComponent } from 'react'; import { shuffle } from 'lodash'; import { ExploreStartPageProps, DataQuery } from '@grafana/ui'; import LokiLanguageProvider from '../language_provider'; const DEFAULT_EXAMPLES = ['{job="default/prometheus"}']; const PREFERRED_LABELS = ['job', 'app', 'k8s_app']; const EXAMPLES_LIMIT = 5; export default class LokiCheatSheet extends PureComponent { userLabelTimer: NodeJS.Timeout; state = { userExamples: DEFAULT_EXAMPLES, }; componentDidMount() { this.scheduleUserLabelChecking(); } componentWillUnmount() { clearTimeout(this.userLabelTimer); } scheduleUserLabelChecking() { this.userLabelTimer = setTimeout(this.checkUserLabels, 1000); } checkUserLabels = async () => { // Set example from user labels const provider: LokiLanguageProvider = this.props.datasource.languageProvider; if (provider.started) { const labels = provider.getLabelKeys() || []; const preferredLabel = PREFERRED_LABELS.find(l => labels.includes(l)); if (preferredLabel) { const values = await provider.getLabelValues(preferredLabel); const userExamples = shuffle(values) .slice(0, EXAMPLES_LIMIT) .map(value => `{${preferredLabel}="${value}"}`); this.setState({ userExamples }); } } else { this.scheduleUserLabelChecking(); } }; renderExpression(expr: string) { const { onClickExample } = this.props; return (
onClickExample({ refId: 'A', expr } as DataQuery)} > {expr}
); } render() { const { userExamples } = this.state; return (

Loki Cheat Sheet

See your logs
Start by selecting a log stream from the Log labels selector.
Alternatively, you can write a stream selector into the query field:
{this.renderExpression('{job="default/prometheus"}')} {userExamples !== DEFAULT_EXAMPLES && userExamples.length > 0 ? (
Here are some example streams from your logs:
{userExamples.map(example => this.renderExpression(example))}
) : null}
Combine stream selectors
{this.renderExpression('{app="cassandra",namespace="prod"}')}
Returns all log lines from streams that have both labels.
Filtering for search terms.
{this.renderExpression('{app="cassandra"} |~ "(duration|latency)s*(=|is|of)s*[d.]+"')} {this.renderExpression('{app="cassandra"} |= "exact match"')} {this.renderExpression('{app="cassandra"} != "do not match"')}
LogQL {' '} supports exact and regular expression filters.
); } }