Skip to main content
Axiom provides two purpose-built query languages, each designed for different data types:
APLMPL
Full nameAxiom Processing LanguageMetrics Processing Language
Data typesLogs, traces, eventsMetrics
Data storeEventDBMetricsDB
ReferenceAPL referenceMPL reference

Why two query languages

Logs, traces, and events are discrete records: each row is a self-contained entry with an arbitrary schema. The language designed for this kind of data is APL (Axiom Processing Language), which excels at slicing, extending, and summarizing data. Metrics are structurally different. A metric is a named time series with a fixed set of tags. Rather than rows of events, you work with continuous streams of numerical values that need rate calculations, time-window alignment, tag-based grouping, and cross-metric arithmetic. Axiom stores metrics in MetricsDB, a purpose-built storage engine optimized for high-cardinality time-series data. MPL is the query language designed to match that storage model.

APL (Axiom Processing Language)

APL is a text-based query language for querying logs, traces, and events stored in EventDB. It provides the flexibility to filter, manipulate, extend, and summarize your event data exactly the way you need it. An APL query starts with a dataset name followed by a series of operators separated by the pipe character (|). Operators flow from left to right, top to bottom, transforming the data at each step.
['sample-http-logs']
| where method == "GET" and status == "200"
| summarize count() by bin_auto(_time), ['geo.country']
Run in Playground APL supports a rich set of tabular operators, scalar functions, and aggregation functions that cover a wide range of use cases from simple filtering to complex joins, time-series analysis, and GenAI-specific computations. For more information, see Introduction to APL.

MPL (Metrics Processing Language)

MPL is a query language for querying metrics stored in MetricsDB. It combines a pipeline syntax similar to APL with expressive power suited to metrics workloads like rate calculations, time-window alignment, and tag-based grouping.
Support for MPL is currently in public preview. For more information, see Feature states.
An MPL query starts with a dataset and metric name, then pipes the data through filters and transformations.
`otel-demo-metrics`:`go.memory.used`
| where `k8s.deployment.name` == "checkout"
| align to 5m using avg
Run in Playground MPL supports filtering by tags, mapping values with functions like rate and fill::prev, aligning data to time windows, grouping by tag dimensions, and computing across multiple metrics. If you use PromQL, you can easily translate your existing expressions to MPL. For more information, see Introduction to MPL.

Write queries

Write APL and MPL queries in the following ways:
  • Console: Use the Query tab in the Axiom Console to write and run queries interactively. For more information, see Query data using Editor.
  • API: Run queries programmatically using Axiom API. For more information, see API reference.
  • AI: Use natural language to generate APL queries in Console, or use MCP Server and Skills to let AI agents query your data.