This document is a comprehensive reference for the dash0 CLI, aimed at enabling AI agents and automation workflows to use it effectively.
For every command, this reference lists the exact syntax, all flags, expected outputs, and concrete examples.
Every command that talks to the Dash0 API or OTLP endpoint needs credentials. The CLI resolves configuration in this order (first match wins):
- Environment variables (
DASH0_API_URL,DASH0_OTLP_URL,DASH0_AUTH_TOKEN,DASH0_DATASET) - CLI flags (
--api-url,--otlp-url,--auth-token,--dataset) - The active profile (stored in
~/.dash0/)
Commands that read from the API (asset CRUD, logs query, spans query, traces get, metrics instant) require api-url and auth-token.
Commands that write via OTLP (logs send, spans send) require otlp-url and auth-token.
These flags are available on every command:
| Flag | Short | Env variable | Description |
|---|---|---|---|
--api-url |
DASH0_API_URL |
API endpoint URL | |
--otlp-url |
DASH0_OTLP_URL |
OTLP HTTP endpoint URL | |
--auth-token |
DASH0_AUTH_TOKEN |
Authentication token | |
--dataset |
DASH0_DATASET |
Dataset identifier (not display name) | |
--color |
DASH0_COLOR |
semantic (default) or none |
|
--experimental |
-X |
Enable experimental commands | |
DASH0_CONFIG_DIR |
Override config directory (default: ~/.dash0) |
Create a new named profile. All fields are optional at creation time. The first profile created becomes the active profile automatically.
dash0 config profiles create <name> \
[--api-url <url>] \
[--otlp-url <url>] \
[--auth-token <token>] \
[--dataset <dataset>]Example:
$ dash0 config profiles create dev \
--api-url https://api.us-west-2.aws.dash0.com \
--otlp-url https://ingress.us-west-2.aws.dash0.com \
--auth-token auth_xxx
Profile "dev" added and set as activeAliases: add
Update an existing profile. Only the specified flags are changed; unspecified flags are left as-is. Pass an empty string to remove a field.
dash0 config profiles update <name> \
[--api-url <url>] \
[--otlp-url <url>] \
[--auth-token <token>] \
[--dataset <dataset>]Example:
$ dash0 config profiles update prod --api-url https://api.us-east-1.aws.dash0.com
Profile 'prod' updated successfullyList all profiles.
The active profile is marked with *.
dash0 config profiles list [--skip-header]| Flag | Default | Description |
|---|---|---|
--skip-header |
false |
Omit the header row from output |
Example output:
NAME API URL OTLP URL DATASET AUTH TOKEN
* dev https://api.us-west-2.aws.dash0.com https://ingress.us-west-2.aws.dash0.com default ...ULSzVkM
prod https://api.eu-west-1.aws.dash0.com https://ingress.eu-west-1.aws.dash0.com default ...uth_yyy
Use --skip-header to omit the header row:
$ dash0 config profiles list --skip-headerAliases: ls
Set the active profile.
dash0 config profiles select <name>Example:
$ dash0 config profiles select prod
Profile 'prod' is now activeAliases: activate
Delete a profile.
dash0 config profiles delete <name>Aliases: remove
Display the resolved configuration (active profile + environment variable overrides).
dash0 config showExample output:
Profile: prod
API URL: https://api.eu-west-1.aws.dash0.com
OTLP URL: https://ingress.eu-west-1.aws.dash0.com
Dataset: default
Auth Token: ...uth_yyy
When an environment variable overrides a profile value, the output indicates the source:
$ DASH0_API_URL='http://test' dash0 config show
Profile: dev
API URL: http://test (from DASH0_API_URL environment variable)
OTLP URL: https://ingress.us-west-2.aws.dash0.com
Dataset: default
Auth Token: ...ULSzVkMDash0 calls dashboards, views, synthetic checks, and check rules "assets" (not "resources", which is an overloaded term in OpenTelemetry).
All four asset types (dashboards, check-rules, synthetic-checks, views) share the same CRUD subcommands.
The examples below use dashboards, but the same patterns apply to every asset type.
List all assets in the dataset.
dash0 dashboards list [--limit <n>] [-o <format>] [--skip-header]| Flag | Short | Default | Description |
|---|---|---|---|
--limit |
-l |
50 | Maximum number of results |
--output |
-o |
table |
table, wide, json, yaml, or csv |
--skip-header |
false |
Omit the header row from table and wide output |
Example:
$ dash0 dashboards list
NAME ID
Production Overview a1b2c3d4-5678-90ab-cdef-1234567890ab
Staging Overview d4e5f6a7-8901-23de-f012-4567890abcde
...The wide format adds DATASET, ORIGIN, and URL columns:
$ dash0 dashboards list -o wide
NAME ID DATASET ORIGIN URL
Production Overview a1b2c3d4-5678-90ab-cdef-1234567890ab default gitops/prod https://app.dash0.com/goto/dashboards?dashboard_id=a1b2c3d4-...Use -o json or -o yaml to get the full asset definitions, suitable for backup or re-applying with apply -f -.
The YAML output is a multi-document stream (documents separated by ---) so it can be piped directly to dash0 apply -f -.
Use -o csv for a pipe-friendly, machine-readable format with the same columns as wide:
$ dash0 dashboards list -o csv
name,id,dataset,origin,url
Production Overview,a1b2c3d4-5678-90ab-cdef-1234567890ab,default,gitops/prod,https://app.dash0.com/goto/dashboards?dashboard_id=a1b2c3d4-...Aliases: ls
Retrieve a single asset by ID.
dash0 dashboards get <id> [-o <format>]Example (default table output):
$ dash0 dashboards get a1b2c3d4-5678-90ab-cdef-1234567890ab
Kind: Dashboard
Name: Production Overview
Dataset: default
Origin: gitops/prod
URL: https://app.dash0.com/goto/dashboards?dashboard_id=a1b2c3d4-5678-90ab-cdef-1234567890ab
Created: 2026-01-15 10:30:00
Updated: 2026-01-20 14:45:00Use -o yaml to get the full definition, suitable for editing and re-applying:
$ dash0 dashboards get a1b2c3d4-5678-90ab-cdef-1234567890ab -o yaml
kind: Dashboard
metadata:
name: a1b2c3d4-5678-90ab-cdef-1234567890ab
...
spec:
display:
name: Production Overview
...Create a new asset from a YAML or JSON file.
dash0 dashboards create -f <file> [--dry-run] [-o <format>]Use -f - to read from stdin.
The --dry-run flag validates the file without creating anything.
Example:
$ dash0 dashboards create -f dashboard.yaml
Dashboard "My Dashboard" created successfullydashboards create also accepts PersesDashboard CRD files (perses.dev/v1alpha1 and perses.dev/v1alpha2).
$ dash0 dashboards create -f persesdashboard.yaml
Dashboard "My Perses Dashboard" createdcheck-rules create also accepts PrometheusRule CRD files.
Each alerting rule in the CRD is created as a separate check rule (recording rules are skipped):
$ dash0 check-rules create -f prometheus-rules.yaml
Check rule "High Error Rate Alert" created successfullyAliases: add
Update an existing asset from a YAML or JSON file.
If the ID argument is omitted, the ID is extracted from the file content.
The output shows a unified diff of what changed.
The --dry-run flag shows the diff without applying the update.
dash0 dashboards update [id] -f <file> [--dry-run]Examples:
# Update a dashboard from a file
$ dash0 dashboards update <id> -f dashboard.yaml
--- Dashboard (before)
+++ Dashboard (after)
@@ -2,7 +2,7 @@
spec:
display:
- name: Old Dashboard Name
+ name: New Dashboard Name
# Preview changes without applying
$ dash0 dashboards update -f dashboard.yaml --dry-run
--- Dashboard (before)
+++ Dashboard (after)
@@ -2,7 +2,7 @@
spec:
display:
- name: Old Dashboard Name
+ name: New Dashboard NameWhen nothing changed:
$ dash0 dashboards update -f dashboard.yaml
Dashboard "My Dashboard": no changesDelete an asset by ID.
Prompts for confirmation unless --force is passed.
dash0 dashboards delete <id> [--force]Examples:
$ dash0 dashboards delete a1b2c3d4-5678-90ab-cdef-1234567890ab
Are you sure you want to delete dashboard "a1b2c3d4-..."? [y/N]: y
Dashboard "a1b2c3d4-..." deleted successfully
$ dash0 dashboards delete a1b2c3d4-5678-90ab-cdef-1234567890ab --force
Dashboard "a1b2c3d4-..." deleted successfullyAliases: remove
| Asset type | Command | Notes |
|---|---|---|
| Dashboards | dash0 dashboards <subcommand> |
create also accepts PersesDashboard CRD files |
| Check rules | dash0 check-rules <subcommand> |
create also accepts PrometheusRule CRD files |
| Synthetic checks | dash0 synthetic-checks <subcommand> |
|
| Views | dash0 views <subcommand> |
Apply asset definitions from a file, directory, or stdin. If an asset already exists (matched by ID), it is updated; otherwise it is created.
dash0 apply -f <file|directory> [--dry-run]| Flag | Short | Description |
|---|---|---|
--file |
-f |
Path to a YAML/JSON file, a directory, or - for stdin |
--dry-run |
Validate without applying |
For assets that are updated, a unified diff of the changes is shown. Assets that are created show the standard creation message.
When a directory is specified, all .yaml and .yml files are discovered recursively.
Hidden files and directories (starting with .) are skipped.
All documents are validated before any are applied.
If any document fails validation, no changes are made.
Supported kind values: Dashboard, PersesDashboard, CheckRule, PrometheusRule, SyntheticCheck, View.
A single file may contain multiple documents separated by ---.
Note
The -f flag accepts a single path.
Do not use shell glob patterns like -f assets/* — the shell expands the glob into multiple arguments and only the first file is passed to -f.
Use -f assets/ (the directory) instead.
Examples:
# Apply a single file
$ dash0 apply -f dashboard.yaml
Dashboard "Production Overview" (a1b2c3d4-...) created
# Apply a directory recursively
$ dash0 apply -f assets/
assets/dashboard.yaml: Dashboard "Production Overview" (a1b2c3d4-...) created
assets/rule.yaml: Check rule "High Error Rate" (b2c3d4e5-...) updated
...
# Apply from stdin
$ cat assets.yaml | dash0 apply -f -
Dashboard "Production Overview" (a1b2c3d4-...) created
...
# Dry-run validation
$ dash0 apply -f assets.yaml --dry-run
Dry run: 1 document(s) validated successfully
1. Dashboard "Production Overview" (a1b2c3d4-5678-90ab-cdef-1234567890ab)Dashboard:
kind: Dashboard
metadata:
name: a1b2c3d4-5678-90ab-cdef-1234567890ab
spec:
display:
name: Production OverviewPersesDashboard (Perses CRD, converted to a Dashboard on import):
apiVersion: perses.dev/v1alpha1
kind: PersesDashboard
metadata:
name: my-perses-dashboard
spec:
display:
name: My Perses Dashboard
duration: 5m
panels: {}Check rule:
kind: CheckRule
id: b2c3d4e5-6789-01bc-def0-234567890abc
name: High Error Rate
expression: sum(rate(http_requests_total{status=~"5.."}[5m])) > 0.1View:
kind: View
metadata:
name: Error Logs
labels:
dash0.com/id: c3d4e5f6-7890-12cd-ef01-34567890abcd
spec:
query: "severity >= ERROR"Synthetic check:
kind: SyntheticCheck
metadata:
name: API Health Check
labels:
dash0.com/id: d4e5f6a7-8901-23de-f012-4567890abcde
spec:
url: https://api.example.com/health
interval: 60sMulti-document file (separated by ---):
kind: Dashboard
metadata:
name: e1f2a3b4-5678-90e5-6789-abcdef012345
spec:
display:
name: First Dashboard
---
kind: CheckRule
id: f2a3b4c5-6789-01f6-7890-bcdef0123456
name: Second Document Rule
expression: up == 0Send a log record to Dash0 via OTLP.
Requires otlp-url and auth-token.
dash0 logs send <body> [flags]Key flags:
| Flag | Description |
|---|---|
--severity-number <1-24> |
OpenTelemetry severity number; determines the severity range in Dash0 |
--severity-text <text> |
Severity text (e.g., INFO, WARN, ERROR); separate from severity-number |
--event-name <name> |
Event name (e.g., dash0.deployment) |
--resource-attribute <key=value> |
Resource attribute (repeatable) |
--log-attribute <key=value> |
Log record attribute (repeatable) |
--scope-attribute <key=value> |
Instrumentation scope attribute (repeatable) |
--scope-name <name> |
Instrumentation scope name (default: dash0-cli) |
--scope-version <version> |
Instrumentation scope version (default: CLI version) |
--time <RFC3339> |
Log record timestamp (default: now) |
--observed-time <RFC3339> |
Observed timestamp (default: now) |
--trace-id <32 hex chars> |
Trace ID to correlate with |
--span-id <16 hex chars> |
Span ID to correlate with |
--flags <uint32> |
Log record flags |
--resource-dropped-attributes-count <n> |
Number of dropped resource attributes |
--log-dropped-attributes-count <n> |
Number of dropped log record attributes |
--scope-dropped-attributes-count <n> |
Number of dropped scope attributes |
Examples:
# Simple log message
$ dash0 logs send "Application started"
Log record sent successfully
# Log with severity and attributes
$ dash0 logs send "Application started" \
--resource-attribute service.name=my-service \
--log-attribute user.id=12345 \
--severity-text INFO --severity-number 9
Log record sent successfully
# Deployment event with event name
$ dash0 logs send "Deployment completed" \
--event-name dash0.deployment \
--severity-number 9 \
--resource-attribute service.name=my-service \
--resource-attribute deployment.environment.name=production \
--log-attribute deployment.status=succeeded
Log record sent successfully
# Using environment variables for connection
$ DASH0_OTLP_URL=https://ingress.us-west-2.aws.dash0.com \
DASH0_AUTH_TOKEN=auth_xxx \
dash0 logs send "Health check passed" \
--severity-number 9 --severity-text INFO
Log record sent successfullyQuery log records from Dash0.
Requires the -X (or --experimental) flag, plus api-url and auth-token.
dash0 -X logs query [flags]| Flag | Default | Description |
|---|---|---|
--from |
now-15m |
Start of time range |
--to |
now |
End of time range |
--limit |
50 | Maximum number of records |
--filter |
Filter expression (repeatable) | |
-o |
table |
Output format: table, json (OTLP/JSON), or csv |
--skip-header |
false |
Omit the header row from table and csv output |
--column |
Column to display (repeatable; table and csv only); see custom columns |
Both --from and --to accept relative expressions like now-1h or absolute ISO 8601 timestamps.
Absolute timestamps are normalized to millisecond precision, so 2024-01-25T10:00:00Z and 2024-01-25 are both accepted.
Examples:
# Query recent logs (last 15 minutes, up to 50 records)
$ dash0 -X logs query
TIMESTAMP SEVERITY BODY
2026-02-16T09:12:03.456Z INFO Application started successfully
2026-02-16T09:12:04.789Z ERROR Connection timeout
...
# Query with time range
$ dash0 -X logs query --from now-1h --to now --limit 100
# Filter by service
$ dash0 -X logs query --filter "service.name is my-service"
# Filter by severity (errors and above)
$ dash0 -X logs query --filter "otel.log.severity.number gte 17"
# Multiple filters (AND logic)
$ dash0 -X logs query \
--filter "service.name is my-service" \
--filter "otel.log.severity.range is_one_of ERROR WARN"
# Output as JSON (full OTLP payload)
$ dash0 -X logs query -o json
# Output as CSV (pipe-friendly)
$ dash0 -X logs query -o csv
otel.log.time,otel.log.severity.range,otel.log.body
2026-02-16T09:12:03.456Z,INFO,Application started successfully
...
# CSV without header
$ dash0 -X logs query -o csv --skip-headerThe --filter flag accepts expressions in the form key [operator] value.
When the operator is omitted, is (exact match) is assumed.
| Operator | Alias | Description |
|---|---|---|
is |
= |
Exact match (default when operator is omitted) |
is_not |
!= |
Not equal |
contains |
Value contains substring | |
does_not_contain |
Value does not contain substring | |
starts_with |
Value starts with prefix | |
does_not_start_with |
Value does not start with prefix | |
ends_with |
Value ends with suffix | |
does_not_end_with |
Value does not end with suffix | |
matches |
~ |
Regular expression match |
does_not_match |
!~ |
Negated regular expression match |
gt |
> |
Greater than |
gte |
>= |
Greater than or equal |
lt |
< |
Less than |
lte |
<= |
Less than or equal |
is_set |
Attribute is present | |
is_not_set |
Attribute is absent | |
is_one_of |
Matches any of the given values (space-separated) | |
is_not_one_of |
Matches none of the given values (space-separated) | |
is_any |
Matches any value |
Keys containing spaces can be single-quoted: 'my key' is value.
Values containing spaces can be single-quoted: deployment.environment.name is_one_of 'us east' 'eu west' staging.
Common log attribute keys: service.name, otel.log.severity.number, otel.log.severity.range, otel.log.severity.text, otel.log.body.
Valid values for otel.log.severity.range: TRACE, DEBUG, INFO, WARN, ERROR, FATAL, UNKNOWN.
The --column flag lets you choose which columns appear in table and csv output.
It is repeatable: pass one --column per column.
When used, the flag replaces the default column set entirely.
# Show only timestamp and body
dash0 -X logs query --column time --column body
# Include an arbitrary attribute column
dash0 -X spans query \
--column timestamp --column duration \
--column "span name" --column http.request.method
# Include an arbitrary attribute column by key
dash0 -X logs query --column time --column service.name --column bodyEach command has predefined columns with short aliases. Aliases are matched case-insensitively. Any OTLP attribute key (resource, scope, or record/span level) can also be used as a column; its header defaults to the attribute key as-is.
Log query aliases:
| Alias | Attribute key |
|---|---|
time, timestamp |
otel.log.time |
severity |
otel.log.severity.range |
body |
otel.log.body |
Span query aliases:
| Alias | Attribute key |
|---|---|
timestamp, start time, time |
otel.span.start_time |
duration |
otel.span.duration |
span name, name |
otel.span.name |
status, status code |
otel.span.status.code |
service name, service |
service.name |
parent id |
otel.parent.id |
trace id |
otel.trace.id |
span id |
otel.span.id |
span links, links |
otel.span.links |
Trace get aliases share the span query aliases.
Aliases that contain spaces must be quoted: --column "start time".
The --column flag is not supported with JSON output.
Using --column with -o json returns an error.
Send a span to Dash0 via OTLP.
Requires the -X (or --experimental) flag, plus otlp-url and auth-token.
dash0 -X spans send --name <name> [flags]| Flag | Default | Description |
|---|---|---|
--name |
Span name (required) | |
--kind |
INTERNAL |
Span kind: INTERNAL, SERVER, CLIENT, PRODUCER, CONSUMER |
--status-code |
UNSET |
Status code: UNSET, OK, ERROR |
--status-message |
Status message (typically for ERROR status) | |
--start-time |
now | Start timestamp in RFC3339 format |
--end-time |
End timestamp in RFC3339 format; mutually exclusive with --duration |
|
--duration |
Span duration (e.g., 100ms, 1.5s); mutually exclusive with --end-time |
|
--trace-id |
auto | Trace ID (32 hex characters); auto-generated if omitted |
--span-id |
auto | Span ID (16 hex characters); auto-generated if omitted |
--parent-span-id |
Parent span ID (16 hex characters) | |
--resource-attribute |
Resource attribute as key=value (repeatable) |
|
--span-attribute |
Span attribute as key=value (repeatable) |
|
--span-link |
Span link as trace-id:span-id[,key=value,...] (repeatable) |
|
--scope-name |
dash0-cli |
Instrumentation scope name |
--scope-version |
CLI version | Instrumentation scope version |
--scope-attribute |
Instrumentation scope attribute as key=value (repeatable) |
Examples:
# Send a simple span
$ dash0 -X spans send --name "my-operation"
Span sent successfully (trace-id: 0af7651916cd43dd8448eb211c80319c, span-id: b7ad6b7169203331)
# Send a server span with duration
$ dash0 -X spans send --name "GET /api/users" \
--kind SERVER --status-code OK --duration 100ms \
--resource-attribute service.name=my-service
Span sent successfully (trace-id: ..., span-id: ...)
# Send a span with a link to another trace
$ dash0 -X spans send --name "process-message" \
--kind CONSUMER \
--span-link 0af7651916cd43dd8448eb211c80319c:b7ad6b7169203331
# Send a child span with explicit parent
$ dash0 -X spans send --name "db-query" \
--kind CLIENT \
--trace-id 0af7651916cd43dd8448eb211c80319c \
--parent-span-id b7ad6b7169203331Query spans from Dash0.
Requires the -X (or --experimental) flag, plus api-url and auth-token.
dash0 -X spans query [flags]| Flag | Default | Description |
|---|---|---|
--from |
now-15m |
Start of time range |
--to |
now |
End of time range |
--limit |
50 | Maximum number of spans |
--filter |
Filter expression (repeatable) | |
-o |
table |
Output format: table, json (OTLP/JSON), or csv |
--skip-header |
false |
Omit the header row from table and csv output |
--column |
Column to display (repeatable; table and csv only); see custom columns |
Both --from and --to accept relative expressions like now-1h or absolute ISO 8601 timestamps.
Examples:
# Query recent spans (last 15 minutes, up to 50 spans)
$ dash0 -X spans query
TIMESTAMP DURATION SPAN NAME STATUS SERVICE NAME PARENT ID TRACE ID SPAN LINKS
2026-02-16T09:12:03.456Z 150ms GET /api/users OK my-service 0af76519...
2026-02-16T09:12:04.789Z 500ms POST /api/orders ERROR api-gateway b7ad6b7169203331 3d3d3d3d...
...
# Query with time range
$ dash0 -X spans query --from now-1h --to now --limit 100
# Filter by service
$ dash0 -X spans query --filter "service.name is my-service"
# Filter by span status
$ dash0 -X spans query --filter "otel.span.status.code is ERROR"
# Output as CSV
$ dash0 -X spans query -o csv
otel.span.start_time,otel.span.duration,otel.span.name,otel.span.status.code,service.name,otel.parent.id,otel.trace.id,otel.span.links
2026-02-16T09:12:03.456Z,150ms,GET /api/users,OK,my-service,,0af76519...,
...
# Output as OTLP JSON
$ dash0 -X spans query -o json --limit 10The --filter flag uses the same filter syntax as logs query.
Common span attribute keys: service.name, otel.span.status.code, otel.trace.id, otel.span.name.
Retrieve all spans belonging to a trace from Dash0.
Requires the -X (or --experimental) flag, plus api-url and auth-token.
dash0 -X traces get <trace-id> [flags]| Flag | Default | Description |
|---|---|---|
--from |
now-1h |
Start of time range |
--to |
now |
End of time range |
-o |
table |
Output format: table, json (OTLP/JSON), or csv |
--skip-header |
false |
Omit the header row from table and csv output |
--follow-span-links |
Follow span links to related traces; optional value sets the lookback period (default: 1h) |
|
--column |
Column to display (repeatable; table and csv only); see custom columns |
The <trace-id> argument must be 32 hex characters.
In table format, spans are displayed as a hierarchical tree with child spans indented under their parents.
Examples:
# Get all spans in a trace
$ dash0 -X traces get <trace-id>
TIMESTAMP DURATION TRACE ID SPAN ID PARENT ID SPAN NAME STATUS SERVICE NAME SPAN LINKS
2026-02-16T09:12:03.456Z 200ms 0af7651916cd43dd8448eb211c80319c b7ad6b7169203331 GET /api/users OK frontend
2026-02-16T09:12:03.486Z 150ms 0af7651916cd43dd8448eb211c80319c 00f067aa0ba902b7 b7ad6b7169203331 SELECT * FROM users UNSET frontend
2026-02-16T09:12:03.641Z 10ms 0af7651916cd43dd8448eb211c80319c 123456789abcdef0 b7ad6b7169203331 serialize response UNSET frontend
# Get a trace with a specific time range
$ dash0 -X traces get <trace-id> --from now-2h
# Follow span links to related traces
$ dash0 -X traces get <trace-id> --follow-span-links
# Follow span links with a custom lookback period
$ dash0 -X traces get <trace-id> --follow-span-links 2h
# Output as OTLP JSON
$ dash0 -X traces get <trace-id> -o json
# Output as CSV
$ dash0 -X traces get <trace-id> -o csv
otel.trace.id,otel.span.start_time,otel.span.duration,otel.span.id,otel.parent.id,otel.span.name,otel.span.status.code,service.name,otel.span.links
0af7651916cd43dd8448eb211c80319c,2026-02-16T09:12:03.456Z,200ms,b7ad6b7169203331,,GET /api/users,OK,frontend,
...When --follow-span-links is used, linked traces are displayed after the primary trace, separated by a header line showing the linked trace ID.
The command follows links recursively up to a maximum of 20 traces.
Run an instant PromQL query against the Dash0 API.
dash0 metrics instant --query <promql> [--time <timestamp>] [--dataset <dataset>]| Flag | Description |
|---|---|
--query |
PromQL query expression (required) |
--time |
Evaluation timestamp (default: now); supports relative expressions |
--dataset |
Dataset to query |
Example:
$ dash0 metrics instant --query 'sum(rate(http_requests_total[5m]))'Teams and members are organizational entities (not "assets").
All team and member commands are experimental and require the -X flag.
They use api-url and auth-token but do not accept --dataset.
List all teams in the organization.
dash0 -X teams list [-o <format>] [--skip-header] [--column <col>]| Flag | Default | Description |
|---|---|---|
-o |
table |
Output format: table, json, or csv |
--skip-header |
false |
Omit the header row from table and csv output |
--column |
Column to display (repeatable; table and csv only) |
Example:
$ dash0 -X teams list
NAME ID MEMBERS ORIGIN URL
Backend Team a1b2c3d4 3 dash0-cli https://app.dash0.com/goto/settings/teams?team_id=a1b2c3d4
Frontend Team b2c3d4e5 2 https://app.dash0.com/goto/settings/teams?team_id=b2c3d4e5Column aliases: name / team name, id / team id, members / member count, origin, url.
Aliases: ls
Get detailed information about a team, including members and accessible assets.
dash0 -X teams get <id> [-o <format>]The <id> argument can be a team ID or origin.
Example:
$ dash0 -X teams get <id>
Kind: Team
Name: Backend Team
ID: a1b2c3d4-5678-90ab-cdef-1234567890ab
Origin: dash0-cli
Color: #FF6B6B -> #4ECDC4
Members: 2
...Create a new team.
dash0 -X teams create <name> [--color-from <hex>] [--color-to <hex>] [--member <id>]| Flag | Description |
|---|---|
--color-from |
Gradient start color (e.g. "#FF0000") |
--color-to |
Gradient end color (e.g. "#00FF00") |
--member |
Member ID to add to the team (repeatable) |
Example:
$ dash0 -X teams create "Backend Team" --color-from "#FF6B6B" --color-to "#4ECDC4"
Team "Backend Team" created (id: a1b2c3d4-...)Aliases: add
Update the display settings of a team (name, color).
dash0 -X teams update <id> [--name <name>] [--color-from <hex>] [--color-to <hex>]Example:
$ dash0 -X teams update <id> --name "New Team Name"
Team "<id>" updatedDelete a team.
Prompts for confirmation unless --force is passed.
dash0 -X teams delete <id> [--force]Example:
$ dash0 -X teams delete <id> --force
Team "<id>" deletedAliases: remove
List all members of a team.
dash0 -X teams list-members <team-id> [-o <format>] [--skip-header] [--column <col>]| Flag | Default | Description |
|---|---|---|
-o |
table |
Output format: table, json, or csv |
--skip-header |
false |
Omit the header row from table and csv output |
--column |
Column to display (repeatable; table and csv only) |
Example:
$ dash0 -X teams list-members <team-id>
NAME EMAIL ID
Alice Smith [email protected] m1-0000-0000-0000-000000000001
Bob Jones [email protected] m2-0000-0000-0000-000000000002Column aliases are the same as for members list: name / member name, email, id / member id.
Add one or more existing organization members to a team. Members can be specified by ID or email address. When an email address is provided, it is resolved to a member ID via the members list API.
dash0 -X teams add-members <team-id> <member-id-or-email> [<member-id-or-email>...]Examples:
# Add members by ID
$ dash0 -X teams add-members <team-id> <member-id-1> <member-id-2>
2 members added to team "<team-id>"
# Add a member by email address
$ dash0 -X teams add-members <team-id> <email-address>
1 member added to team "<team-id>"
# Mix of IDs and email addresses
$ dash0 -X teams add-members <team-id> <member-id> <email-address>
2 members added to team "<team-id>"Remove one or more members from a team.
Members can be specified by ID or email address.
Prompts for confirmation unless --force is passed.
dash0 -X teams remove-members <team-id> <member-id-or-email> [<member-id-or-email>...] [--force]Examples:
# Remove a member by ID
$ dash0 -X teams remove-members <team-id> <member-id> --force
1 member removed from team "<team-id>"
# Remove a member by email address
$ dash0 -X teams remove-members <team-id> <email-address> --force
1 member removed from team "<team-id>"List all members of the organization.
dash0 -X members list [-o <format>] [--skip-header] [--column <col>]| Flag | Default | Description |
|---|---|---|
-o |
table |
Output format: table, json, or csv |
--skip-header |
false |
Omit the header row from table and csv output |
--column |
Column to display (repeatable; table and csv only) |
Example:
$ dash0 -X members list
NAME EMAIL ID
Alice Smith [email protected] m1-0000-0000-0000-000000000001
Bob Jones [email protected] m2-0000-0000-0000-000000000002
...Column aliases: name / member name, email, id / member id.
Aliases: ls
Invite one or more members to the organization by email address.
dash0 -X members invite <email> [<email>...] [--role <role>]| Flag | Default | Description |
|---|---|---|
--role |
basic_member |
Role to assign: basic_member or admin |
Example:
$ dash0 -X members invite [email protected]
Invitation sent to [email protected]
$ dash0 -X members invite [email protected] [email protected] --role admin
Invitations sent to 2 email addressesAliases: add
Remove one or more members from the organization.
Members can be specified by ID or email address.
Prompts for confirmation unless --force is passed.
dash0 -X members remove <member-id-or-email> [<member-id-or-email>...] [--force]Examples:
# Remove a member by ID
$ dash0 -X members remove <member-id> --force
Member "<member-id>" removed
# Remove a member by email address
$ dash0 -X members remove <email-address> --force
Member "<member-id>" removedAliases: delete
When environment variables are already set, no profile is needed:
export DASH0_API_URL=https://api.us-west-2.aws.dash0.com
export DASH0_OTLP_URL=https://ingress.us-west-2.aws.dash0.com
export DASH0_AUTH_TOKEN=auth_xxx
export DASH0_DATASET=default
# All commands now work without --api-url/--auth-token flags
dash0 dashboards list
dash0 -X logs query --from now-1h# Export to YAML
dash0 dashboards get <id> -o yaml > dashboard.yaml
# Edit the file, then update (ID is read from the file)
dash0 dashboards update -f dashboard.yaml
# Or use apply (auto-detects create vs update)
dash0 apply -f dashboard.yamlThe YAML output contains full asset definitions as a multi-document stream, ready to be re-applied:
# Export all dashboards
dash0 dashboards list -o yaml > all-dashboards.yaml
# Re-apply them later
dash0 apply -f all-dashboards.yamldash0 logs send "Deployment v2.3.0 completed" \
--event-name dash0.deployment \
--severity-number 9 \
--resource-attribute service.name=my-service \
--resource-attribute deployment.environment.name=production \
--log-attribute deployment.status=succeededdash0 -X logs query \
--from now-1h \
--filter "otel.log.severity.range is_one_of ERROR WARN" \
--limit 200Always pass --force to skip the confirmation prompt:
dash0 dashboards delete a1b2c3d4-... --forceUse --dry-run to check for errors without making changes:
dash0 apply -f assets/ --dry-run