dash0-cli

module
v1.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 16, 2026 License: Apache-2.0

README

Dash0 CLI

A command-line interface for interacting with Dash0 services.

Installation

Homebrew (macOS and Linux)
brew tap dash0hq/dash0-cli https://github.com/dash0hq/dash0-cli
brew install dash0hq/dash0-cli/dash0
GitHub Releases

Download pre-built binaries for your platform from the releases page. Archives are available for Linux, macOS and Windows across multiple architectures.

GitHub Actions

Use the dash0 CLI in your CI/CD workflows with the setup action:

steps:
  - uses: actions/checkout@v4

  - name: Setup Dash0 CLI
    uses: dash0hq/dash0-cli/.github/actions/setup@main  # You can use any git ref: @main, @v1.1.0, or @commit-sha
    # with:
    #   version: '1.1.0' # 1.1.0 is the earliest supported version

  - name: List dashboards
    env:
      DASH0_API_URL: ... # Find this at https://app.dash0.com/goto/settings/endpoints?endpoint_type=api_http
      DASH0_OTLP_URL: ... # Find this https://app.dash0.com/goto/settings/endpoints?endpoint_type=otlp_http
      DASH0_AUTH_TOKEN: ... # Get one from https://app.dash0.com/goto/settings/auth-tokens?auth_token_id=39d58aa9-b64e-464c-a675-cc3923085d6c ; keep the auth token in a GitHub secret!
      DASH0_DATASET: my-dataset # Leave empty for the `default` dataset
    run: dash0 dashboards list
Docker
docker run ghcr.io/dash0hq/cli:latest [command]

Multi-architecture images (linux/amd64, linux/arm64) are published to GitHub Container Registry.

From Source

Requires Go 1.22 or higher.

git clone https://github.com/dash0hq/dash0-cli.git
cd dash0-cli
make install

Usage

Configuration

Configure API access using profiles.

$ 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 active

$ dash0 config profiles create prod \
    --api-url https://api.eu-west-1.aws.dash0.com \
    --otlp-url https://ingress.eu-west-1.aws.dash0.com \
    --auth-token auth_yyy
Profile "prod" added successfully

$ dash0 config profiles list
  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

$ dash0 config profiles update prod --api-url https://api.us-east-1.aws.dash0.com
Profile 'prod' updated successfully

$ dash0 config profiles select prod
Profile 'prod' is now active

$ dash0 config show
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

The last seven digits of the auth token are displayed, matching the format shown in Dash0 as the dash0.auth.token attribute.

All profile fields are optional at creation time — you can provide any combination of --api-url, --otlp-url, --auth-token, and --dataset. Missing values can be supplied later via config profiles update or overridden at runtime with environment variables or CLI flags. Currently only HTTP OTLP endpoints are supported.

$ 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: ...ULSzVkM

$ DASH0_DATASET='production' dash0 config show
Profile:    dev
API URL:    https://api.us-west-2.aws.dash0.com
OTLP URL:   https://ingress.us-west-2.aws.dash0.com
Dataset:    production    (from DASH0_DATASET environment variable)
Auth Token: ...ULSzVkM

You can find the API endpoint for your organization on the Endpoints page, under the API entry, and the OTLP HTTP endpoint under the OTLP via HTTP entry. (Only HTTP OTLP endpoints are supported.)

The API URL, OTLP URL, dataset and authentication token can be overridden using environment variables or CLI flags (see Common Flags).

Applying Assets

Apply asset definitions from a file, directory, or stdin. The input may contain multiple YAML documents separated by ---:

$ dash0 apply -f assets.yaml
Dashboard "Production Overview" (a1b2c3d4-5678-90ab-cdef-1234567890ab) created
Check rule "High Error Rate" (b2c3d4e5-6789-01bc-def0-234567890abc) updated
View "Error Logs" (c3d4e5f6-7890-12cd-ef01-34567890abcd) created

$ dash0 apply -f dashboards/
dashboards/prod.yaml: Dashboard "Production Overview" (a1b2c3d4-...) created
dashboards/staging.yaml: Dashboard "Staging Overview" (d4e5f6a7-...) created
...

$ cat assets.yaml | dash0 apply -f -
Dashboard "Production Overview" (a1b2c3d4-...) created
...

$ dash0 apply -f assets.yaml --dry-run
Dry run: 1 document(s) validated successfully
  1. Dashboard "Production Overview" (a1b2c3d4-5678-90ab-cdef-1234567890ab)

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 discovered document fails validation, no document will be applied.

Supported asset types: Dashboard, CheckRule (both the plain Prometheus YAML and the PrometheusRule CRD), PrometheusRule, SyntheticCheck, View

Note: In Dash0, dashboards, views, synthetic checks and check rules are called "assets", rather than the more common "resources". The reason for this is that the word "resource" is overloaded in OpenTelemetry, where it describes "where telemetry comes from".

Dashboards
$ dash0 dashboards list
NAME                                      ID
Production Overview                       a1b2c3d4-5678-90ab-cdef-1234567890ab
...

$ dash0 dashboards get a1b2c3d4-5678-90ab-cdef-1234567890ab
Kind: Dashboard
Name: Production Overview
Dataset: default
Origin: gitops/prod
Created: 2026-01-15 10:30:00
Updated: 2026-01-20 14:45:00

$ dash0 dashboards get a1b2c3d4-5678-90ab-cdef-1234567890ab -o yaml
kind: Dashboard
metadata:
  name: a1b2c3d4-5678-90ab-cdef-1234567890ab
  ...
spec:
  display:
    name: Production Overview
  ...

$ dash0 dashboards create -f dashboard.yaml
Dashboard "My Dashboard" created successfully

$ dash0 dashboards update a1b2c3d4-5678-90ab-cdef-1234567890ab -f dashboard.yaml
Dashboard "My Dashboard" updated successfully

$ dash0 dashboards delete a1b2c3d4-5678-90ab-cdef-1234567890ab
Are you sure you want to delete dashboard "a1b2c3d4-..."? [y/N]: y
Dashboard "a1b2c3d4-..." deleted successfully
Check Rules
$ dash0 check-rules list
NAME                                      ID
High Error Rate Alert                     a1b2c3d4-5678-90ab-cdef-1234567890ab
...

$ dash0 check-rules get a1b2c3d4-5678-90ab-cdef-1234567890ab
Name: High Error Rate Alert
Dataset: default
Expression: sum(rate(errors[5m])) > 0.1
Enabled: true
Description: Alert when error rate exceeds threshold

$ dash0 check-rules create -f rule.yaml
Check rule "High Error Rate Alert" created successfully

$ dash0 check-rules update a1b2c3d4-5678-90ab-cdef-1234567890ab -f rule.yaml
Check rule "High Error Rate Alert" updated successfully

$ dash0 check-rules delete a1b2c3d4-5678-90ab-cdef-1234567890ab --force
Check rule "a1b2c3d4-..." deleted successfully

Both apply and check-rules create accept PrometheusRule CRD files:

$ dash0 check-rules create -f prometheus-rules.yaml
Check rule "High Error Rate Alert" created successfully

$ dash0 apply -f prometheus-rules.yaml
Check rule "High Error Rate Alert" (b2c3d4e5-...) created
Synthetic Checks
$ dash0 synthetic-checks list
NAME                                      ID
API Health Check                          a1b2c3d4-5678-90ab-cdef-1234567890ab
...

$ dash0 synthetic-checks get a1b2c3d4-5678-90ab-cdef-1234567890ab
Kind: Dash0SyntheticCheck
Name: API Health Check
Dataset: default
Origin:
Description: Checks API endpoint availability

$ dash0 synthetic-checks create -f check.yaml
Synthetic check "API Health Check" created successfully

$ dash0 synthetic-checks update a1b2c3d4-5678-90ab-cdef-1234567890ab -f check.yaml
Synthetic check "API Health Check" updated successfully

$ dash0 synthetic-checks delete a1b2c3d4-5678-90ab-cdef-1234567890ab
Are you sure you want to delete synthetic check "a1b2c3d4-..."? [y/N]: y
Synthetic check "a1b2c3d4-..." deleted successfully
Views
$ dash0 views list
NAME                                      ID
Error Logs View                           a1b2c3d4-5678-90ab-cdef-1234567890ab
...

$ dash0 views get a1b2c3d4-5678-90ab-cdef-1234567890ab
Kind: Dash0View
Name: Error Logs View
Dataset: default
Origin:

$ dash0 views create -f view.yaml
View "Error Logs View" created successfully

$ dash0 views update a1b2c3d4-5678-90ab-cdef-1234567890ab -f view.yaml
View "Error Logs View" updated successfully

$ dash0 views delete a1b2c3d4-5678-90ab-cdef-1234567890ab --force
View "a1b2c3d4-..." deleted successfully
Logs

Send log records to Dash0 via OTLP:

$ 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

Requires an OTLP URL configured in the active profile, or via the --otlp-url flag or the DASH0_OTLP_URL environment variable.

Common settings
Flag Short Env Variable Description
--api-url DASH0_API_URL Override API URL from profile. Find yours here.
--otlp-url DASH0_OTLP_URL Override OTLP URL from profile Find yours here.
--auth-token DASH0_AUTH_TOKEN Override auth token from profile. Find yours here.
--dataset DASH0_DATASET Override dataset from profile. Find the available datasets in your organization here. Use the value of identifier, not Name.
--file -f Input file path (use - for stdin)
--output -o Output format: table, wide, json, yaml
DASH0_CONFIG_DIR Override the configuration directory (default: ~/.dash0)
Output Formats

The list commands support four output formats:

  • table (default): Compact view with essential columns (name and ID)
  • wide: Similar to table, with additional columns (dataset and origin)
  • json: Full asset data in JSON format
  • yaml: Full asset data in YAML format
$ dash0 dashboards list
NAME                                      ID
Production Overview                       a1b2c3d4-5678-90ab-cdef-1234567890ab

$ dash0 dashboards list -o wide
NAME                                      ID                                    DATASET          ORIGIN
Production Overview                       a1b2c3d4-5678-90ab-cdef-1234567890ab  default          gitops/prod

The wide format includes the DATASET column even though dash0 operates commands on a single dataset at a time. This makes it easier to merge and compare outputs from commands run against different datasets.

Shell Completions

Enable tab completion for your shell:

Bash (requires bash-completion):

# Current session
source <(dash0 completion bash)

# Permanent (Linux)
dash0 completion bash > /etc/bash_completion.d/dash0

# Permanent (macOS with Homebrew)
dash0 completion bash > $(brew --prefix)/etc/bash_completion.d/dash0

Zsh:

# Current session
source <(dash0 completion zsh)

# Permanent (Linux)
dash0 completion zsh > "${fpath[1]}/_dash0"

# Permanent (macOS with Homebrew)
dash0 completion zsh > $(brew --prefix)/share/zsh/site-functions/_dash0

Fish:

# Current session
dash0 completion fish | source

# Permanent
dash0 completion fish > ~/.config/fish/completions/dash0.fish

Contributing

See CONTRIBUTING.md for development instructions.

Directories

Path Synopsis
cmd
dash0 command
testutil
Package testutil provides testing utilities for the Dash0 CLI.
Package testutil provides testing utilities for the Dash0 CLI.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL