Drilldowns Configuration¶
Drilldowns enable interactive navigation from dashboard panels. When users click on chart elements, they can either navigate to another dashboard or open an external URL with context from the clicked element.
A Poem for the Navigator¶
For those who build paths between dashboards:
Click a bar, a slice, a dot—
And suddenly you're somewhere not.
A drilldown takes you deeper still,
Through data paths at your will.
From overview to detail's door,
From summary to so much more.
The filters travel with your click,
The time range follows, smooth and quick.
Or venture to the web outside,
With URLs as your guide.
Template values fill the gap—
Context flows across the map.
So build your drilldowns, link your views,
Let users choose their data cruise.
Each click a portal, each tap a way
To discover more from what's displayed.
Overview¶
Drilldowns can be added to any Lens or ESQL panel by specifying the drilldowns field in the panel configuration. There are two types of drilldowns:
| Type | Description | Use Case |
|---|---|---|
| Dashboard Drilldown | Navigate to another Kibana dashboard | Deep-dive analysis, related dashboards |
| URL Drilldown | Open an external URL | Documentation, external systems, tickets |
Quick Example¶
panels:
- title: Events by Status
size: { w: half, h: 12 }
lens:
type: bar
data_view: logs-*
dimension:
type: values
field: http.response.status_code
id: status
metrics:
- aggregation: count
id: count
drilldowns:
# Navigate to another dashboard
- name: View Status Details
dashboard: status-details-dashboard
with_filters: true
with_time: true
# Open external documentation
- name: HTTP Status Reference
url: "https://httpstatuses.com/{{event.value}}"
new_tab: true
Drilldown Types¶
Dashboard Drilldown¶
Dashboard-to-dashboard drilldown configuration.
Attributes:
| Name | Type | Description |
|---|---|---|
dashboard |
str
|
Target dashboard ID or friendly identifier. |
with_filters |
bool
|
Whether to carry over current filters to the target dashboard. Defaults to True. |
with_time |
bool
|
Whether to carry over current time range to the target dashboard. Defaults to True. |
Show JSON schema:
{
"$defs": {
"DrilldownTrigger": {
"description": "User-facing drilldown trigger types.",
"enum": [
"click",
"filter",
"range"
],
"title": "DrilldownTrigger",
"type": "string"
}
},
"additionalProperties": false,
"description": "Dashboard-to-dashboard drilldown configuration.",
"properties": {
"id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional unique identifier for the drilldown. If not provided, one will be generated.",
"title": "Id"
},
"name": {
"description": "Display name for the drilldown.",
"title": "Name",
"type": "string"
},
"triggers": {
"description": "List of triggers that activate this drilldown. Defaults to ['click'].",
"items": {
"$ref": "#/$defs/DrilldownTrigger"
},
"title": "Triggers",
"type": "array"
},
"dashboard": {
"description": "Target dashboard ID or friendly identifier.",
"title": "Dashboard",
"type": "string"
},
"with_filters": {
"default": true,
"description": "Whether to carry over current filters to the target dashboard. Defaults to True.",
"title": "With Filters",
"type": "boolean"
},
"with_time": {
"default": true,
"description": "Whether to carry over current time range to the target dashboard. Defaults to True.",
"title": "With Time",
"type": "boolean"
}
},
"required": [
"name",
"dashboard"
],
"title": "DashboardDrilldown",
"type": "object"
}
URL Drilldown¶
URL drilldown configuration.
Attributes:
| Name | Type | Description |
|---|---|---|
url |
str
|
Target URL template. Can include Kibana template variables. |
new_tab |
bool
|
Whether to open the URL in a new tab. Defaults to False. |
encode_url |
bool
|
Whether to URL-encode the template variables. Defaults to True. |
Show JSON schema:
{
"$defs": {
"DrilldownTrigger": {
"description": "User-facing drilldown trigger types.",
"enum": [
"click",
"filter",
"range"
],
"title": "DrilldownTrigger",
"type": "string"
}
},
"additionalProperties": false,
"description": "URL drilldown configuration.",
"properties": {
"id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional unique identifier for the drilldown. If not provided, one will be generated.",
"title": "Id"
},
"name": {
"description": "Display name for the drilldown.",
"title": "Name",
"type": "string"
},
"triggers": {
"description": "List of triggers that activate this drilldown. Defaults to ['click'].",
"items": {
"$ref": "#/$defs/DrilldownTrigger"
},
"title": "Triggers",
"type": "array"
},
"url": {
"description": "Target URL template. Can include Kibana template variables.",
"title": "Url",
"type": "string"
},
"new_tab": {
"default": false,
"description": "Whether to open the URL in a new tab. Defaults to False.",
"title": "New Tab",
"type": "boolean"
},
"encode_url": {
"default": true,
"description": "Whether to URL-encode the template variables. Defaults to True.",
"title": "Encode Url",
"type": "boolean"
}
},
"required": [
"name",
"url"
],
"title": "UrlDrilldown",
"type": "object"
}
Trigger Types¶
Triggers determine what user action activates the drilldown:
| Trigger | Kibana Trigger | Description |
|---|---|---|
click |
VALUE_CLICK_TRIGGER |
Click on a data point (default) |
filter |
FILTER_TRIGGER |
Apply a filter action |
range |
SELECT_RANGE_TRIGGER |
Select a time range on a chart |
Configuration Examples¶
Basic Dashboard Drilldown¶
Navigate to another dashboard while preserving context:
Dashboard Drilldown Without Filters¶
Navigate without preserving current filters:
drilldowns:
- name: View Clean Dashboard
dashboard: target-dashboard
with_filters: false
with_time: true
URL Drilldown with Template Variables¶
Open a URL with the clicked value:
drilldowns:
- name: Search in Splunk
url: "https://splunk.example.com/search?q={{event.value}}"
new_tab: true
encode_url: true
Multiple Triggers¶
Configure a drilldown to respond to multiple trigger types:
drilldowns:
- name: Analyze Time Period
dashboard: time-analysis-dashboard
triggers:
- click
- range
Multiple Drilldowns on One Panel¶
Add multiple drilldown options to a single panel:
drilldowns:
# Primary drilldown
- name: View Details
dashboard: details-dashboard
id: primary-drill
# Secondary drilldown
- name: Open in External System
url: "https://external.example.com/item/{{event.value}}"
id: external-drill
new_tab: true
Custom Drilldown ID¶
Specify a custom ID for stable references:
URL Template Variables¶
URL drilldowns support Kibana's template syntax for dynamic URL construction:
| Variable | Description |
|---|---|
{{event.value}} |
The value of the clicked element |
{{event.key}} |
The key/label of the clicked element |
{{context.panel.query}} |
The panel's query string |
{{context.panel.filters}} |
Applied filters as JSON |
{{context.panel.timeRange.from}} |
Start of time range |
{{context.panel.timeRange.to}} |
End of time range |
Supported Panel Types¶
Drilldowns are supported on all chart panel types:
- Lens panels (metric, bar, line, area, pie, gauge, heatmap, datatable, tagcloud, mosaic)
- ESQL panels (all chart types)
Best Practices¶
-
Use descriptive names: The drilldown name appears in the context menu when users right-click.
-
Preserve context when relevant: Use
with_filters: trueandwith_time: truefor drill-down analysis. -
Use custom IDs: When you need stable references, specify an
idto prevent ID changes when reordering drilldowns. -
Open external URLs in new tabs: Use
new_tab: truefor URL drilldowns to preserve the user's dashboard session. -
Encode URLs: Keep
encode_url: true(the default) to properly escape special characters in template values.