{service_name="payments-api"} |= "timeout"One service, one word, no index to plan.
A label selector and a line filter. Nothing to declare up front.
Logs arrive from the OpenTelemetry Collector, Grafana Alloy or an SDK, and read back over a LogQL-compatible API. They sit in the same tenant as the trace that produced them, so a failing span and its output are one query apart.
Included on the free tier: 20,000 active series, 50 GB of logs and 50 GB of traces a month. No card.
{service_name="payments-api"} |= "timeout"What you get
| Label | Values | Streams |
|---|---|---|
| service_name | 14 | 212 |
| level | 4 | 212 |
| k8s_namespace_name | 6 | 198 |
| k8s_pod_name | 88 | 188 |
| deployment_environment | 3 | 212 |
How it gets there
Logs travel the same path as every other signal: into the agent, out with the tenant header.
Send logs to the agent over OTLP, or scrape files with Alloy.
The agent forwards them with the tenant header.
Query them by label in Insights, or from Grafana.
loki.source.file "app" {
targets = [{__path__ = "/var/log/app/*.log"}]
forward_to = [otelcol.receiver.loki.default.receiver]
}What you can ask
Paste any of these into Insights, or use them as an alert rule.
{service_name="payments-api"} |= "timeout"A label selector and a line filter. Nothing to declare up front.
{service_name=~".+"} | json | status >= 500Parse the JSON body, then filter on a field inside it.
sum by (level) (
count_over_time({service_name="checkout"}[5m]))A metric query over logs, usable as a panel or an alert rule.
Questions
Something not here? Talk to an engineer who works on the platform.
Book thirty minutesThe query API is Loki-compatible, so your dashboards, alert rules and logcli habits carry over. What changes is that you are not running the storage behind it.
20,000 active series, 50 GB of logs and 50 GB of traces a month, 90-day retention, and the whole of Insights.