<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
  <channel>
    <title><![CDATA[Teresa Alvarez Soler - Elasticsearch Labs]]></title>
    <description><![CDATA[Articles and tutorials from the Search team at Elastic]]></description>
    <copyright><![CDATA[© 2026. Elasticsearch B.V. All Rights Reserved]]></copyright>
    <image>
      <title><![CDATA[Teresa Alvarez Soler - Elasticsearch Labs]]></title>
      <url>https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt1121c0bf0e8a6e65/6a88da6340a1841030ef456f/search-labs-thumbnail.png</url>
      <link>https://www.elastic.co/search-labs/author/teresa-alvarez-soler</link>
    </image>
    <link>https://www.elastic.co/search-labs/author/teresa-alvarez-soler</link>
    <atom:link href="https://www.elastic.co/search-labs/rss/author/teresa-alvarez-soler.xml" rel="self" type="application/rss+xml"/>
    <language><![CDATA[en]]></language>
    <lastBuildDate>Mon, 14 Sep 2026 00:18:57 GMT</lastBuildDate>
  <item>
    <title><![CDATA[Dashboard activity logs: Find out which Kibana dashboards get used]]></title>
    <description><![CDATA[Kibana now logs who viewed, edited or deleted each dashboard, how long it took and what failed, so you can catch a broken dashboard before anyone reports it.]]></description>
    <content:encoded><![CDATA[<p>Kibana logs every dashboard view, edit, create, delete, and refresh, along with the user behind each one. Two lines in <code>kibana.yml</code> enable this logging. When you point Discover at the index, you can find the dashboards that nobody opened in 30 days and rank them by load time or see who edited the one that broke this morning. Dashboard <a href="https://www.elastic.co/docs/reference/kibana/user-activity">activity logs</a> run on self-managed clusters today, with Elastic Cloud support coming.</p><h2>How dashboard activity logs differ from the Kibana audit log</h2><p>Dashboard activity logs and the <a href="https://www.elastic.co/docs/reference/kibana/kibana-audit-events">Kibana audit log</a> both write structured logs about user actions, but they answer different questions.</p><p>
</p><p><strong>Kibana audit log</strong></p><p><strong>Dashboard activity logs</strong></p><p>Answers</p><p>Who accessed what, and when</p><p>Which dashboards are used, and how well they perform</p><p>Built for</p><p>Security and compliance teams</p><p>Kibana admins and dashboard owners</p><p>Tracks</p><p>Security-relevant events across Kibana</p><p>Five dashboard actions: create, update, delete, view, refresh</p><p>Enabled by</p><p>Its own setting in <code>kibana.yml</code></p><p><code>user_activity.enabled: true</code> in <code>kibana.yml</code></p><h2>What dashboard activity logs capture</h2><p>The user activity service records structured events every time a user interacts with a dashboard. Each event captures <em>what happened</em> and <em>to which dashboard</em>, in addition to <em>who did it</em>. Five actions are tracked:</p><p><strong>Action</strong></p><p><strong>Fires when</strong></p><p><strong>Includes duration</strong></p><p><code>dashboard_create</code></p><p>A dashboard is created</p><p>No</p><p><code>dashboard_update</code></p><p>An edit is saved</p><p>No</p><p><code>dashboard_delete</code></p><p>A dashboard is removed</p><p>No</p><p><code>dashboard_view</code></p><p>A user opens a dashboard</p><p>Yes, time on the dashboard until they navigate away</p><p><code>dashboard_refresh</code></p><p>A user changes filters or time range, or auto-refresh runs</p><p>Yes, refresh duration</p><p>Very often, a <code>dashboard_view</code> event also triggers a refresh.</p><p>Every event carries the same core fields, with two that appear conditionally:</p><p><strong>Field</strong></p><p><strong>What it holds</strong></p><p><strong>Present on</strong></p><p><code>user.name</code></p><p>Name of the user who performed the action</p><p>Every event</p><p><code>user.email</code></p><p>Email address of the user</p><p>Every event</p><p><code>user.roles</code></p><p>Roles assigned to the user</p><p>Every event</p><p><code>object.name</code></p><p>Dashboard name</p><p>Every event</p><p><code>object.id</code></p><p>Dashboard ID</p><p>Every event</p><p><code>kibana.space</code></p><p>Kibana space the dashboard belongs to</p><p>Every event</p><p><code>client.ip</code></p><p>IP address the request came from</p><p>Every event</p><p><code>event.action</code></p><p>Which of the five actions occurred</p><p>Every event</p><p><code>event.outcome</code></p><p>Whether the action succeeded or failed</p><p>Every event</p><p><code>event.duration</code></p><p>Time taken, in nanoseconds</p><p><code>dashboard_view</code> and <code>dashboard_refresh</code></p><p><code>error.type</code> / <code>error.message</code></p><p>Error class and message when something fails</p><p>Events where <code>event.outcome</code> is <code>failure</code></p><h2>How Kibana records dashboard activity</h2><p>Under the hood, Kibana plugins report events from the browser or server through a core client, and valid events are written to a dedicated logger. No data is sent to a third party; because events are standard JSON logs, you control where they go and how they’re ingested.</p><h2>What you can do with dashboard usage data</h2><p>Dashboard activity data answers five operational questions that would otherwise require further investigation:</p><ul><li><p><strong>Clean up unused dashboards.</strong> Filter for dashboards with zero <code>dashboard_view</code> events. If nobody's looking at it, archive it. This is critical for customers who are managing thousands of dashboards. </p></li><li><p><strong>Troubleshoot performance.</strong> The <code>event.duration</code> field tells you exactly how long each dashboard load or refresh takes. Sort by duration to find your slowest dashboards.</p></li><li><p><strong>Edit history.</strong> Every create, update, and delete is logged with the user who made the change. You no longer have to wonder who modified a critical dashboard or when it happened.</p></li><li><p><strong>Plan capacity.</strong> Identify users running heavyweight queries during peak hours. If one user's auto-refresh is hammering the cluster every 10 seconds, you'll see it.</p></li><li><p><strong>Monitor errors proactively.</strong> Dashboards throwing errors surface immediately through <code>error.type</code> and <code>error.message</code> fields, so you don’t need to wait for users to report them.</p></li></ul><h2>How to enable dashboard activity logs in Kibana</h2><p>Add two lines to your <code>kibana.yml</code> ( the service is disabled by default):</p>user_activity:
  enabled: true<p>Events will start flowing immediately using a default JSON console appender. You can customize the output appender and filter specific actions using the same logging configuration schema that Kibana already uses:</p>user_activity:
  enabled: true
  appenders:
    console_json_default_appender:
      type: console
      layout:
        type: json
  filters:
    - policy: keep
      actions: [dashboard_view, dashboard_refresh]<p>Ship these logs into an Elasticsearch index (for example, via Filebeat), and you have a fully queryable dataset of dashboard usage.</p><h2>How to query dashboard activity in Discover</h2><p>Once your activity logs are indexed, open Discover and point it at your user activity index pattern. You'll immediately see every dashboard interaction as a structured event, and they’re filterable by action type, user, dashboard name, and time range.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt4c49281e39a0301e/6a950fc6a3077ca19c3fe663/1.png" alt="Kibana Discover showing dashboard activity logs with event.action, object.name, duration and outcome columns" /><p>From here, you can quickly answer specific questions like the examples below. </p><h3>How many times was a dashboard viewed? </h3><p>Type your question in natural language in the Discover query editor, and press <strong>Cmd+J</strong> to automatically generate the Elasticsearch Query Language (ES|QL) query, as shown below:</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt68dce42018ead590/6a9510d5a16336aae0371701/2.gif" alt="Generating an ES|QL query from plain language in Discover to search dashboard activity logs" /><h3>Which dashboards had zero views in the last 30 days?</h3><p>Dashboards with no activity simply don't appear in the logs, so you can't filter directly for zero views. Instead, this query works backward, pulling every dashboard created (and not deleted) in the past year and then checking which of those had zero views in the last 30 days.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blta5fe21fc80d3e276/6a9510f5923082d373c4a4f0/3.png" alt="ES|QL query on dashboard activity logs listing 30 Kibana dashboards with zero views in the last 30 days" /><h3>Which dashboards took longer than 10 seconds to load?</h3><p>Note that <code>event.duration</code> is recorded in nanoseconds, so the query converts to seconds before filtering:</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltaa956eb37e5278e8/6a95113b6fe1457f2bb1bf89/4.png" alt="ES|QL query ranking slow Kibana dashboards by load time, topped by Host Metrics Overview at 69 seconds" /><h3>Which dashboards are throwing errors, and what's failing?</h3><p>This query shows dashboards with one or more panels throwing errors during <code>dashboard_refresh</code> events, so you can quickly spot recurring issues and prioritize fixes:</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt8911faf07ccd694f/6a951153ecbe18f7691e19c0/5.png" alt="Dashboard activity logs showing failed dashboard refreshes grouped by error, with 17 errors on one dashboard" /><h2>Build a dashboard usage overview with AI chat</h2><p>We’re planning to add out-of-the-box dashboards along with the activity logs, but in the meantime, instead of manually building visualizations, open the <a href="https://www.elastic.co/docs/explore-analyze/ai-features/agent-builder/chat">AI chat</a> in Kibana and ask it to create a dashboard from your user activity data. </p><p>The generated dashboard gives you at-a-glance visibility into your most-viewed dashboards, heaviest users, slowest-performing panels, and recent errors; that is, exactly the operational view that large deployments need.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt0734798e18f535af/6a9511928814aa03da89c1be/6.gif" alt="Building a dashboard usage overview from the user-activity-logs index using Agent Chat in Kibana" /><h2>Get started with dashboard activity logs</h2><p>User activity logs are available in Kibana 9.5. Begin by enabling the service. Then ship the logs into an index, and start building the operational visibility that your team has been asking for. For full configuration details and the complete event schema, see the <a href="https://www.elastic.co/docs/reference/kibana/user-activity">user activity documentation</a>.</p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/dashboard-activity-logs-kibana</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/dashboard-activity-logs-kibana</guid>
    <category><![CDATA[Kibana]]></category>
    <category><![CDATA[Operations]]></category>
    <category><![CDATA[Analytics]]></category>
    <dc:creator><![CDATA[Teresa Alvarez Soler,Rudolf Meijering]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt505cee76dae8eff8/6a950f70e657a3cdea75aeb7/image4.png" length="0" type="image/png"/>
    <pubDate>Mon, 31 Aug 2026 15:15:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[Kibana Dashboards API: A stable contract for every panel type, tested by 50+ teams before GA]]></title>
    <description><![CDATA[Manage Kibana dashboards as code: Commit to Git, promote across environments, and automate deployments with the Kibana API and Terraform.]]></description>
    <content:encoded><![CDATA[<p>The<a href="https://dashboardsapispec.kibana.dev/dashboards#tag/Dashboards"> Kibana Dashboards and Visualizations APIs</a> are production-ready in Elastic 9.5, available across all subscription tiers, with full backward compatibility. Define your dashboards as JSON, commit them to Git, and then deploy across environments using continuous integration and continuous deployment (CI/CD) pipelines,<a href="https://registry.terraform.io/providers/elastic/elasticstack/latest/docs/resources/kibana_dashboard"> Terraform</a>, or whatever tooling you already have. Over 50 teams tested the API during<a href="https://www.elastic.co/search-labs/blog/kibana-dashboards-as-code-terraform-api"> technical preview in 9.4</a>, some already running it in production. Version 9.5 also adds new endpoints (in technical preview) for<a href="https://dashboardsapispec.kibana.dev/tags.html"> Tags</a>, with<a href="https://dashboardsapispec.kibana.dev/markdowns.html"> Markdown</a> and<a href="https://dashboardsapispec.kibana.dev/links.html#tag/Links"> Links</a> panel endpoints available now in Elastic Cloud Serverless and landing in 9.6.</p><h2>What backward compatibility means for the Kibana Dashboards API</h2><p>During technical preview, the API shape could change between releases.[1] That's no longer the case. General availability (GA) means:</p><ul><li><p><strong>Complete backward compatibility.</strong> New fields and panel types will be added over time, but existing fields and behavior remain unchanged. Any future breaking changes would be very carefully considered and would only be introduced in a new major stack version.</p></li><li><p><strong>Production-ready with full support.</strong> The API carries Elastic's full support guarantees. You can safely use it in production environments for automated deployments, environment promotion, and programmatic dashboard management.</p></li></ul><h2>New Kibana API endpoints for Tags, Markdown, and Links panels</h2><p>Elastic 9.5 also introduces a new  standalone endpoint for <a href="https://dashboardsapispec.kibana.dev/tags.html"><strong>Tags</strong></a>, which let you categorize and filter dashboards. Now you can manage them programmatically through dedicated CRUD endpoints, making it easier to organize dashboards at scale across environments.	</p><p>New <a href="https://dashboardsapispec.kibana.dev/markdowns.html"><strong>Markdown</strong></a> and <a href="https://dashboardsapispec.kibana.dev/links.html#tag/Links"><strong>Links</strong></a> panel endpoints are available now in Serverless and will land in the next stack release (9.6).</p><h2>What panel types does the Kibana Dashboards API support?</h2><p>The Dashboards API supports all <em>by-value</em> panels in 9.5 (those defined directly in a dashboard, as opposed to library panels saved for reuse). Every supported panel type has a typed, validated schema.</p><p><strong>Panel type</strong></p><p><strong>Status</strong></p><p>XY charts</p><p>Supported</p><p>Metrics</p><p>Supported</p><p>Pie</p><p>Supported</p><p>Gauge</p><p>Supported</p><p>Heatmap</p><p>Supported</p><p>Data tables</p><p>Supported</p><p>Treemap</p><p>Supported</p><p>Discover sessions</p><p>Supported</p><p>Controls</p><p>Supported</p><p>Markdown</p><p>Supported</p><p>Links</p><p>Supported</p><p>ML panels</p><p>Supported</p><p>Observability panels</p><p>Supported</p><p>Maps</p><p>Coming soon</p><p>Vega</p><p>Coming soon</p><h2>How to manage Kibana dashboards as code</h2><p>The Dashboards API enables a full dashboards-as-code workflow: Export a dashboard as clean, diffable JSON, commit it to Git as the source of truth, review changes in pull requests, and deploy the same definition across development, staging, and production. Once a dashboard is managed as code, treat Git as the single source of truth: Changes made directly in the UI are overwritten the next time you deploy.</p><p>The main challenge when moving a dashboard between spaces, clusters, or stages is that dashboards reference objects like data views and library visualizations by ID. Because these IDs are auto-generated and differ across environments, a dashboard exported from one environment can point at objects that don't exist in another. There are three ways to handle this, listed here from most to least automated:</p><ul><li><p><strong>Use Terraform.</strong> The <a href="https://registry.terraform.io/providers/elastic/elasticstack/latest/docs/resources/kibana_dashboard">Elastic Stack Terraform provider</a> tracks each resource and maps IDs per environment automatically, so references stay consistent as you promote a dashboard from development to production.</p></li><li><p><strong>Define by-value </strong><a href="https://www.elastic.co/docs/explore-analyze/visualize/esorql"><strong>Elasticsearch Query Language (ES|QL) panels</strong></a><strong>.</strong> The most portable way to build a panel is to define its visualization with ES|QL directly in the dashboard. An <a href="https://www.elastic.co/docs/explore-analyze/query-filter/languages/esql-kibana">ES|QL</a> query reads from the indices you name in it, so the panel carries no external references to data views or library objects. The result is a fully self-contained, portable dashboard.</p></li><li><p><strong>Assign matching IDs.</strong> If you reference saved objects, like data views or library visualizations, create them with a chosen ID using <code>PUT</code> (upsert) rather than <code>POST</code> (which auto-generates an ID). Use human-readable IDs, like <code>logs-prod</code>, so they're easy to reuse and recognize across environments.</p></li></ul><p>For a detailed walkthrough of these portability patterns and the full dashboards-as-code workflow, see the <a href="https://www.elastic.co/docs/explore-analyze/dashboards/manage-dashboards-as-code#dashboards-as-code-portability">Manage dashboards as code</a> documentation.</p><h3>Create a Kibana dashboard with the Dashboards API using PUT</h3><p>Here's a quick example creating a dashboard with a metric panel using <code>PUT</code> instead of <code>POST</code> to assign a custom ID using the dashboard name (<code>service-health-overview</code>). The same logic works for creating standalone visualizations saved in the library.</p>PUT kbn:/api/dashboards/service-health-overview
{
  "title": "Service health overview",
  "description": "Key service metrics — managed via API",
  "tags": [
    "production",
    "sre-team"
  ],
  "panels": [
    {
      "type": "vis",
      "grid": {
        "x": 0,
        "y": 0,
        "w": 12,
        "h": 8
      },
      "config": {
        "title": "Error rate (5xx)",
        "type": "metric",
        "data_source": {
          "type": "esql",
          "query": "FROM logs-* | WHERE http.response.status_code &gt;= 500 | STATS error_rate=count(*) BY host.name"
        },
        "metrics": [
          {
            "type": "primary",
            "column": "count"
          }
        ]
      }
    }
  ]
}<h2>Kibana Dashboards API roadmap: Maps, Vega, and standalone endpoints</h2><p>We're actively expanding the API surface. Maps and Vega panel support is next, adding typed schemas for them. We're also building standalone CRUD endpoints for Discover sessions (beyond their existing support as dashboard panels), Vega, Maps, and Annotations, decoupled from the dashboard lifecycle.</p><p>For the full schema definitions, visit the <a href="https://dashboardsapispec.kibana.dev/dashboards#tag/Dashboards">Dashboards API documentation</a>. For Terraform users, the <a href="https://registry.terraform.io/providers/elastic/elasticstack/latest/docs/resources/kibana_dashboard">Elastic Stack Terraform provider</a> supports the GA Dashboards API.</p><h2>Note</h2><ol><li><p>The core endpoints are unchanged from the technical preview. If you built integrations against 9.4, they work in 9.5. The only breaking changes are two minor ones affecting dashboard listing and duration unit formats, documented <a href="https://www.elastic.co/docs/release-notes/kibana/breaking-changes">here</a>.</p></li></ol>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/dashboards-as-code-kibana-api</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/dashboards-as-code-kibana-api</guid>
    <category><![CDATA[Kibana]]></category>
    <category><![CDATA[Developer Experience]]></category>
    <category><![CDATA[Integrations]]></category>
    <dc:creator><![CDATA[Teresa Alvarez Soler]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt8ed7e33de291f255/6a730619c8b7ac02b251f9d3/image1.png" length="0" type="image/png"/>
    <pubDate>Wed, 05 Aug 2026 00:00:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[Close enough is fast enough: How ES|QL Fast mode makes Kibana dashboards up to 100x faster]]></title>
    <description><![CDATA[Fast mode samples a fraction of the data instead of scanning all of it. This release also brings click-to-filter for ES|QL charts, query-powered controls, and cleaner metric and bar chart layouts.]]></description>
    <content:encoded><![CDATA[<p>Elasticsearch Query Language (ES|QL) STATS queries on Kibana dashboards now run up to 100x faster. ES|QL Fast mode, in general availability (GA) in Kibana 9.5, samples a fraction of the data rather than scanning every row, and results stay within a 90% confidence interval. With Fast mode, ES|QL charts pick up click-to-filter and Discover drilldowns. Plus, controls can pull their values from an ES|QL query, and metric and bar chart defaults are cleaner. This builds on the dashboard improvements<a href="https://www.elastic.co/search-labs/blog/kibana-dashboards-improvements"> shipped in 9.4</a>. The <a href="https://www.elastic.co/search-labs/blog/dashboards-as-code-kibana-api">Dashboards API</a> and <a href="https://www.elastic.co/search-labs/blog/ai-dashboards-kibana-vega-lite">AI dashboards and Vega-Lite charts</a> also go GA in this release.</p><h2>ES|QL charts performance and interactivity in Kibana dashboards</h2><h3>How ES|QL Fast mode runs dashboard queries up to 100x faster</h3><p>For common analytical tasks, like trend tracking, top-host identification, and capacity overviews, trading a small margin of accuracy for dramatically faster results is the right call, especially since not every question needs an exact answer.</p><p><a href="https://www.elastic.co/search-labs/blog/fast-approximate-esql-part-1">Elastic Search 9.4 introduced approximate ES|QL queries</a> as a syntax-only command in technical preview. Now, 9.5 makes approximation GA and adds<a href="https://www.elastic.co/docs/explore-analyze/query-filter/languages/esql-kibana#esql-kibana-fast-mode-toggle"> <strong>Fast mode</strong></a>, a UI toggle in Dashboards and Discover that enables<a href="https://www.elastic.co/docs/reference/query-languages/esql/esql-query-approximation"> approximate ES|QL STATS queries</a> without writing any query syntax. This makes Kibana one of the first tools to offer smart sampling with automatic extrapolation as a simple switch.</p><p>Fast mode is an Enterprise-only feature and is off by default. Dashboard authors can save their preferred state with the dashboard, and individual queries can override the toggle with <code>SET approximation=true</code> or <code>false</code> inline.</p><p>When switched on, ES|QL STATS queries target a fixed sample size (defaulting to 1,000,000 rows for grouped aggregations and 100,000 rows otherwise) rather than scanning the full dataset.<a href="https://www.elastic.co/search-labs/blog/fast-approximate-esql-part-1"> Benchmarks show heavy aggregations running up to 100x faster</a> on large datasets, with results that are typically highlyaccurate, defaulting to a 90% confidence interval. Approximation only applies to STATS commands where results can remain accurate. When accuracy cannot be ensured (such as with small datasets or aggregations like MAX, MIN, or COUNT_DISTINCT), Kibana automatically falls back to exact execution, even with Fast mode enabled.</p><p>Further improvements to how charts communicate that results are approximate are coming in future releases.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt473f75b25868afa1/6a719ccf75ed4699484a85dc/image2.png" alt="Kibana Fast mode toggle set to ON showing the approximation tooltip on a dashboard with metric panels" /><h3>Click-to-filter and Discover drilldowns for ES|QL charts</h3><p>Two of the most popular interactions for data view charts are also landing now for ES|QL-based visualizations.</p><ul><li><p><strong>Discover drilldowns</strong> now work on ES|QL panels. When a user clicks a data point or uses Explore in Discover, filters are translated to ES|QL <code>WHERE</code> clauses and Kibana Query Language (KQL) queries are carried over automatically. </p></li><li><p><strong>Click-to-filter also works for renamed fields:</strong> if your query renames a column (<code>STATS BY node = k8s.node.name</code>), Kibana now resolves the alias back to the indexed field, so the filter applies correctly.</p></li><li><p><strong>Tooltips:</strong> When filtering genuinely can't work (for example, because the field was computed entirely within the query and doesn't exist in the index), Kibana now shows a tooltip explaining why, so users know that it's a query limitation.Beyond interactivity, ES|QL layers now have the same <strong>Use global filters</strong> toggle (gear icon on the layer header) as data-view-backed visualizations. When you turn it off, the layer's query runs independently of dashboard-level filters, just like form-based layers already do. This is useful for reference lines, thresholds, or baselines that shouldn't change when you filter the dashboard. And ES|QL metric charts now support a background chart, matching the styling option already available for data view metrics.</p></li></ul><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt960ef7848c551ff0/6a719cfc3931bc448f28de69/image9.gif" alt="Kibana dashboard in edit mode with Host, OS, Cloud Provider and Region controls populated by ES|QL queries" /><p>Beyond interactivity, ES|QL layers now have the same <strong>Use global filters</strong> toggle (gear icon on the layer header) as data-view-backed visualizations. When you turn it off, the layer's query runs independently of dashboard-level filters, just like form-based layers already do. This is useful for reference lines, thresholds, or baselines that shouldn't change when you filter the dashboard. And ES|QL metric charts now support a background chart, matching the styling option already available for data view metrics.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltf557d2a4578741bc/6a719e42e35d0253ce0312ec/image8.gif" alt="Kibana dashboard showing metric charts with Default density layout and preset style templates applied" /><p></p><p>Upcoming releases aim to keep adding the remaining functionality to ES|QL visualizations, such as multilayer support and saving visualizations to the library.</p><h3>Identify which Kibana panels use an ES|QL variable</h3><p><a href="https://www.elastic.co/search-labs/blog/kibana-dashboard-interactivity-variable-controls-overview">Variable controls</a> are among the most popular ES|QL-only features, since they let you parameterize chart queries to switch between fields, time intervals, or groupings without duplicating panels. On a dashboard with many panels and controls, though, it can be hard to tell which visualizations a variable actually affects. In edit mode, you can now click an ES|QL variable control's label to identify all related panels that consume the variable. Variables with no related panels display a warning to make it easier to audit wiring before saving.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt5e565e80cda5cfce/6a71a13eb966e1768c63d81b/image5.gif" alt="Kibana dashboard with Host, OS and Cloud Provider controls filtering CPU and memory charts in view mode" /><h2>Kibana metric and bar chart layout defaults</h2><h3>Metric chart preset layouts and density options</h3><p>The metric chart appearance panel now offers preset layouts: <strong>Top</strong>, <strong>Middle</strong>, <strong>Bottom</strong>, and <strong>Custom</strong>. When you pick a template, the layout snaps into place. If you need fine-grained control, switch to <strong>Custom</strong>.</p><p>Metrics used to pack values tightly, which is great for data-dense dashboards but hard to scan when a metric stands alone. Elastic Cloud 9.5 adds a <strong>Density</strong> style option under <strong>Style &gt; Details &gt; Other</strong>, with two presets: <strong>Compact</strong> (the previous layout) and <strong>Default</strong> (more padding, larger typography). Newly created metrics use <strong>Default</strong>, and existing saved charts keep <strong>Compact</strong> until you change them.</p><p><strong>Attribute</strong></p><p><strong>Compact</strong></p><p><strong>Default</strong></p><p>Padding</p><p>Tight, minimal spacing</p><p>More generous whitespace</p><p>Typography</p><p>Smaller text</p><p>Larger text</p><p>Best for</p><p>Data-dense dashboards with many metrics side by side</p><p>Standalone metrics or dashboards with fewer panels</p><p>New charts</p><p>Must be selected manually</p><p>Applied automatically</p><p>Existing charts</p><p>Preserved until changed</p><p>Must be selected manually</p><p></p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt7434a5894cd1a048/6a719e8478b5febf378f12bc/image6.gif" alt=" Kibana dashboard edit mode showing the Settings gear icon on an ES|QL metric panel with global filter controls" /><h3>Responsive bar chart labels in Kibana</h3><p>Labels in horizontal bar charts used to grow unchecked, so on smaller screens, a chart with long category names could become unreadable. Bar labels now get a max width and middle-truncate automatically, so the beginning and end of a label stay visible even when the full text doesn't fit. This works by default, with no configuration needed. In 9.6, we’re planning many more improvements to bar charts and labels.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt85aa55cba5eb3a78/6a719ea65f2918842f13c2cb/image7.gif" alt="Before and after comparison of Kibana horizontal bar chart labels truncating responsively on smaller screens" /><h2>Kibana dashboard controls populated by ES|QL queries</h2><p><a href="https://www.elastic.co/docs/explore-analyze/visualize/add-controls#create-and-add-options-list-and-range-slider-controls">Controls</a> are the most user-friendly way to filter a dashboard, and most dashboards use them. One of the longest-standing requests from users has been the ability to prefilter the values that a control shows. ES|QL queries make that possible and open a much wider set of possibilities, like chaining controls in new ways using variables. Regardless of how the values are populated, controls filter every panel on the dashboard, including ES|QL and data view visualizations.</p><p>Controls can now be populated from an ES|QL query instead of selecting a data view field directly. The <strong>Create control</strong> flyout adds a <strong>Select a field / Write a query</strong> toggle. You can write an ES|QL query that returns a single column and run it, and then the control derives its options from the result. Queries can reference dashboard <a href="https://www.elastic.co/docs/explore-analyze/visualize/add-variable-controls">variables</a> through the <code>?variable</code> syntax, enabling flexible chaining between controls.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltacb5b26c2b31f3e6/6a719ebdded0cff1f5f49290/image1.png" alt="Kibana Edit control flyout showing an ES|QL query populating a Host options list on a dashboard" /><h2>Coming soon: Progress bar visualization for Kibana tables</h2><p>A new progress bar visualization type is available in Elastic Cloud Serverless and is planned for general availability in 9.6. Progress bars show a value relative to a goal or maximum, which is useful for many O11y metrics, like CPUs, memory, or Service Level Agreement (SLA) tracking.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt991d8a3c7d03068d/6a719ed7c2c8edb0c708b82a/image4.png" alt="Kibana table visualization with progress bar cell decoration showing Average Bytes per request path" /><h2>What's next for Kibana dashboards and ES|QL visualizations</h2><p>Upcoming releases will keep pushing on better defaults, improving the ES|QL visualization experience, and adding new chart types. If you have a pain point or a feature request, select <strong>Submit feedback</strong> in the top menu; we're listening.</p><h2>How to try ES|QL Fast mode and the new Kibana dashboard features</h2><p>If you use <a href="https://www.elastic.co/cloud/serverless">Elastic Cloud Serverless</a>, you may already be using these changes. Otherwise, upgrade to 9.5, and then create a dashboard or open an existing one. Many updates apply automatically to new visualizations, while layout and style options appear in edit mode. If you aren't on Elastic Cloud yet, <a href="https://cloud.elastic.co/registration">start a trial</a> and explore the latest Kibana dashboards there.</p><p><em>The release and timing of any features or functionality described in this post remain at Elastic's sole discretion. Any features or functionality not currently available may not be delivered on time or at all.</em></p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/kibana-dashboards-esql-fast-mode</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/kibana-dashboards-esql-fast-mode</guid>
    <category><![CDATA[Kibana]]></category>
    <category><![CDATA[ES|QL]]></category>
    <category><![CDATA[Analytics]]></category>
    <dc:creator><![CDATA[Teresa Alvarez Soler]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt8b0336f51b4694f0/6a719cab5e874b5b0e1ab976/image3.png" length="0" type="image/png"/>
    <pubDate>Tue, 04 Aug 2026 00:00:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[Prompt to dashboard in under a minute, 5x cheaper: AI dashboards and custom Vega-Lite charts in Kibana]]></title>
    <description><![CDATA[Describe your metrics in natural language and Kibana's AI chat generates ES|QL-backed dashboards and Vega-Lite charts, from scatter plots to conditional formatting and custom tooltips.]]></description>
    <content:encoded><![CDATA[<p>Kibana's<a href="https://www.elastic.co/docs/explore-analyze/ai-features/agent-builder/chat"> AI chat</a> now builds full<a href="https://www.elastic.co/docs/explore-analyze/visualize/esorql"> Elasticsearch Query Language–backed (ES|QL-backed)</a> dashboards from a natural-language prompt in under a minute. In Elastic 9.5, this moves to general availability (GA) (<a href="https://www.elastic.co/search-labs/blog/ai-dashboard-generation-elastic-agent-kibana">technical preview in 9.4</a>) with error recovery that retries failed queries, 5x lower ES|QL generation costs through tiered model routing, and interactive filter controls. This release also adds<a href="https://www.elastic.co/docs/explore-analyze/visualize/custom-visualizations-with-vega"> Vega-Lite</a> chart creation through natural language, including scatter plots, box plots, conditional formatting, and custom tooltips that you'd normally have to hand-code in JSON.</p><h2>What's new in Kibana's AI dashboard creation</h2><p><strong>Capability</strong></p><p><strong>Technical preview (9.4)</strong></p><p><strong>GA (9.5)</strong></p><p>Error handling</p><p>No retry on failed ES|QL queries</p><p>Automatic retry up to three times with query inspection and adjustment</p><p>ES|QL generation cost</p><p>All queries routed through the primary model</p><p>Tiered model routing, up to 5x cheaper</p><p>Time range</p><p>Fixed default window</p><p>Automatic selection based on data time distribution</p><p>Filter controls</p><p>Not supported</p><p>Automatically added for the most relevant fields</p><p>Vega-Lite charts</p><p>Not supported</p><p>Natural-language creation, including scatter plots, box plots, conditional formatting, custom tooltips</p><p>Chart editing</p><p>Not supported</p><p>Edit existing Vega-Lite panels through natural language</p><h3>Automatic error recovery for AI dashboard generation</h3><p>In the technical preview, the agent didn’t retry failed ES|QL queries. In 9.5, it detects query errors and retries up to three times, inspecting each error and adjusting the query before giving up. In practice, this eliminates the majority of empty-panel issues and produces dashboards that render correctly on the first try.</p><h3>Why is AI dashboard creation cheaper in Elastic 9.5?</h3><p>Not every step in dashboard generation needs the same level of reasoning. In 9.5, ES|QL generation routes through a lighter model by default and falls back to the primary model only when needed. If your <a href="https://www.elastic.co/docs/explore-analyze/ai-features/agent-builder/connectors">connector</a> uses Anthropic's Claude Opus 4.8, that means 5x cheaper for ES|QL generation across all panels.</p><h3>Automatic time range selection based on your data</h3><p>Dashboards are only useful when they show the right window of data. The agent now applies improved logic to pick a time range that makes sense for the data it's querying, unless the user asks for a specific time range. It considers the data's time distribution and adjusts accordingly, whether that means the last hour for a live incident or the last 90 days for a trend analysis, rather than defaulting to a fixed window.</p><h3>Automatic filter controls on AI-generated dashboards</h3><p>Dashboard creation now supports controls; that is, interactive filters that let viewers narrow a dashboard by field values without editing the underlying queries. When generating a dashboard, the agent automatically adds controls at the top for the fields most relevant to filter by.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt4a5520e66ae76001/6a719a218a155220ed6498e7/image3.png" alt="Kibana AI chat generating an ES|QL-backed host metrics dashboard with automatic filter controls in 71 seconds" /><h2>Vega-Lite charts from natural language: Chart types and formatting beyond the defaults</h2><p><a href="https://vega.github.io/vega/">Vega</a> and <a href="https://vega.github.io/vega-lite/examples/">Vega-Lite</a> support a wide range of chart types and customizations in Kibana. With 9.5, you can build them from plain language instead of writing the code yourself. </p><h3>Scatter plots, box plots, and more Vega-Lite chart types</h3><p>Scatter plots, box plot charts, faceted small multiples, bubble charts, and composition charts (like combining histograms with heatmaps), among many others, are supported by <a href="https://vega.github.io/vega-lite/examples/">Vega-Lite</a>. A prompt like <em>Show me a scatter plot of response time vs. request size, colored by service name</em> produces a Vega-Lite panel with the right data mappings. They use Kibana's default color palettes to blend with the rest of the dashboard.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltf1651fe7ac903d47/6a719a49f124649f746fc1b4/image5.png" alt="Kibana dashboard with four Vega-Lite charts: box plot, bubble chart, faceted small multiples, and heatmap." /><h3>Conditional formatting, custom tooltips, and labels on standard charts</h3><p>Even for chart types that are already native to dashboards, like bar, line, or area, sometimes you need more control than the default capabilities offer. Vega-Lite through the chat fills that gap. Some examples include:</p><ul><li><p><strong>Conditional color formatting:</strong> Color data points above a threshold differently; for example, turning data points in a line or bars red when some metric spikes beyond your Service Level Objective (SLO). Ask the agent something like <em>Turn any points above 500ms red for my line chart.</em> </p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltc1211784e9033557/6a719a6ab966e1736163d7d1/image1.png" alt="Vega-Lite line and bar charts in Kibana with conditional colour formatting showing data points above a threshold in red" /><p></p></li><li><p><strong>Custom marks and labels:</strong> Add emojis, symbols, or inline text labels to data points for at-a-glance status indicators.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blte3c59c3748484bc1/6a719aa02888394fdc07bac1/image2.png" alt="Lite horizontal bar chart in Kibana with emoji flag labels and custom tooltip showing requests by country" /><p></p></li><li><p><strong>Custom tooltips:</strong> Enrich hover states with additional metrics, context, or computed values that aren't part of the chart's axes. Ask something like <em>Add a tooltip that shows total record counts and the % per bar.</em></p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt43f241f4382b5b90/6a719ab7ded0cf3367f49275/image4.png" alt="Vega-Lite stacked bar chart in Kibana with custom tooltip showing total records and percentage of total by extension" /><p></p></li></ul><p>This also works for editing existing Vega charts. If you have a Vega-Lite panel that needs a tweak like changing a color scale, adjusting an axis, or switching the mark type, describe the change in chat instead of digging into the JSON code.</p><h2>How we built natural-language Vega-Lite generation in Kibana</h2><p>Generating a Vega-Lite chart from a sentence is not a one-shot <em>ask the model for JSON</em> prompt. We built a small agentic pipeline that turns natural-language intent into a validated, data-backed chart.</p><p>When a request comes in, the agent first determines whether Vega-Lite is the right fit. For Vega-Lite requests, it grounds the visualization in a real ES|QL query against Elasticsearch and then uses a model to generate the Vega-Lite code. Before rendering, the result goes through a normalization layer that corrects the schema and binds the canonical query. It also applies render-safety transformations. </p><p>A few design choices make this workflow reliable:</p><ul><li><p><strong>Typed tool calling</strong>: Chart creation is a structured tool invocation rather than free-form Vega-Lite pasted into the conversation.</p></li><li><p><strong>Constrained generation</strong>: The model generates Vega-Lite code within a defined schema, making the output more predictable and easier to validate.</p></li><li><p><strong>Curated examples:</strong> Structural patterns, such as faceting, layered marks, and heatmaps, provide guidance without copying the underlying data.</p></li><li><p><strong>Execute-and-verify loops</strong>: Queries are executed before chart authoring, and validation failures trigger corrective retries for ES|QL generation.</p></li></ul><h2>Try AI dashboard creation and Vega-Lite charts in Kibana</h2><p>To try natural-language dashboard creation and Vega-Lite charts, upgrade to <strong>Elastic 9.5</strong> (or <a href="https://cloud.elastic.co/registration">start a free trial</a>), and open the <strong>chat</strong> in Kibana. Then ask it to build a dashboard from your data. For Vega-Lite, try asking for a chart type you've wanted but never built, like a scatter plot or a bubble chart. If the result isn't quite right, tell the agent what to change. It iterates with you.</p><p>This requires an Enterprise license. <a href="https://www.elastic.co/docs/explore-analyze/ai-features/agent-builder/chat#get-started">Get started</a>.</p><p><em>The release and timing of any features or functionality described in this post remain at Elastic's sole discretion. Any features or functionality not currently available may not be delivered on time or at all.</em></p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/ai-dashboards-kibana-vega-lite</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/ai-dashboards-kibana-vega-lite</guid>
    <category><![CDATA[Kibana]]></category>
    <category><![CDATA[ES|QL]]></category>
    <dc:creator><![CDATA[Marta Bondyra,Teresa Alvarez Soler]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt54406ad0378bc5fc/6a7199ffed03ccee0dac9d7c/image6.png" length="0" type="image/png"/>
    <pubDate>Tue, 04 Aug 2026 00:00:00 GMT</pubDate>
  </item>
  </channel>
</rss>