Filter Segments

Grail filter segments are reusable, named filter definitions that logically structure observability data across the Dynatrace platform. They act as query-time context — where Grail evaluates only the segment includes relevant to the queried data type. dtctl provides full CRUD management and query-time integration for segments.

Listing Segments

# List all segments
dtctl get segments

# Wide output (includes description and owner)
dtctl get segments -o wide

# JSON or YAML for scripting
dtctl get segments -o json

Describing a Segment

Get full details for a specific segment, including its includes, variables, and visibility:

# By UID
dtctl describe segment abc123-def456

# By name (interactive disambiguation if ambiguous)
dtctl describe segment my-k8s-segment

Example output:

Name:          my-k8s-segment
UID:           abc123-def456
Description:   Filters data for Kubernetes cluster alpha
Public:        Yes
Owner:         user@example.invalid
Version:       3

Includes:
  DATA OBJECT         FILTER
  All data objects    k8s.cluster.name = "alpha"
  Logs                dt.system.bucket = "custom-logs"

Variables:
  Type:     query
  Value:    data record(ns="namespace-a"), record(ns="namespace-b")

Creating and Applying Segments

Define a segment in YAML and create or update it:

# Create (fails if the segment already exists)
dtctl create segment -f segment.yaml

# Apply (creates if new, updates if existing — idempotent)
dtctl apply -f segment.yaml

# Dry-run to preview what would happen
dtctl create segment -f segment.yaml --dry-run

Example Segment YAML

name: my-k8s-segment
description: Filters data for Kubernetes cluster alpha
isPublic: true
includes:
  - dataObject: _all_data_object
    filter: 'k8s.cluster.name = "alpha"'
  - dataObject: logs
    filter: 'dt.system.bucket = "custom-logs"'
variables:
  type: query
  value: 'data record(ns="namespace-a"), record(ns="namespace-b")'
Field Description
name Human-readable segment name
description Optional description
isPublic true for environment-wide visibility, false for owner-only (default)
includes Array of filter rules. Each specifies a dataObject and a filter expression. Includes are OR-combined within a segment.
dataObject Data type to filter: logs, spans, events, metrics, entities, or _all_data_object for all
filter DQL filter expression applied to the data object. dtctl automatically converts DQL to the API’s internal JSON AST format on create/update, and converts back to DQL on get/describe. You can also provide a raw JSON AST string (starting with {) which will be passed through unchanged.
variables Optional variable definition with type and value fields

Editing a Segment

Open a segment in your editor, modify it, and save to update:

dtctl edit segment my-k8s-segment

This opens the segment YAML in $EDITOR, then applies the changes on save. The optimistic locking version is handled automatically.

Using Segments in Queries

Segments can be applied at query time to filter results. See DQL Queries for full details.

# Apply a single segment
dtctl query "fetch logs | limit 10" --segment my-segment-uid

# Apply multiple segments (AND-combined per Grail semantics)
dtctl query "fetch logs | limit 10" --segment seg-1 --segment seg-2

# Bind variables inline (URL-query style)
dtctl query "fetch logs | limit 10" -S "my-segment?host=HOST-001"

# Multiple values for a variable
dtctl query "fetch logs | limit 10" -S "my-segment?host=HOST-001,HOST-002"

# Multiple variables on one segment
dtctl query "fetch logs | limit 10" -S "my-segment?host=HOST-001&ns=production"

# Use a YAML file for complex cases
dtctl query "fetch logs | limit 10" --segments-file segments.yaml

# By name (resolved via API)
dtctl query "fetch logs | limit 10" --segment my-k8s-segment

Watch Mode

Monitor segments in real time:

dtctl get segments --watch

Press Ctrl+C to stop watching.

Deleting a Segment

# Delete with confirmation prompt
dtctl delete segment abc123-def456

# Skip confirmation
dtctl delete segment abc123-def456 -y

dtctl prompts for confirmation in interactive mode. Use --plain to skip the prompt in scripts and CI pipelines.

Aliases

Segments support multiple aliases for convenience:

Context Primary Aliases
get segments segment, seg, filter-segments, filter-segment
describe segment seg, filter-segment
create segment seg, filter-segment
edit segment seg, filter-segment
delete segment segments, seg, filter-segment, filter-segments