| Update data source query caching settings. |
| `datasources:create` | None | Create data sources. |
diff --git a/docs/sources/administration/roles-and-permissions/access-control/rbac-fixed-basic-role-definitions/index.md b/docs/sources/administration/roles-and-permissions/access-control/rbac-fixed-basic-role-definitions/index.md
index 68ea28a7814..ccc283db650 100644
--- a/docs/sources/administration/roles-and-permissions/access-control/rbac-fixed-basic-role-definitions/index.md
+++ b/docs/sources/administration/roles-and-permissions/access-control/rbac-fixed-basic-role-definitions/index.md
@@ -98,7 +98,7 @@ To learn how to use the roles API to determine the role UUIDs, refer to [Manage
| `fixed:dashboards.insights:reader` | `fixed_JlBJ2_gizP8zhgaeGE2rjyZe2Rs` | `dashboards.insights:read` | Read dashboard insights data and see presence indicators. |
| `fixed:dashboards.permissions:reader` | `fixed_f17oxuXW_58LL8mYJsm4T_mCeIw` | `dashboards.permissions:read` | Read all dashboard permissions. |
| `fixed:dashboards.permissions:writer` | `fixed_CcznxhWX_Yqn8uWMXMQ-b5iFW9k` | All permissions from `fixed:dashboards.permissions:reader` and `dashboards.permissions:write` | Read and update all dashboard permissions. |
-| `fixed:dashboards.public:writer` | `fixed_f_GHHRBciaqESXfGz2oCcooqHxs` | `dashboards.public:write` | Create, update, delete or pause a public dashboard. |
+| `fixed:dashboards.public:writer` | `fixed_f_GHHRBciaqESXfGz2oCcooqHxs` | `dashboards.public:write` | Create, update, delete or pause a shared dashboard. |
| `fixed:datasources:creator` | `fixed_XX8jHREgUt-wo1A-rPXIiFlX6Zw` | `datasources:create` | Create data sources. |
| `fixed:datasources:explorer` | `fixed_qDzW9mzx9yM91T5Bi8dHUM2muTw` | `datasources:explore` | Enable the Explore feature. Data source permissions still apply, you can only query data sources for which you have query permissions. |
| `fixed:datasources:reader` | `fixed_C2x8IxkiBc1KZVjyYH775T9jNMQ` | `datasources:read` `datasources:query` | Read and query data sources. |
diff --git a/docs/sources/alerting/configure-notifications/manage-contact-points/integrations/webhook-notifier.md b/docs/sources/alerting/configure-notifications/manage-contact-points/integrations/webhook-notifier.md
index 752f3b9fa52..556d66755ce 100644
--- a/docs/sources/alerting/configure-notifications/manage-contact-points/integrations/webhook-notifier.md
+++ b/docs/sources/alerting/configure-notifications/manage-contact-points/integrations/webhook-notifier.md
@@ -117,9 +117,9 @@ The webhook notification is a simple way to send information about a state chang
| version | string | Version of the payload |
| groupKey | string | Key that is used for grouping |
| truncatedAlerts | number | Number of alerts that were truncated |
-| title | string | **Will be deprecated soon** |
-| state | string | **Will be deprecated soon** |
-| message | string | **Will be deprecated soon** |
+| title | string | Custom title |
+| state | string | State of the alert group (either `alerting` or `ok`) |
+| message | string | Custom message |
### Alert
diff --git a/docs/sources/alerting/fundamentals/alert-rules/_index.md b/docs/sources/alerting/fundamentals/alert-rules/_index.md
index b948591475f..5d9a3219f64 100644
--- a/docs/sources/alerting/fundamentals/alert-rules/_index.md
+++ b/docs/sources/alerting/fundamentals/alert-rules/_index.md
@@ -69,9 +69,7 @@ Grafana supports two different alert rule types: Grafana-managed alert rules and
## Grafana-managed alert rules
-Grafana-managed alert rules are the most flexible alert rule type. They allow you to create alert rules that can act on data from any of the [supported data sources](#supported-data-sources), and use multiple data sources in a single alert rule. You can also add expressions to transform your data and set alert conditions. Using images in alert notifications is also supported.
-
-Additionally, you can also add [expressions to transform your data](ref:expression-queries), set custom alert conditions, and include [images in alert notifications](ref:notification-images).
+Grafana-managed alert rules are the most flexible alert rule type. They allow you to create alert rules that can act on data from any of the [supported data sources](#supported-data-sources), and use multiple data sources in a single alert rule. You can add [expressions to transform your data](ref:expression-queries) and set custom alert conditions. Using [images in alert notifications](ref:notification-images). is also supported.
{{< figure src="/media/docs/alerting/grafana-managed-alerting-architecture.png" max-width="750px" caption="How Grafana-managed alerting works by default" >}}
diff --git a/docs/sources/alerting/set-up/configure-alertmanager/index.md b/docs/sources/alerting/set-up/configure-alertmanager/index.md
index 86956ad6837..52ef493b7c4 100644
--- a/docs/sources/alerting/set-up/configure-alertmanager/index.md
+++ b/docs/sources/alerting/set-up/configure-alertmanager/index.md
@@ -34,17 +34,32 @@ Grafana Alerting is based on the architecture of the Prometheus alerting system.
{{< figure src="/media/docs/alerting/alerting-alertmanager-architecture.png" max-width="750px" alt="A diagram with the alert generator and alert manager architecture" >}}
-**Grafana Alertmanager**
+This architecture decouples alert rule evaluation from notification handling, allowing alerts to be forwarded to other Alertmanagers.
-Grafana has its own built-in Alertmanager, referred to as "Grafana" in the user interface. It is the default Alertmanager and can only handle Grafana-managed alerts.
+Grafana can use different Alertmanagers. It’s important to note that each Alertmanager manages its own independent alerting resources, such as:
-**Cloud Alertmanager**
+- Contact points and notification templates
+- Notification policies and mute timings
+- Silences
+- Active notifications
-Each Grafana Cloud instance comes preconfigured with an additional Alertmanager (`grafanacloud-STACK_NAME-ngalertmanager`) from the Mimir (Prometheus) instance running in the Grafana Cloud Stack. The Cloud Alertmanager can handle both Grafana-managed and data source-managed alerts.
+Use the `Choose Alertmanager` on these pages to switch between Alertmanagers.
-**Other Alertmanagers**
+{{< figure src="/media/docs/alerting/alerting-choose-alertmanager.png" max-width="750px" alt="A screenshot choosing an Alertmanager in the notification policies UI" >}}
-Grafana Alerting also supports sending alerts to other alertmanagers, such as the [Prometheus Alertmanager](https://prometheus.io/docs/alerting/latest/alertmanager/), which can handle Grafana-managed alerts and data sources-managed alerts such as alerts from Loki, Mimir, and Prometheus.
+## Types of Alertmanagers in Grafana
+
+Grafana can be configured to manage both Grafana-managed and data source-managed alerts using various Alertmanagers, depending on your infrastructure and alerting requirements.
+
+- **Grafana Alertmanager**: Grafana has its own built-in Alertmanager, referred to as "Grafana" in the user interface. It is the default Alertmanager and can only handle Grafana-managed alerts.
+
+- **Cloud Alertmanager**: Each Grafana Cloud instance comes preconfigured with an additional Alertmanager (`grafanacloud-STACK_NAME-ngalertmanager`) from the Mimir (Prometheus) instance running in the Grafana Cloud Stack.
+
+ The Cloud Alertmanager is available exclusively in Grafana Cloud and can handle both Grafana-managed and data source-managed alerts.
+
+ Some Grafana Cloud services, such as **Kubernetes Monitoring** and **Synthetic Monitoring** use the Cloud Alertmanager to create and manage alerts.
+
+- **Other Alertmanagers**: Grafana Alerting also supports sending alerts to other Alertmanagers, such as the [Prometheus Alertmanager](https://prometheus.io/docs/alerting/latest/alertmanager/), which can handle Grafana-managed alerts and data sources-managed alerts such as alerts from Loki, Mimir, and Prometheus.
You can use a combination of Alertmanagers. The decision often depends on your alerting setup and where your alerts are being generated. Here are two examples of when you may want to add an Alertmanager and send your alerts there instead of using the built-in Grafana Alertmanager.
@@ -56,36 +71,32 @@ You can use a combination of Alertmanagers. The decision often depends on your a
From Grafana, you can configure and administer your own Alertmanager to receive Grafana alerts.
-{{% admonition type="note" %}}
-Grafana Alerting does not support sending alerts to the AWS Managed Service for Prometheus due to the lack of sigv4 support in Prometheus.
-{{% /admonition %}}
+After adding an Alertmanager, you can use the Grafana Alerting UI to manage notification policies, contact points, and other alerting resources from within Grafana, with support for HTTP basic authentication credentials.
-After you have added the Alertmanager, you can use the Grafana Alerting UI to manage silences, contact points, and notification policies. A drop-down option in these pages allows you to switch between alertmanagers.
-
-{{< figure src="/media/docs/alerting/alerting-choose-alertmanager.png" max-width="750px" alt="A screenshot choosing an Alertmanager in the notification policies UI" >}}
-
-Alertmanagers should now be configured as data sources using Grafana Configuration from the main Grafana navigation menu. This enables you to manage the contact points and notification policies of external alertmanagers from within Grafana and also encrypts HTTP basic authentication credentials.
-
-To add an Alertmanager, complete the following steps.
+Alertmanagers should be configured as data sources using Grafana Configuration from the main Grafana navigation menu. To add an Alertmanager, complete the following steps.
1. Click **Connections** in the left-side menu.
-2. On the Connections page, search for `Alertmanager`.
-3. Click the **Create a new data source** button.
+1. On the Connections page, search for `Alertmanager`.
+1. Click the **Create a new data source** button.
If you don't see this button, you may need to install the plugin, relaunch your Cloud instance, and then repeat steps 1 and 2.
-4. Fill out the fields on the page, as required.
+1. Fill out the fields on the page, as required.
If you are provisioning your data source, set the flag `handleGrafanaManagedAlerts` in the `jsonData` field to `true` to send Grafana-managed alerts to this Alertmanager.
**Note:** Prometheus, Grafana Mimir, and Cortex implementations of Alertmanager are supported. For Prometheus, contact points and notification policies are read-only in the Grafana Alerting UI.
-5. Click **Save & test**.
+1. Click **Save & test**.
+
+{{% admonition type="note" %}}
+Grafana Alerting does not support sending alerts to the AWS Managed Service for Prometheus due to the lack of sigv4 support in Prometheus.
+{{% /admonition %}}
+
+## Manage Alertmanager configurations
-{{< admonition type="note" >}}
On the Settings page, you can manage your Alertmanager configurations and configure where Grafana-managed alert instances are forwarded.
- Manage which Alertmanagers receive alert instances from Grafana-managed rules without navigating and editing data sources.
- Manage version snapshots for the built-in Alertmanager, which allows administrators to roll back unintentional changes or mistakes in the Alertmanager configuration.
- Compare the historical snapshot with the latest configuration to see which changes were made.
- {{< /admonition >}}
diff --git a/docs/sources/breaking-changes/breaking-changes-v11-0.md b/docs/sources/breaking-changes/breaking-changes-v11-0.md
index f223375f276..883c062ae04 100644
--- a/docs/sources/breaking-changes/breaking-changes-v11-0.md
+++ b/docs/sources/breaking-changes/breaking-changes-v11-0.md
@@ -118,7 +118,7 @@ Ensure you have a public dashboard footer logo or footer text set if you don't w
#### Learn more
-[Configure custom branding documentation](https://grafana.com/docs/grafana//setup-grafana/configure-grafana/configure-custom-branding/#custom-branding-for-public-dashboards) for public dashboards
+[Configure custom branding documentation](https://grafana.com/docs/grafana//setup-grafana/configure-grafana/configure-custom-branding/#custom-branding-for-shared-dashboards) for public dashboards
### Subfolders cause very rare issues with folders that have forward slashes in their names
diff --git a/docs/sources/dashboards/_index.md b/docs/sources/dashboards/_index.md
index 0ebbf8d3334..bd2fc73180e 100644
--- a/docs/sources/dashboards/_index.md
+++ b/docs/sources/dashboards/_index.md
@@ -31,17 +31,17 @@ cards:
href: ./variables/
description: Add variables to metric queries and panel titles to create interactive and dynamic dashboards.
height: 24
- - title: Public dashboards
- href: ./dashboard-public/
- description: Make your Grafana dashboards public and share them with anyone without requiring access to your Grafana organization.
- height: 24
- title: Reporting
href: ./create-reports/
description: Automatically generate and share PDF reports from your Grafana dashboards.
height: 24
- title: Sharing
href: ./share-dashboards-panels/
- description: Share Grafana dashboards and panels within your organization using links, snapshots, and JSON exports.
+ description: Share Grafana dashboards and panels using links, snapshots, embeds, and exports.
+ height: 24
+ - title: Shared dashboards
+ href: ./share-dashboards-panels/shared-dashboards/
+ description: Share your dashboards with anyone without requiring access to your Grafana organization.
height: 24
refs:
panels:
diff --git a/docs/sources/dashboards/assess-dashboard-usage/index.md b/docs/sources/dashboards/assess-dashboard-usage/index.md
index 260ed8baaf0..5c0c46a2e8a 100644
--- a/docs/sources/dashboards/assess-dashboard-usage/index.md
+++ b/docs/sources/dashboards/assess-dashboard-usage/index.md
@@ -17,7 +17,7 @@ labels:
- cloud
- enterprise
title: Assess dashboard usage
-weight: 200
+weight: 900
refs:
grafana-enterprise:
- pattern: /docs/grafana/
@@ -34,7 +34,7 @@ refs:
destination: /docs/grafana//setup-grafana/configure-security/export-logs/
- pattern: /docs/grafana-cloud/
destination: /docs/grafana//setup-grafana/configure-security/export-logs/
- enabled:
+ dashboard-sharing:
- pattern: /docs/grafana/
destination: /docs/grafana//setup-grafana/configure-grafana/#public_dashboards
- pattern: /docs/grafana-cloud/
@@ -79,7 +79,7 @@ For every dashboard and data source, you can access usage information.
To see dashboard usage information, click the dashboard insights icon in the header.
-{{< figure src="/media/docs/grafana/dashboards/screenshot-dashboard-insights-11.2.png" alt="Dashboard insights icon" >}}
+
Dashboard insights show the following information:
@@ -88,7 +88,7 @@ Dashboard insights show the following information:
{{< figure src="/static/img/docs/enterprise/dashboard_insights_stats.png" max-width="400px" class="docs-image--no-shadow" alt="Stats tab" >}}{{< figure src="/static/img/docs/enterprise/dashboard_insights_users.png" max-width="400px" class="docs-image--no-shadow" alt="Users and activity tab" >}}
-If public dashboards are [enabled](ref:enabled), you'll also see a **Public dashboards** tab in your analytics.
+If [dashboard sharing](ref:dashboard-sharing) is enabled, you'll also see a **Shared dashboards** tab in your analytics.
### Data source insights
diff --git a/docs/sources/dashboards/build-dashboards/_index.md b/docs/sources/dashboards/build-dashboards/_index.md
index 7077ff30bdd..4c228c3458c 100644
--- a/docs/sources/dashboards/build-dashboards/_index.md
+++ b/docs/sources/dashboards/build-dashboards/_index.md
@@ -14,7 +14,7 @@ labels:
menuTitle: Build dashboards
title: Build dashboards
description: Build dashboards including managing settings, links, and version history
-weight: 2
+weight: 200
refs:
variables:
- pattern: /docs/grafana/
diff --git a/docs/sources/dashboards/build-dashboards/manage-dashboard-links/index.md b/docs/sources/dashboards/build-dashboards/manage-dashboard-links/index.md
index d0917600909..3dd373f4c31 100644
--- a/docs/sources/dashboards/build-dashboards/manage-dashboard-links/index.md
+++ b/docs/sources/dashboards/build-dashboards/manage-dashboard-links/index.md
@@ -22,7 +22,7 @@ labels:
- oss
menuTitle: Manage dashboard links
title: Manage dashboard links
-weight: 500
+weight: 200
refs:
data-links:
- pattern: /docs/grafana/
@@ -148,7 +148,7 @@ Each panel can have its own set of links that are shown in the upper left of the
Click the icon next to the panel title to see available panel links.
-{{< figure src="/media/docs/grafana/screenshot-panel-links.png" width="200px" alt="List of panel links displayed" >}}
+{{< figure src="/media/docs/grafana/dashboards/screenshot-panel-links-v11.3.png" max-width="550px" alt="List of panel links displayed" >}}
### Add a panel link
diff --git a/docs/sources/dashboards/build-dashboards/manage-library-panels/index.md b/docs/sources/dashboards/build-dashboards/manage-library-panels/index.md
index 838c194956c..facbdfa92a2 100644
--- a/docs/sources/dashboards/build-dashboards/manage-library-panels/index.md
+++ b/docs/sources/dashboards/build-dashboards/manage-library-panels/index.md
@@ -37,15 +37,20 @@ You can control permissions for library panels using [role-based access control
## Create a library panel
-When you create a library panel, the panel on the source dashboard is converted to a library panel as well. You need to save the original dashboard once a panel is converted.
+Library panels can be reused in different dashboards throughout Grafana. When you create a library panel, the panel on the source dashboard is converted to a library panel as well. You need to save the original dashboard once a panel is converted.
-1. Click **Edit** in the top-right corner of the dashboard.
-1. On the panel you want to update, hover over any part of the panel to display the menu icon on the top-right corner.
-1. Click the menu icon and select **More > Create library panel**.
-1. In **Library panel name**, enter the name.
-1. In **Save in folder**, select the folder to save the library panel.
-1. Click **Create library panel**.
-1. Click **Save dashboard** and **Exit edit**.
+To create a library panel, follow these steps:
+
+1. In the top-right corner of the dashboard, click **Edit**.
+1. Hover over any part of the panel you want to share to display the actions menu on the top right corner.
+1. Click **More > New library panel**.
+1. In the **Library panel name** field, enter the name.
+1. In the **Save in folder** drop-down list, select the folder in which to save the library panel. By default, the root level is selected.
+1. Click **Create library panel** to save your changes.
+1. Click **Save dashboard**.
+1. (Optional) Enter a description of the changes you've made.
+1. Click **Save**.
+1. Click **Exit edit**.
Once created, you can modify the library panel using any dashboard on which it appears. After you save the changes, all instances of the library panel reflect these modifications.
@@ -53,11 +58,13 @@ Once created, you can modify the library panel using any dashboard on which it a
Add a Grafana library panel to a dashboard when you want to provide visualizations to other dashboard users.
+To add a library panel, follow these steps:
+
1. Click **Dashboards** in the main menu.
-1. Click **New** and select **New Dashboard** in the dropdown.
+1. Click **New** and select **New Dashboard** in the drop-down list.
1. On the empty dashboard, click **+ Add library panel**.
- You'll see a list of your library panels.
+ The **Add panel from panel library** drawer opens.
1. Filter the list or search to find the panel you want to add.
1. Click a panel to add it to the dashboard.
@@ -69,6 +76,8 @@ Add a Grafana library panel to a dashboard when you want to provide visualizatio
Unlink a library panel when you want to make a change to the panel and not affect other instances of the library panel.
+To unlink a library panel, follow these steps:
+
1. Click **Dashboards** in the main menu.
1. Click **Library panels**.
1. Select a library panel that is being used in dashboards.
@@ -107,8 +116,9 @@ Alternatively, if you know where the library panel that you want to replace is b
You can view a list of available library panels and see where those panels are being used.
-1. Click **Dashboards** in the main menu.
-1. Click **Library panels**.
+To view and manage library panels, follow these steps:
+
+1. Click **Dashboards > Library panels** in the main menu.
You can see a list of previously defined library panels.
{{< figure src="/media/docs/grafana/panels-visualizations/screenshot-library-panel-list-9-5.png" class="docs-image--no-shadow" max-width= "900px" alt="Library panels page with list of library panels" >}}
@@ -123,8 +133,8 @@ You can view a list of available library panels and see where those panels are b
## Delete a library panel
-Delete a library panel when you no longer need it.
+To delete a library panel that you no longer need, follow these steps:
-1. Click **Dashboards** in the main menu.
-1. Click **Library panels**.
+1. Click **Dashboards > Library panels** in the main menu.
1. Click the delete icon next to the library panel name.
+1. Click **Delete**.
diff --git a/docs/sources/dashboards/create-manage-playlists/index.md b/docs/sources/dashboards/create-manage-playlists/index.md
index 07e51ee44b7..cae7a433784 100644
--- a/docs/sources/dashboards/create-manage-playlists/index.md
+++ b/docs/sources/dashboards/create-manage-playlists/index.md
@@ -15,7 +15,7 @@ labels:
menuTitle: Manage playlists
title: Manage playlists
description: Create and manage dashboard playlists
-weight: 9
+weight: 500
---
# Manage playlists
diff --git a/docs/sources/dashboards/create-reports/index.md b/docs/sources/dashboards/create-reports/index.md
index ae06d3becc9..5ce55c6b50e 100644
--- a/docs/sources/dashboards/create-reports/index.md
+++ b/docs/sources/dashboards/create-reports/index.md
@@ -17,7 +17,7 @@ labels:
menuTitle: Reporting
title: Create and manage reports
description: Generate and share PDF reports from your Grafana dashboards
-weight: 85
+weight: 600
refs:
repeat-panels-or-rows:
- pattern: /docs/grafana/
diff --git a/docs/sources/dashboards/dashboard-public/index.md b/docs/sources/dashboards/dashboard-public/index.md
deleted file mode 100644
index d6cbde2c78a..00000000000
--- a/docs/sources/dashboards/dashboard-public/index.md
+++ /dev/null
@@ -1,273 +0,0 @@
----
-labels:
- products:
- - cloud
- - enterprise
- - oss
-title: Public dashboards
-description: Make your Grafana dashboards public and share them with anyone
-weight: 8
-refs:
- dashboard-sharing:
- - pattern: /docs/grafana/
- destination: /docs/grafana//dashboards/share-dashboards-panels/
- - pattern: /docs/grafana-cloud/
- destination: /docs/grafana-cloud/visualizations/dashboards/share-dashboards-panels/
- custom-branding:
- - pattern: /docs/grafana/
- destination: /docs/grafana//setup-grafana/configure-grafana/configure-custom-branding/
- - pattern: /docs/grafana-cloud/
- destination: /docs/grafana//setup-grafana/configure-grafana/configure-custom-branding/
- dashboard-insights-documentation:
- - pattern: /docs/grafana/
- destination: /docs/grafana//dashboards/assess-dashboard-usage/#dashboard-insights
- - pattern: /docs/grafana-cloud/
- destination: /docs/grafana-cloud/visualizations/dashboards/assess-dashboard-usage/
- caching:
- - pattern: /docs/grafana/
- destination: /docs/grafana//administration/data-source-management/#query-and-resource-caching
- - pattern: /docs/grafana-cloud/
- destination: /docs/grafana//administration/data-source-management/#query-and-resource-caching
- grafana-enterprise:
- - pattern: /docs/grafana/
- destination: /docs/grafana//introduction/grafana-enterprise/
- - pattern: /docs/grafana-cloud/
- destination: /docs/grafana//introduction/grafana-enterprise/
----
-
-# Public dashboards
-
-> **Warning:** Making your dashboard public could result in a large number of queries to the data sources used by your dashboard.
-> This can be mitigated by utilizing the enterprise [caching](ref:caching) and/or rate limiting features.
-
-Public dashboards allow you to share your Grafana dashboard with anyone. This is useful when you want to make your dashboard available to the world without requiring access to your Grafana organization. This differs from [dashboard sharing](ref:dashboard-sharing), which either requires recipients to be users in the same Grafana organization or provides limited information, as with a snapshot.
-
-You can see a list of all your public dashboards in one place by navigating to **Dashboards > Public dashboards**. For each dashboard in the list, the page displays the status, a link to view the dashboard, a link to the public dashboard configuration, and the option to revoke the public URL.
-
-## Security implications of making your dashboard public
-
-- Anyone with the URL can access the dashboard.
-- Public dashboards are read-only.
-- Arbitrary queries **cannot** be run against your data sources through public dashboards. Public dashboards can only execute the
- queries stored on the original dashboard.
-
-## Make a dashboard public
-
-1. Click **Share** in the top-right corner of the dashboard.
-1. Click the **Public dashboard** tab.
-1. Acknowledge the implications of making the dashboard public by selecting all the checkboxes.
-1. Click **Generate public URL** to make the dashboard public and make your link live.
-1. Copy the public dashboard link if you'd like to share it. You can always come back later for it.
-
-Once you've made the dashboard public, a **Public** tag is displayed in the header of the dashboard.
-
-## Pause access
-
-1. Click **Share** in the top-right corner of the dashboard.
-1. Click the **Public dashboard** tab.
-1. Enable the **Pause sharing dashboard** toggle.
-
-The dashboard is no longer accessible, even with the link, until you make it shareable again.
-
-## Revoke access
-
-1. Click **Share** in the top-right corner of the dashboard.
-1. Click the **Public dashboard** tab.
-1. Click **Revoke public URL** to delete the public dashboard.
-
-The link no longer works. You must create a new public URL, as in [Make a dashboard public](#make-a-dashboard-public).
-
-## Email sharing
-
-{{% admonition type="note" %}}
-
-Available in [private preview](/docs/release-life-cycle/) in [Grafana Cloud](/docs/grafana-cloud). This feature will have a cost by active users after being promoted into general availability.
-
-Please contact support to have the feature enabled.
-
-{{% /admonition %}}
-
-Email sharing allows you to share your public dashboard with only specific people by email, instead of having it accessible to anyone with the URL. When you use email sharing, recipients receive a one-time use link that's valid for **one hour**. Once the link is used, the viewer has access to the public dashboard for **30 days**.
-
-### Invite a viewer
-
-1. Click **Share** in the top-right corner of the dashboard.
-1. Click the **Public dashboard** tab.
-1. Acknowledge the implications of making the dashboard public by selecting all the checkboxes.
-1. Click **Generate public URL** to make the dashboard public and make your link live.
-1. Under Can view dashboard, click **Only specified people**.
-1. Enter the email you want to share the public dashboard with.
-1. Click **Invite**.
-1. The recipient will receive an email with a one-time use link.
-
-### Viewers requesting access
-
-If a viewer without access tries to navigate to the public dashboard, they'll be asked to request access by providing their email. They will receive an email with a new one-time use link if the email they provided has already been invited to view the public dashboard and has not been revoked.
-
-If the viewer doesn't have an invitation or it's been revoked, you won't be notified and no link is sent.
-
-### Revoke access for a viewer
-
-1. Click **Share** in the top-right corner of the dashboard.
-1. Click the **Public dashboard** tab.
-1. Click **Revoke** on the viewer you'd like to revoke access for.
-
-Immediately, the viewer no longer has access to the public dashboard, nor can they use any existing one-time use links they may have.
-
-### Reinvite a viewer
-
-1. Click **Share** in the top-right corner of the dashboard.
-1. Click the **Public dashboard** tab.
-1. Click **Resend** on the viewer you'd like to re-share the public dashboard with.
-
-The viewer will receive an email with a new one-time use link. This will invalidate all previously issued links for that viewer.
-
-### View public dashboard users
-
-To see a list of users who have accessed your dashboard by way of email sharing, take the following steps:
-
-1. In the main sidebar navigation, click **Administration**.
-1. Click **Users**.
-1. Click the **Public dashboard users** tab.
-
-From here, you can see the earliest time a user has been active in a dashboard, which public dashboards they have access to, and their role.
-
-### Access limitations
-
-One-time use links use browser cookies, so when a viewer is granted access through one of these links, they will only have access on the browser they used to claim the link.
-
-A single viewer cannot generate multiple valid one-time use links. When a new one-time use link is issued for a viewer, all previous ones are invalidated.
-
-If a Grafana user has read access to the parent dashboard, they can view the public dashboard without needing to have access granted.
-
-## Assess public dashboard usage
-
-> **Note:** Available in [Grafana Enterprise](ref:grafana-enterprise) and [Grafana Cloud](/docs/grafana-cloud).
-
-You can check usage analytics about your public dashboard by clicking the insights icon in the dashboard header:
-
-{{< figure src="/media/docs/grafana/dashboards/screenshot-dashboard-insights-11.2.png" max-width="400px" class="docs-image--no-shadow" alt="Dashboard insights icon" >}}
-
-Learn more about the kind of information provided in the [dashboard insights documentation](ref:dashboard-insights-documentation).
-
-## Supported data sources
-
-Public dashboards _should_ work with any data source that has the properties `backend` and `alerting` both set to true in its `plugin.json`. However, this can't always be
-guaranteed because plugin developers can override this functionality. The following lists include data sources confirmed to work with public dashboards and data sources that should work, but have not been confirmed as compatible.
-
-### Confirmed:
-
-
-
-
-
-
ClickHouse
-
CloudWatch
-
Elasticsearch
-
Infinity
-
InfluxDB
-
Loki
-
Microsoft SQL Server
-
-
-
-
-
MongoDB
-
MySQL
-
Oracle Database
-
PostgreSQL
-
Prometheus
-
Redis
-
SQLite
-
-
-
-
-
-### Unsupported:
-
-
-
-
-
-
Graphite
-
-
-
-
-
-### Unconfirmed:
-
-
-
-
-
-
Altinity plugin for ClickHouse
-
Amazon Athena
-
Amazon Redshift
-
Amazon Timestream
-
Apache Cassandra
-
AppDynamics
-
Azure Data Explorer Datasource
-
Azure Monitor
-
CSV
-
DB2 Datasource
-
Databricks
-
Datadog
-
Dataset
-
Druid
-
-
-
-
-
Dynatrace
-
GitHub
-
Google BigQuery
-
Grafana for YNAB
-
Honeycomb
-
Jira
-
Mock
-
Neo4j Datasource
-
New Relic
-
OPC UA (Unified Architecture)
-
Open Distro for Elasticsearch
-
OpenSearch
-
OpenTSDB
-
-
-
-
-
Orbit
-
SAP HANA®
-
Salesforce
-
Sentry
-
ServiceNow
-
Snowflake
-
Splunk
-
Splunk Infrastructure Monitoring
-
Sqlyze data source
-
TDengine
-
Vertica
-
Wavefront
-
X-Ray
-
kdb+
-
simple grpc data source
-
-
-
-
-
-## Limitations
-
-- Panels that use frontend data sources will fail to fetch data.
-- Template variables are not supported.
-- Exemplars will be omitted from the panel.
-- Only annotations that query the `-- Grafana --` data source are supported.
-- Organization annotations are not supported.
-- Grafana Live and real-time event streams are not supported.
-- Library panels are not supported.
-- Data sources using Reverse Proxy functionality are not supported.
-
-## Custom branding
-
-If you're a Grafana Enterprise customer, you can use custom branding to change the appearance of a public dashboard footer. For more information, refer to [Custom branding](ref:custom-branding).
diff --git a/docs/sources/dashboards/manage-dashboards/index.md b/docs/sources/dashboards/manage-dashboards/index.md
index 6853bcb02a7..2cb660a2642 100644
--- a/docs/sources/dashboards/manage-dashboards/index.md
+++ b/docs/sources/dashboards/manage-dashboards/index.md
@@ -19,7 +19,7 @@ labels:
menuTitle: Manage dashboards
title: Manage dashboards
description: Learn about dashboard management and generative AI features for dashboards
-weight: 8
+weight: 300
refs:
build-dashboards:
- pattern: /docs/grafana/
diff --git a/docs/sources/dashboards/search-dashboards/index.md b/docs/sources/dashboards/search-dashboards/index.md
new file mode 100644
index 00000000000..f1f78724204
--- /dev/null
+++ b/docs/sources/dashboards/search-dashboards/index.md
@@ -0,0 +1,125 @@
+---
+description: Learn how to search for Grafana dashboards and folders
+keywords:
+ - search
+ - dashboard
+ - folder
+labels:
+ products:
+ - cloud
+ - enterprise
+ - oss
+menutitle: Search dashboards
+title: Search dashboards and folders
+weight: 400
+refs:
+ service-accounts:
+ - pattern: /docs/grafana/
+ destination: /docs/grafana//administration/service-accounts/
+ - pattern: /docs/grafana-cloud/
+ destination: /docs/grafana-cloud/account-management/authentication-and-permissions/service-accounts/
+ config-file:
+ - pattern: /docs/grafana/
+ destination: /docs/grafana//setup-grafana/configure-grafana/#configuration-file-location
+ - pattern: /docs/grafana-cloud/
+ destination: /docs/grafana//setup-grafana/configure-grafana/#configuration-file-location
+ feature-toggles:
+ - pattern: /docs/grafana/
+ destination: /docs/grafana//setup-grafana/configure-grafana/#feature_toggles
+ - pattern: /docs/grafana-cloud/
+ destination: /docs/grafana//setup-grafana/configure-grafana/#feature_toggles
+---
+
+# Search dashboards and folders
+
+You can search for dashboards and dashboard folders by name.
+
+When you search for dashboards, you can also do it by panel title. Whether you search by name or panel title, the system returns all dashboards available within the Grafana instance, even if you do not have permission to view the contents of the dashboard.
+
+## Search by name
+
+Begin typing any part of the dashboard or folder name in the search bar. The search returns results for any partial string match in real-time, as you type.
+
+The search is:
+
+- Real-time
+- _Not_ case sensitive
+- Functional across stored _and_ file based dashboards and folders.
+
+{{% admonition type="note" %}}
+You can use your keyboard arrow keys to navigate the results and press `Enter` to open the selected dashboard or folder.
+{{% /admonition %}}
+
+The following images show:
+
+Searching by dashboard name from the **Dashboards** page.
+
+{{< figure src="/media/docs/grafana/dashboards/search-for-dashboard.png" width="700px" >}}
+
+Searching by folder name from the **Dashboards** page.
+
+{{< figure src="/media/docs/grafana/dashboards/search-folder.png" width="700px" >}}
+
+Searching by dashboard name inside a folder.
+
+{{< figure src="/media/docs/grafana/dashboards/search-in-folder.png" width="700px" >}}
+
+{{% admonition type="note" %}}
+When you search within a folder, its subfolders are not part of the results returned. You need to be on the **Dashboards** page (or the root level) to search for subfolders by name.
+{{% /admonition %}}
+
+## Search dashboards using panel title
+
+You can search for a dashboard by the title of a panel that appears in a dashboard.
+If a panel's title matches your search query, the dashboard appears in the search results.
+
+This feature is available by default in Grafana Cloud and in Grafana OSS v9.1 and higher, you access this feature by enabling the `panelTitleSearch` feature toggle.
+For more information about enabling panel title search, refer to [Enable the panelTitleSearch feature toggle.](#enable-the-paneltitlesearch-feature-toggle)
+
+The following image shows the search results when you search using panel title.
+
+{{< figure src="/static/img/docs/v91/dashboard-features/search-by-panel-title.png" width="700px" >}}
+
+### Enable the panelTitleSearch feature toggle
+
+Complete the following steps to enable the `panelTitleSearch` feature toggle.
+
+**Before you begin:**
+
+- If you are running Grafana Enterprise with RBAC, enable [service accounts](ref:service-accounts).
+
+**To enable the panelTitleSearch feature toggle:**
+
+1. Open the Grafana [configuration file](ref:config-file).
+
+1. Locate the [feature_toggles](ref:feature-toggles) section.
+
+1. Add the following parameter to the `feature_toggles` section:
+
+ ```
+ [feature_toggles]
+ # enable features, separated by spaces
+ enable = panelTitleSearch
+ ```
+
+1. Save your changes and restart the Grafana server.
+
+## Filter dashboard search results by tag(s)
+
+Tags are a great way to organize your dashboards, especially as the number of dashboards grow. You can add and manage tags in dashboard `Settings`.
+
+When you select multiple tags, Grafana shows dashboards that include all selected tags.
+
+To filter dashboard search result by a tag, complete one of the following steps:
+
+- To filter dashboard search results by tag, click a tag that appears in the right column of the search results.
+
+ You can continue filtering by clicking additional tags.
+
+- To see a list of all available tags, click the **Filter by tags** dropdown menu and select a tag.
+
+ All tags will be shown, and when you select a tag, the dashboard search will be instantly filtered.
+
+{{% admonition type="note" %}}
+When using only a keyboard, press the `tab` key and navigate to the **Filter by tag** drop-down menu, press the down arrow key `▼` to activate the menu and locate a tag, and press `Enter` to select the tag.
+{{% /admonition %}}
diff --git a/docs/sources/dashboards/share-dashboards-panels/_index.md b/docs/sources/dashboards/share-dashboards-panels/_index.md
new file mode 100644
index 00000000000..26b269b1231
--- /dev/null
+++ b/docs/sources/dashboards/share-dashboards-panels/_index.md
@@ -0,0 +1,348 @@
+---
+aliases:
+ - ../administration/reports/
+ - ../enterprise/export-pdf/
+ - ../enterprise/reporting/
+ - ../reference/share_dashboard/
+ - ../reference/share_panel/
+ - ../share-dashboards-panels/
+ - ../sharing/
+ - ../sharing/playlists/
+ - ../sharing/share-dashboard/
+ - ../sharing/share-panel/
+ - ./
+ - reporting/
+ - share-dashboard/
+keywords:
+ - grafana
+ - dashboard
+ - documentation
+ - share
+ - panel
+ - reporting
+ - export
+ - pdf
+labels:
+ products:
+ - cloud
+ - enterprise
+ - oss
+menuTitle: Sharing
+title: Share dashboards and panels
+description: Share Grafana dashboards and panels within your organization and publicly
+weight: 650
+refs:
+ image-rendering:
+ - pattern: /docs/grafana/
+ destination: /docs/grafana//setup-grafana/image-rendering/
+ - pattern: /docs/grafana-cloud/
+ destination: /docs/grafana//setup-grafana/image-rendering/
+ grafana-enterprise:
+ - pattern: /docs/grafana/
+ destination: /docs/grafana//introduction/grafana-enterprise/
+ - pattern: /docs/grafana-cloud/
+ destination: /docs/grafana//introduction/grafana-enterprise/
+ shared-dashboards:
+ - pattern: /docs/grafana/
+ destination: /docs/grafana//dashboards/share-dashboards-panels/shared-dashboards/
+ - pattern: /docs/grafana-cloud/
+ destination: /docs/grafana/grafana-cloud/visualizations/dashboards/share-dashboards-panels/shared-dashboards/
+ configure-report:
+ - pattern: /docs/grafana/
+ destination: /docs/grafana//dashboards/create-reports/#create-or-update-a-report
+ - pattern: /docs/grafana-cloud/
+ destination: /docs/grafana-cloud/visualizations/dashboards/create-reports/#create-or-update-a-report
+ image-rendering-config:
+ - pattern: /docs/grafana/
+ destination: /docs/grafana//setup-grafana/image-rendering/#configuration
+ - pattern: /docs/grafana-cloud/
+ destination: /docs/grafana//setup-grafana/image-rendering/#configuration
+---
+
+# Share dashboards and panels
+
+Grafana enables you to share dashboards and panels with other users within your organization and in certain situations, publicly on the web. You can share using:
+
+- Direct links with users in and outside of your organization
+- Snapshots
+- Embeds
+- PDFs
+- JSON files
+- Reports
+- Library panels
+
+You must have an authorized viewer permission to see an image rendered by a direct link.
+
+The same permission is also required to view embedded links unless you have anonymous access permission enabled for your Grafana instance.
+
+{{< admonition type="note" >}}
+As of Grafana 8.0, anonymous access permission is not available in Grafana Cloud.
+{{< /admonition >}}
+
+## Share dashboards {#share-a-dashboard}
+
+You can share dashboards in the following ways:
+
+- [Internally with a link](#share-an-internal-link)
+- [Externally with anyone or specific people](#share-an-external-link)
+- [As a report](#schedule-a-report)
+- [As a snapshot](#share-a-snapshot)
+- [As a PDF export](#export-a-dashboard-as-pdf)
+- [As a JSON file export](#export-a-dashboard-as-json)
+
+When you share a dashboard externally as a link or by email, those dashboards are included in a list of your shared dashboards. To view the list and manage these dashboards, navigate to **Dashboards > Shared dashboards**.
+
+{{< admonition type="note" >}}
+If you change a dashboard, ensure that you save the changes before sharing.
+{{< /admonition >}}
+
+### Share an internal link
+
+To share a customized, direct link to your dashboard within your organization, follow these steps:
+
+1. Click **Dashboards** in the main menu.
+1. Click the dashboard you want to share.
+1. Click the **Share** drop-down list in the top-right corner and select **Share internally**.
+1. (Optional) In the **Share internally** drawer that opens, set the following options:
+ - **Lock time range** - Change the current relative time range to an absolute time range. This option is enabled by default.
+ - **Shorten link** - Shorten the dashboard link. This option is enabled by default.
+1. Select the theme for the dashboard. Choose from **Current**, **Dark**, or **Light**.
+1. Click **Copy link**.
+1. Send the copied link to a Grafana user with authorization to view the link.
+1. Click the **X** at the top-right corner to close the share drawer.
+
+#### Quick-share an internal link
+
+Once you've customized an internal link, you can share it quickly by following these steps:
+
+1. Click **Dashboards** in the main menu.
+1. Click the dashboard you want to share.
+1. Click the **Share** button, not the drop-down list icon, to copy a shortened link.
+
+This link has any customizations, like time range locking or theme, that you've previously set. These are stored in the browser scope.
+
+### Share an external link
+
+Externally shared dashboards allow you to share your Grafana dashboard with anyone. This is useful when you want to make your dashboard available to the world without requiring access to your Grafana organization.
+
+Learn how to configure and manage externally shared dashboards in [Externally shared dashboards](ref:shared-dashboards).
+
+### Schedule a report
+
+{{< admonition type="note" >}}
+This feature is only available in Grafana Enterprise.
+{{< /admonition >}}
+
+To share your dashboard as a report, follow these steps:
+
+1. Click **Dashboards** in the main menu.
+1. Click the dashboard you want to share.
+1. Click the **Share** drop-down list in the top-right corner and select **Schedule a report**.
+1. [Configure the report](ref:configure-report).
+1. Depending on your schedule settings, you'll have different options at this step. Click either **Schedule send** or **Send now**.
+
+You can also save the report as a draft.
+
+To manage your reports, navigate to **Dashboards > Reporting > Reports**.
+
+### Share a snapshot
+
+A dashboard snapshot publicly shares a dashboard while removing sensitive data such as queries and panel links, leaving only visible metrics and series names. Anyone with the link can access the snapshot.
+
+You can publish snapshots to your local instance or to [snapshots.raintank.io](http://snapshots.raintank.io). The latter is a free service provided by Grafana Labs that enables you to publish dashboard snapshots to an external Grafana instance. Anyone with the link can view it. You can set an expiration time if you want the snapshot removed after a certain time period.
+
+{{< admonition type=note >}}
+The snapshots.raintank.io option is disabled by default in Grafana Cloud. You can update [your config file](https://grafana.com/docs/grafana/latest/setup-grafana/configure-grafana/#external_enabled) to enable this functionality.
+{{< /admonition >}}
+
+To see the other snapshots shared from your organization, navigate to **Dashboards > Snapshots** in the main menu.
+
+To share your dashboard with anyone as a snapshot, follow these steps:
+
+1. Click **Dashboards** in the main menu.
+1. Click the dashboard you want to share.
+1. Click the **Share** drop-down list in the top-right corner and select **Share snapshot**.
+1. In the **Share snapshot** drawer that opens, enter a descriptive title for the snapshot in the **Snapshot name** field.
+1. Select one of the following expiration options for the snapshot:
+ - **1 Hour**
+ - **1 Day**
+ - **1 Week**
+ - **Never**
+1. Click **Publish snapshot** or **Publish to snapshots.raintank.io**.
+
+ Grafana generates the link of the snapshot. Note that you can't publish dashboard snapshots containing custom panels to snapshot.raintank.io.
+
+1. Click **Copy link**, and share it either within your organization or publicly on the web.
+1. Click the **X** at the top-right corner to close the share drawer.
+
+#### Delete a snapshot
+
+To delete existing snapshots, follow these steps:
+
+1. Navigate to **Dashboards > Snapshots** in the main menu.
+1. To confirm which snapshot you're about to delete, click **View** on the snapshot row.
+
+ The URLs for panel and dashboard snapshots from the same dashboard look similar and viewing them first can help you distinguish them.
+
+1. Click the red **x** next to the snapshot that you want to delete.
+
+The snapshot is immediately deleted. You might need to clear your browser cache or use a private or incognito browser to confirm this.
+
+## Export dashboards
+
+In addition to sharing dashboards as links, reports, and snapshots, you can export them as PDFs or JSON files.
+
+### Export a dashboard as PDF
+
+To export a dashboard in its current state as a PDF, follow these steps:
+
+1. Click **Dashboards** in the main menu.
+1. Open the dashboard you want to export.
+1. Click the **Export** drop-down in the top-right corner and select **Export as PDF**.
+1. In the **Export dashboard PDF** drawer that opens, select either **Landscape** or **Portrait** for the PDF orientation.
+1. Select either **Grid** or **Simple** for the PDF layout.
+1. Set the **Zoom** level; zoom in to enlarge text, or zoom out to see more data (like table columns) per panel.
+1. Click **Generate PDF**.
+
+ The PDF opens in another tab where you can download it.
+
+1. Click the **X** at the top-right corner to close the share drawer.
+
+### Export a dashboard as JSON
+
+Export a Grafana JSON file that contains everything you need, including layout, variables, styles, data sources, queries, and so on, so that you can later import the dashboard. To export a JSON file, follow these steps:
+
+1. Click **Dashboards** in the main menu.
+1. Open the dashboard you want to export.
+1. Click the **Export** drop-down list in the top-right corner and select **Export as JSON**.
+
+ The **Export dashboard JSON** drawer opens.
+
+1. Toggle the **Export the dashboard to use in another instance** switch to generate the JSON with a different data source UID.
+1. Click **Download file** or **Copy to clipboard**.
+1. Click the **X** at the top-right corner to close the share drawer.
+
+## Share panels {#share-a-panel}
+
+You can share a panels in the following ways:
+
+- [Internally with a link](#share-an-internal-link)
+- [As an embed](#share-an-embed)
+- [As a snapshot](#panel-snapshot)
+
+{{< admonition type="note" >}}
+If you change a panel, ensure that you save the changes before sharing.
+{{< /admonition >}}
+
+### Share an internal link
+
+To share a personalized, direct link to your panel within your organization, follow these steps:
+
+1. Hover over any part of the panel you want to share to display the actions menu on the top right corner.
+1. Click the menu and select **Share link**.
+1. (Optional) In the **Link settings** drawer that opens, set the following options:
+ - **Lock time range** - Change the current relative time range to an absolute time range. This option is enabled by default.
+ - **Shorten link** - Shorten the panel link. This option is disabled by default.
+1. Select the theme for the dashboard. Choose from **Current**, **Dark**, or **Light**.
+1. Do one or both of the following:
+ - Click **Copy link**.
+ - Click **Render image**, which [renders the panel as a PNG image](ref:image-rendering).
+1. Send the copied link or image URL to a Grafana user with authorization to view it.
+1. Click the **X** at the top-right corner to close the share drawer.
+
+#### Query string parameters for server-side rendered images
+
+When you click **Render image** in the panel link settings, Grafana generates a PNG image of the panel with the following default parameters:
+
+| Parameter | Description |
+| --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| width | Width in pixels. Default is 800. |
+| height | Height in pixels. Default is 400. |
+| tz | Timezone in the format `UTC%2BHH%3AMM` where HH and MM are offset in hours and minutes after UTC. |
+| timeout | Number of seconds. The timeout can be increased if the query for the panel needs more than the default 30 seconds. |
+| scale | Numeric value to configure device scale factor. Default is 1. Use a higher value to produce more detailed images (higher DPI). Supported in Grafana v7.0+. |
+
+You can also update these parameters in the [image rendering configuration](ref:image-rendering-config).
+
+The following example shows a link to a server-side rendered PNG:
+
+```bash
+https://play.grafana.org/render/d-solo/ktMs4D6Mk?from=2024-09-03T11:55:44.442Z&to=2024-09-03T17:55:44.442Z&panelId=panel-13&__feature.dashboardSceneSolo&width=1000&height=500&tz=UTC
+```
+
+### Share an embed
+
+You can share a panel by embedding it on another website using an iframe. Users must be signed into Grafana to view the panel.
+
+{{< admonition type="note" >}}
+As of Grafana 8.0, anonymous access permission is no longer available for Grafana Cloud.
+{{< /admonition >}}
+
+To create a panel that can be embedded, follow these steps:
+
+1. Hover over any part of the panel you want to share to display the actions menu on the top-right corner.
+1. Click the menu and select **Share embed**.
+
+ The **Share embed** drawer opens.
+
+1. (Optional) Toggle the **Lock time range** switch to set whether the panel uses the current relative time range or an absolute time range. This option is enabled by default.
+1. Select the theme for the dashboard. Choose from **Current**, **Dark**, or **Light**.
+1. (Optional) Make any changes to the HTML that you need.
+1. Click **Copy to clipboard**.
+1. Paste the HTML code into your website code.
+1. Click the **X** at the top-right corner to close the share drawer.
+
+Here's an example of what the HTML code might look like:
+
+```html
+
+```
+
+The result is an interactive Grafana visualization embedded in an iframe.
+
+### Share a snapshot {#panel-snapshot}
+
+A panel snapshot shares an interactive panel publicly while removing sensitive data such as queries and panel links, leaving only visible metrics and series names. Anyone with the link can access the snapshot.
+
+You can publish snapshots to your local instance or to [snapshots.raintank.io](http://snapshots.raintank.io). The latter is a free service provided by Grafana Labs that enables you to publish dashboard snapshots to an external Grafana instance. Anyone with the link can view it. You can set an expiration time if you want the snapshot removed after a certain time period.
+
+{{< admonition type=note >}}
+The snapshots.raintank.io option is disabled by default in Grafana Cloud. You can update [your config file](https://grafana.com/docs/grafana/latest/setup-grafana/configure-grafana/#external_enabled) to enable this functionality.
+{{< /admonition >}}
+
+To see the other snapshots shared from your organization, navigate to **Dashboards > Snapshots** in the main menu.
+
+To share your panel with anyone as a snapshot, follow these steps:
+
+1. Hover over any part of the panel you want to share to display the actions menu on the top-right corner.
+1. Click the menu and select **Share snapshot**.
+1. In the **Share snapshot** drawer that opens, enter a descriptive title for the snapshot in the **Snapshot name** field.
+1. Select one of the following expiration options for the snapshot:
+ - **1 Hour**
+ - **1 Day**
+ - **1 Week**
+ - **Never**
+1. Click **Publish snapshot** or **Publish to snapshots.raintank.io**.
+
+ Grafana generates the link of the snapshot. Note that you can't publish snapshots that include custom panels to snapshot.raintank.io.
+
+1. Click **Copy link**, and share it either within your organization or publicly on the web.
+1. Click the **X** at the top-right corner to close the share drawer.
+
+#### Delete a snapshot
+
+To delete existing snapshots, follow these steps:
+
+1. Navigate to **Dashboards > Snapshots** in the main menu.
+1. To confirm which snapshot you're about to delete, click **View** on the snapshot row.
+
+ The URLs for panel and dashboard snapshots from the same dashboard look similar and viewing them first can help you distinguish them.
+
+1. Click the red **x** next to the snapshot URL that you want to delete.
+
+The snapshot is immediately deleted. You may need to clear your browser cache or use a private or incognito browser to confirm this.
diff --git a/docs/sources/dashboards/share-dashboards-panels/index.md b/docs/sources/dashboards/share-dashboards-panels/index.md
deleted file mode 100644
index 01ef05c1923..00000000000
--- a/docs/sources/dashboards/share-dashboards-panels/index.md
+++ /dev/null
@@ -1,250 +0,0 @@
----
-aliases:
- - ../administration/reports/
- - ../enterprise/export-pdf/
- - ../enterprise/reporting/
- - ../reference/share_dashboard/
- - ../reference/share_panel/
- - ../share-dashboards-panels/
- - ../sharing/
- - ../sharing/playlists/
- - ../sharing/share-dashboard/
- - ../sharing/share-panel/
- - ./
- - reporting/
- - share-dashboard/
-keywords:
- - grafana
- - dashboard
- - documentation
- - share
- - panel
- - library panel
- - playlist
- - reporting
- - export
- - pdf
-labels:
- products:
- - cloud
- - enterprise
- - oss
-menuTitle: Sharing
-title: Share dashboards and panels
-description: Share Grafana dashboards and panels within your organization and publicly
-weight: 85
-refs:
- image-rendering:
- - pattern: /docs/grafana/
- destination: /docs/grafana//setup-grafana/image-rendering/
- - pattern: /docs/grafana-cloud/
- destination: /docs/grafana//setup-grafana/image-rendering/
- grafana-enterprise:
- - pattern: /docs/grafana/
- destination: /docs/grafana//introduction/grafana-enterprise/
- - pattern: /docs/grafana-cloud/
- destination: /docs/grafana//introduction/grafana-enterprise/
----
-
-# Share dashboards and panels
-
-Grafana enables you to share dashboards and panels with other users within an organization and in certain situations, publicly on the Web. You can share using:
-
-- A direct link
-- A Snapshot
-- An embedded link (for panels only)
-- An export link (for dashboards only)
-
-You must have an authorized viewer permission to see an image rendered by a direct link.
-
-The same permission is also required to view embedded links unless you have anonymous access permission enabled for your Grafana instance.
-
-{{< admonition type="note" >}}
-As of Grafana 8.0, anonymous access permission is not available in Grafana Cloud.
-{{< /admonition >}}
-
-When you share a panel or dashboard as a snapshot, a snapshot (which is a panel or dashboard at the moment you take the snapshot) is publicly available on the web. Anyone with a link to it can access it. Because snapshots do not require any authorization to view, Grafana removes information related to the account it came from, as well as any sensitive data from the snapshot.
-
-## Share a dashboard
-
-You can share a dashboard as a direct link or as a snapshot. You can also export a dashboard.
-
-{{< admonition type="note" >}}
-If you change a dashboard, ensure that you save the changes before sharing.
-{{< /admonition >}}
-
-1. Click **Dashboards** in the main menu.
-1. Click the dashboard you want to share.
-1. Click **Share** in the top-right corner.
-
- The share dialog opens and shows the Link tab.
-
-### Share a direct link
-
-The **Link** tab shows the current time range, template variables, and the default theme. You can also share a shortened URL.
-
-1. Click **Copy**.
-
- This action copies the default or the shortened URL to the clipboard.
-
-1. Send the copied URL to a Grafana user with authorization to view the link.
-
-### Publish a snapshot
-
-A dashboard snapshot shares an interactive dashboard publicly. Grafana strips sensitive data such as queries (metric, template and annotation) and panel links, leaving only the visible metric data and series names embedded in the dashboard. Dashboard snapshots can be accessed by anyone with the link.
-
-You can publish snapshots to your local instance or to [snapshots.raintank.io](http://snapshots.raintank.io). The latter is a free service provided by Grafana Labs that enables you to publish dashboard snapshots to an external Grafana instance. Anyone with the link can view it. You can set an expiration time if you want the snapshot removed after a certain time period.
-
-1. Click the **Snapshot** tab.
-1. Click **Publish to snapshots.raintank.io** or **Publish Snapshot**.
-
- Grafana generates a link of the snapshot.
-
-1. Copy the snapshot link, and share it either within your organization or publicly on the web.
-
-If you created a snapshot by mistake, click **Delete snapshot** in the dialog box to remove the snapshot from your Grafana instance.
-
-#### Delete a snapshot
-
-To delete existing snapshots, follow these steps:
-
-1. Click **Dashboards** in the main menu.
-1. Click **Snapshots** to go to the snapshots management page.
-1. Click the red **x** next to the snapshot URL that you want to delete.
-
-The snapshot is immediately deleted. You may need to clear your browser cache or use a private or incognito browser to confirm this.
-
-### Export a dashboard as JSON
-
-The dashboard export action creates a Grafana JSON file that contains everything you need, including layout, variables, styles, data sources, queries, and so on, so that you can later import the dashboard.
-
-1. Click **Dashboards** in the main menu.
-1. Open the dashboard you want to export.
-1. Click **Share** in the top-right corner.
-1. Click **Export**.
-
- If you're exporting the dashboard to use in another instance, with different data source UIDs, enable the **Export for sharing externally** switch.
-
-1. Click **Save to file**.
-
-Grafana downloads a JSON file to your local machine.
-
-#### Make a dashboard portable
-
-If you want to export a dashboard for others to use, you can add template variables for things like a metric prefix (use a constant variable) and server name.
-
-A template variable of the type `Constant` is automatically hidden in the dashboard, and is also added as a required input when the dashboard is imported.
-
-## Export dashboard as PDF
-
-You can generate and save PDF files of any dashboard.
-
-{{< admonition type="note" >}}
-Available in [Grafana Enterprise](ref:grafana-enterprise) and [Grafana Cloud](/docs/grafana-cloud/).
-{{< /admonition >}}
-
-1. Click **Dashboards** in the main menu.
-1. Click the dashboard you want to share.
-1. Click **Share** in the top-right corner.
-1. On the **PDF** tab, select a layout option for the exported dashboard: **Portrait** or **Landscape**.
-1. Click **Save as PDF** to render the dashboard as a PDF file.
-
- Grafana opens the PDF file in a new window or browser tab.
-
-## Share a panel
-
-You can share a panel as a direct link, as a snapshot, or as an embedded link. You can also create library panels using the **Share** option on any panel.
-
-1. Hover over any part of the panel to display the actions menu on the top right corner.
-1. Click the menu and select **Share**.
-
- The share dialog opens and shows the **Link** tab.
-
-### Use direct link
-
-The **Link** tab shows the current time range, template variables, and the default theme. You can optionally enable a shortened URL to share.
-
-1. Click **Copy**.
-
- This action copies the default or the shortened URL to the clipboard.
-
-1. Send the copied URL to a Grafana user with authorization to view the link.
-1. You also optionally click **Direct link rendered image** to share an image of the panel.
-
-For more information, refer to [Image rendering](ref:image-rendering).
-
-The following example shows a link to a server-side rendered PNG:
-
-```bash
-https://play.grafana.org/d/000000012/grafana-play-home?orgId=1&from=1568719680173&to=1568726880174&panelId=4&fullscreen
-```
-
-#### Query string parameters for server-side rendered images
-
-- **width:** Width in pixels. Default is 800.
-- **height:** Height in pixels. Default is 400.
-- **tz:** Timezone in the format `UTC%2BHH%3AMM` where HH and MM are offset in hours and minutes after UTC
-- **timeout:** Number of seconds. The timeout can be increased if the query for the panel needs more than the default 30 seconds.
-- **scale:** Numeric value to configure device scale factor. Default is 1. Use a higher value to produce more detailed images (higher DPI). Supported in Grafana v7.0+.
-
-### Publish a snapshot
-
-A panel snapshot shares an interactive panel publicly. Grafana strips sensitive data leaving only the visible metric data and series names embedded in the dashboard. Panel snapshots can be accessed by anyone with the link.
-
-You can publish snapshots to your local instance or to [snapshots.raintank.io](http://snapshots.raintank.io). The latter is a free service provided by [Grafana Labs](https://grafana.com), that enables you to publish dashboard snapshots to an external Grafana instance.
-
-{{< admonition type="note" >}}
-As of Grafana 11, the option to publish to [snapshots.raintank.io](http://snapshots.raintank.io) is no longer available for Grafana Cloud.
-{{< /admonition >}}
-
-You can optionally set an expiration time if you want the snapshot to be removed after a certain time period.
-
-1. In the **Share Panel** dialog, click **Snapshot** to go to the tab.
-1. Click **Publish to snapshots.raintank.io** or **Publish Snapshot**.
-
- Grafana generates the link of the snapshot.
-
-1. Copy the snapshot link, and share it either within your organization or publicly on the web.
-
-If you created a snapshot by mistake, click **Delete snapshot** in the dialog box to remove the snapshot from your Grafana instance.
-
-#### Delete a snapshot
-
-To delete existing snapshots, follow these steps:
-
-1. Click **Dashboards** in the main menu.
-1. Click **Snapshots** to go to the snapshots management page.
-1. Click the red **x** next to the snapshot URL that you want to delete.
-
-The snapshot is immediately deleted. You may need to clear your browser cache or use a private or incognito browser to confirm this.
-
-### Embed panel
-
-You can embed a panel using an iframe on another web site. A viewer must be signed into Grafana to view the graph.
-
-{{< admonition type="note" >}}
-As of Grafana 8.0, anonymous access permission is no longer available for Grafana Cloud.
-{{< /admonition >}}
-
-Here is an example of the HTML code:
-
-```html
-
-```
-
-The result is an interactive Grafana graph embedded in an iframe.
-
-### Library panel
-
-To create a library panel from the **Share Panel** dialog:
-
-1. Click **Library panel**.
-1. In **Library panel name**, enter the name.
-1. In **Save in folder**, select the folder in which to save the library panel. By default, the root level is selected.
-1. Click **Create library panel** to save your changes.
-1. Click **Save dashboard**.
diff --git a/docs/sources/dashboards/share-dashboards-panels/shared-dashboards/index.md b/docs/sources/dashboards/share-dashboards-panels/shared-dashboards/index.md
new file mode 100644
index 00000000000..1c92c0cee32
--- /dev/null
+++ b/docs/sources/dashboards/share-dashboards-panels/shared-dashboards/index.md
@@ -0,0 +1,331 @@
+---
+aliases:
+ - ../dashboard-public/ # /docs/grafana/latest/dashboards/dashboard-public/
+labels:
+ products:
+ - cloud
+ - enterprise
+ - oss
+title: Externally shared dashboards
+menuTitle: Shared dashboards
+description: Make your Grafana dashboards externally shared and share them with anyone
+weight: 8
+refs:
+ dashboard-sharing:
+ - pattern: /docs/grafana/
+ destination: /docs/grafana//dashboards/share-dashboards-panels/
+ - pattern: /docs/grafana-cloud/
+ destination: /docs/grafana-cloud/visualizations/dashboards/share-dashboards-panels/
+ custom-branding:
+ - pattern: /docs/grafana/
+ destination: /docs/grafana//setup-grafana/configure-grafana/configure-custom-branding/
+ - pattern: /docs/grafana-cloud/
+ destination: /docs/grafana//setup-grafana/configure-grafana/configure-custom-branding/
+ dashboard-insights-documentation:
+ - pattern: /docs/grafana/
+ destination: /docs/grafana//dashboards/assess-dashboard-usage/#dashboard-insights
+ - pattern: /docs/grafana-cloud/
+ destination: /docs/grafana-cloud/visualizations/dashboards/assess-dashboard-usage/
+ caching:
+ - pattern: /docs/grafana/
+ destination: /docs/grafana//administration/data-source-management/#query-and-resource-caching
+ - pattern: /docs/grafana-cloud/
+ destination: /docs/grafana//administration/data-source-management/#query-and-resource-caching
+ grafana-enterprise:
+ - pattern: /docs/grafana/
+ destination: /docs/grafana//introduction/grafana-enterprise/
+ - pattern: /docs/grafana-cloud/
+ destination: /docs/grafana//introduction/grafana-enterprise/
+---
+
+# Externally shared dashboards
+
+{{< admonition type="note" >}}
+This feature was previously called **Public dashboards**.
+{{< /admonition >}}
+
+Externally shared dashboards allow you to share your Grafana dashboard with anyone. This is useful when you want to make your dashboard available to the world without requiring access to your Grafana organization.
+
+If you change a dashboard, ensure that you save the changes before sharing.
+
+{{< admonition type="warning" >}}
+Sharing your dashboard externally could result in a large number of queries to the data sources used by your dashboard.
+This can be mitigated by using the Enterprise [caching](ref:caching) and/or rate limiting features.
+{{< /admonition >}}
+
+## Shared dashboards list
+
+You can see a list of all your externally shared dashboards in one place by navigating to **Dashboards > Shared dashboards**. For each dashboard in the list, the page displays:
+
+- Link to view the externally shared version of the dashboard
+- Link to the shared dashboard configuration
+- Options to pause or revoke access to the external dashboard
+
+You can also click the name of the dashboard to navigate to the dashboard internally.
+
+## Important notes about sharing your dashboard externally
+
+- Anyone with the URL can access the dashboard.
+- Externally shared dashboards are read-only.
+- Arbitrary queries **cannot** be run against your data sources through externally shared dashboards. Externally shared dashboards can only execute the queries stored on the original dashboard.
+
+## Share externally with specific people
+
+{{< admonition type="note">}}
+This feature was previously called **email sharing**.
+
+Available in [Grafana Enterprise](ref:grafana-enterprise) and [Grafana Cloud](/docs/grafana-cloud).
+{{< /admonition >}}
+
+To share a dashboard with specific external users, you can send them a link by email. Use this option when you only want to share your dashboard with specific people. When you share dashboards by email, recipients receive a one-time use link that's valid for **one hour**. Once the link is used, the viewer has access to the shared dashboard for **30 days**.
+
+When you share a dashboard with an email link, your organization is billed per user, regardless of how many dashboards are shared. Grafana bills monthly per user until access is revoked.
+
+To share a dashboard with specific people, follow these steps:
+
+1. Click **Dashboards** in the main menu.
+1. Click the dashboard you want to share.
+1. Click the **Share** drop-down list in the top-right corner and select **Share externally**.
+
+ The **Share externally** drawer opens.
+
+1. In the **Link access** drop-down list, select **Only specific people**.
+1. Click the checkbox confirming that you understand payment is required to add users.
+1. Click **Accept**.
+1. In the **Invite** field, enter the email address of the person you want to invite and click **Invite** and repeat this process for all the people you want to invite.
+
+ You can only invite one person at a time.
+
+1. (Optional) Set the following options:
+ - **Enable time range** - Allow people accessing the link to change the time range. This configuration screen shows the default time range of the dashboard.
+ - **Display annotations** - Allow people accessing the link to view the dashboard annotations.
+1. (Optional) Click **Copy external link** and send the copied URL to any external user.
+1. Click the **X** at the top-right corner to close the share drawer.
+
+Once you've shared a dashboard externally, a **Public** label is displayed in the header of the dashboard.
+
+### Viewers requesting access
+
+If a viewer without access tries to navigate to the shared dashboard, they'll be asked to request access by providing their email. They'll receive an email with a new one-time use link if the email they provided has already been invited to view the shared dashboard and hasn't been revoked.
+
+### Revoke access for a viewer
+
+You can revoke access to the entire dashboard using the steps in [Update access to an external dashboard link](#update-access-to-an-external-dashboard-link), but you can also revoke access to the dashboard for specific people.
+
+To revoke access for a viewer, follow these steps:
+
+1. Click **Dashboards** in the main menu.
+1. Click the dashboard you want to share.
+1. Click the **Share** drop-down list in the top-right corner and select **Share externally**.
+1. In the **Share externally** drawer that opens, click the menu icon (three dots) next to the email address of the viewer for whom you'd like to revoke access.
+1. Click **Revoke access**.
+1. Click the **X** at the top-right corner to close the share drawer.
+
+The viewer immediately no longer has access to the dashboard, nor can they use any existing one-time use links they may have.
+
+### Re-invite a viewer
+
+To re-invite a viewer, follow these steps:
+
+1. Click **Dashboards** in the main menu.
+1. Click the dashboard you want to share.
+1. Click the **Share** drop-down list in the top-right corner and select **Share externally**.
+1. In the **Share externally** drawer that opens, click the menu icon (three dots) next to the email address of the viewer you'd like to invite again.
+1. Click **Resend invite**.
+1. Click the **X** at the top-right corner to close the share drawer.
+
+The viewer receives an email with a new one-time use link. This invalidates all previously issued links for that viewer.
+
+### View shared dashboard users
+
+To see a list of users who have accessed your externally shared dashboard by way of an emailed link, follow these steps:
+
+1. Click **Administration** in in the main menu.
+1. Select **Users and access** > **Users**.
+1. On the **Users** page, click the **Shared dashboard users** tab.
+
+On this screen, you can see:
+
+- The earliest time a user has been active in a dashboard
+- When they last accessed a shared dashboard
+- The dashboards to they have access
+- Their role
+
+You can also revoke a user's access to all shared dashboards on from this tab.
+
+### Access limitations
+
+One-time use links use browser cookies, so when a viewer is granted access through one of these links, they'll only have access on the browser they used to claim the link.
+
+A single viewer can't generate multiple valid one-time use links for a dashboard. When a new one-time use link is issued for a viewer, all previous ones are invalidated.
+
+If a Grafana user has read access to the parent dashboard, they can view the externally shared dashboard without needing to have access granted.
+
+## Share externally to anyone with a link
+
+To share your dashboard so that anyone with the link can access it, follow these steps:
+
+1. Click **Dashboards** in the main menu.
+1. Click the dashboard you want to share.
+1. Click the **Share** drop-down list in the top-right corner and select **Share externally**.
+
+ The **Share externally** drawer opens.
+
+1. In the **Link access** drop-down list, select **Anyone with the link**.
+1. Click the checkbox confirming that you understand the entire dashboard will be public.
+1. Click **Accept**.
+1. (Optional) Set the following options:
+ - **Enable time range** - Allow people accessing the link to change the time range. This configuration screen shows the default time range of the dashboard.
+ - **Display annotations** - Allow people accessing the link to view the dashboard annotations.
+1. Click the **X** at the top-right corner to close the share drawer.
+
+Now anyone with the link can access the dashboard until you pause or revoke access to it.
+
+Once you've shared a dashboard externally, a **Public** label is displayed in the header of the dashboard.
+
+### Update access to an external dashboard link
+
+You can update the access to externally shared dashboard links by following these steps:
+
+1. Click **Dashboards** in the main menu.
+1. Click the dashboard you want to share.
+1. Click the **Share** drop-down list in the top-right corner and select **Share externally**.
+1. In the **Share externally** drawer that opens, do one of the following:
+ - Click **Pause access** so that people can't access the dashboard, but the link is maintained.
+ - Click **Resume access** so that people can access the dashboard again.
+ - Click **Revoke access** so that people can't access the dashboard unless a new external link is generated. Confirm that you want to revoke the link.
+1. Click the **X** at the top-right corner to close the share drawer.
+
+## Assess shared dashboard usage
+
+{{< admonition type="note" >}}
+Available in [Grafana Enterprise](ref:grafana-enterprise) and [Grafana Cloud](/docs/grafana-cloud).
+{{< /admonition >}}
+
+You can check usage analytics about your externally shared dashboard by clicking the insights icon in the dashboard header:
+
+
+
+Learn more about the kind of information provided in the [dashboard insights documentation](ref:dashboard-insights-documentation).
+
+## Supported data sources
+
+Externally shared dashboards _should_ work with any data source that has the properties `backend` and `alerting` both set to true in its `plugin.json`. However, this can't always be
+guaranteed because plugin developers can override this functionality. The following lists include data sources confirmed to work with externally shared dashboards and data sources that should work, but have not been confirmed as compatible.
+
+### Confirmed:
+
+
+
+
+
+
ClickHouse
+
CloudWatch
+
Elasticsearch
+
Infinity
+
InfluxDB
+
Loki
+
Microsoft SQL Server
+
+
+
+
+
MongoDB
+
MySQL
+
Oracle Database
+
PostgreSQL
+
Prometheus
+
Redis
+
SQLite
+
+
+
+
+
+### Unsupported:
+
+
+
+
+
+
Graphite
+
+
+
+
+
+### Unconfirmed:
+
+
+
+
+
+
Altinity plugin for ClickHouse
+
Amazon Athena
+
Amazon Redshift
+
Amazon Timestream
+
Apache Cassandra
+
AppDynamics
+
Azure Data Explorer Datasource
+
Azure Monitor
+
CSV
+
DB2 Datasource
+
Databricks
+
Datadog
+
Dataset
+
Druid
+
+
+
+
+
Dynatrace
+
GitHub
+
Google BigQuery
+
Grafana for YNAB
+
Honeycomb
+
Jira
+
Mock
+
Neo4j Datasource
+
New Relic
+
OPC UA (Unified Architecture)
+
Open Distro for Elasticsearch
+
OpenSearch
+
OpenTSDB
+
+
+
+
+
Orbit
+
SAP HANA®
+
Salesforce
+
Sentry
+
ServiceNow
+
Snowflake
+
Splunk
+
Splunk Infrastructure Monitoring
+
Sqlyze data source
+
TDengine
+
Vertica
+
Wavefront
+
X-Ray
+
kdb+
+
simple grpc data source
+
+
+
+
+
+## Limitations
+
+- Panels that use frontend data sources will fail to fetch data.
+- Template variables are not supported.
+- Exemplars will be omitted from the panel.
+- Only annotations that query the `-- Grafana --` data source are supported.
+- Organization annotations are not supported.
+- Grafana Live and real-time event streams are not supported.
+- Library panels are not supported.
+- Data sources using Reverse Proxy functionality are not supported.
+
+## Custom branding
+
+If you're a Grafana Enterprise customer, you can use custom branding to change the appearance of an externally shared dashboard footer. For more information, refer to [Custom branding](ref:custom-branding).
diff --git a/docs/sources/dashboards/troubleshoot-dashboards/index.md b/docs/sources/dashboards/troubleshoot-dashboards/index.md
index 817f035fb2d..bb6530b7952 100644
--- a/docs/sources/dashboards/troubleshoot-dashboards/index.md
+++ b/docs/sources/dashboards/troubleshoot-dashboards/index.md
@@ -16,7 +16,7 @@ labels:
menuTitle: Troubleshoot dashboards
title: Troubleshoot dashboards
description: Learn how to troubleshoot common dashboard issues
-weight: 300
+weight: 1000
---
# Troubleshoot dashboards
diff --git a/docs/sources/dashboards/use-dashboards/index.md b/docs/sources/dashboards/use-dashboards/index.md
index c9771019310..a2be205471a 100644
--- a/docs/sources/dashboards/use-dashboards/index.md
+++ b/docs/sources/dashboards/use-dashboards/index.md
@@ -19,7 +19,7 @@ labels:
menuTitle: Use dashboards
title: Use dashboards
description: Learn about the features of a Grafana dashboard
-weight: 1
+weight: 100
refs:
dashboard-analytics:
- pattern: /docs/grafana/
@@ -66,6 +66,11 @@ refs:
destination: /docs/grafana//panels-visualizations/panel-overview/
- pattern: /docs/grafana-cloud/
destination: /docs/grafana-cloud/visualizations/panels-visualizations/panel-overview/
+ export-dashboards:
+ - pattern: /docs/grafana/
+ destination: /docs/grafana//dashboards/share-dashboards-panels/#export-dashboards
+ - pattern: /docs/grafana-cloud/
+ destination: /docs/grafana-cloud/visualizations/dashboards/share-dashboards-panels/#export-dashboards
---
# Use dashboards
@@ -80,15 +85,17 @@ The dashboard user interface provides a number of features that you can use to c
The following image and descriptions highlight all dashboard features.
-
+
1. **Grafana home** - Click **Home** in the breadcrumb to go to the home page configured in the Grafana instance.
1. **Dashboard folder** - When you click the dashboard folder name, you can search for other dashboards contained in the folder and perform other [folder management tasks](ref:dashboard-folders).
1. **Dashboard title** - You can create your own dashboard titles or have Grafana create them for you using [generative AI features](ref:generative-ai-features).
1. **Mark as favorite** - Mark the dashboard as one of your favorites so it's included in your list of **Starred** dashboards in the main menu.
+1. **Public label** - When you share a dashboard externally, it's marked with the **Public** label.
1. **Dashboard insights** - Click to view analytics about your dashboard including information about users, activity, query counts. Learn more about [dashboard analytics](ref:dashboard-analytics).
-1. **Share dashboard** - Access several [dashboard sharing](ref:sharing) options.
1. **Edit** - Click to leave view-only mode and enter edit mode, where you can make changes directly to the dashboard and access dashboard settings, as well as several panel editing functions.
+1. **Export** - Access [dashboard exporting](ref:export-dashboards) options.
+1. **Share dashboard** - Access several [dashboard sharing](ref:sharing) options.
1. **Kiosk mode** - Click to display the dashboard on a large screen such as a TV or a kiosk. Kiosk mode hides elements such as navigation menus. Learn more about kiosk mode in our [How to Create Kiosks to Display Dashboards on a TV blog post](https://grafana.com/blog/2019/05/02/grafana-tutorial-how-to-create-kiosks-to-display-dashboards-on-a-tv/). Press `Enter` to leave kiosk mode.
1. **Variables** - Use [variables](ref:variables) to create more interactive and dynamic dashboards.
1. **Dashboard links** - Link to other dashboards, panels, and external websites. Learn more about [dashboard links](ref:dashboard-links).
@@ -123,10 +130,11 @@ By hovering over a panel with the mouse you can use some shortcuts that will tar
- `e`: Toggle panel edit view
- `v`: Toggle panel fullscreen view
-- `ps`: Open Panel Share Modal
-- `pd`: Duplicate Panel
-- `pr`: Remove Panel
-- `pl`: Toggle panel legend
+- `pu`: Open share panel link configuration
+- `pe`: Open share panel embed configuration
+- `ps`: Open share panel snapshot configuration
+- `pd`: Duplicate panel
+- `pr`: Remove panel
## Set dashboard time range
diff --git a/docs/sources/dashboards/variables/_index.md b/docs/sources/dashboards/variables/_index.md
index ad8eae57c86..6ec5d4916ed 100644
--- a/docs/sources/dashboards/variables/_index.md
+++ b/docs/sources/dashboards/variables/_index.md
@@ -10,7 +10,7 @@ labels:
- oss
title: Variables
description: Add variables to metric queries and panel titles to create interactive and dynamic dashboards
-weight: 130
+weight: 800
---
# Variables
diff --git a/docs/sources/developers/http_api/_index.md b/docs/sources/developers/http_api/_index.md
index a37489074de..51b5d2cab61 100644
--- a/docs/sources/developers/http_api/_index.md
+++ b/docs/sources/developers/http_api/_index.md
@@ -66,7 +66,7 @@ Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
- [Other API]({{< relref "other/" >}})
- [Playlists API]({{< relref "playlist/" >}})
- [Preferences API]({{< relref "preferences/" >}})
-- [Public dashboard API]({{< relref "dashboard_public/" >}})
+- [Shared dashboards API]({{< relref "dashboard_public/" >}})
- [Query history API]({{< relref "query_history/" >}})
- [Service account API]({{< relref "serviceaccount/" >}})
- [Short URL API]({{< relref "short_url/" >}})
diff --git a/docs/sources/developers/http_api/dashboard_public.md b/docs/sources/developers/http_api/dashboard_public.md
index 1604022fd66..f96a4c4e4f4 100644
--- a/docs/sources/developers/http_api/dashboard_public.md
+++ b/docs/sources/developers/http_api/dashboard_public.md
@@ -2,7 +2,7 @@
aliases:
- ../../http_api/dashboard_public/
canonical: /docs/grafana/latest/developers/http_api/dashboard_public/
-description: Grafana Public Dashboard HTTP API
+description: Grafana Shared Dashboards HTTP API
keywords:
- grafana
- http
@@ -13,7 +13,7 @@ labels:
products:
- enterprise
- oss
-title: Public Dashboard HTTP API
+title: Shared Dashboards HTTP API
refs:
role-based-access-control-permissions:
- pattern: /docs/grafana/
@@ -22,7 +22,7 @@ refs:
destination: /docs/grafana//administration/roles-and-permissions/access-control/custom-role-actions-scopes/
---
-# Public Dashboard API
+# Shared Dashboards API
{{% admonition type="note" %}}
@@ -30,21 +30,21 @@ If you're running Grafana Enterprise, you'll need to have specific permissions f
{{% /admonition %}}
-## Create a public dashboard
+## Create a shared dashboard
`POST /api/dashboards/uid/:uid/public-dashboards/`
-Creates a new public dashboard.
+Creates a new shared dashboard.
**Required permissions**
-See note in the [introduction](#public-dashboard-api) for an explanation.
+See note in the [introduction](#shared-dashboards-api) for an explanation.
| Action | Scope |
| ------------------------- | -------------------------------- |
| `dashboards.public:write` | `dashboards:uid:` |
-**Example Request for new public dashboard**:
+**Example Request for new shared dashboard**:
```http
POST /api/dashboards/uid/xCpsVuc4z/public-dashboards/ HTTP/1.1
@@ -64,10 +64,10 @@ Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
JSON Body schema:
-- **uid** – Optional. Unique identifier when creating a public dashboard. If it's null, it will generate a new uid.
+- **uid** – Optional. Unique identifier when creating a shared dashboard. If it's null, it will generate a new uid.
- **accessToken** – Optional. Unique access token. If it's null, it will generate a new access token.
-- **timeSelectionEnabled** – Optional. Set to `true` to enable the time picker in the public dashboard. The default value is `false`.
-- **isEnabled** – Optional. Set to `true` to enable the public dashboard. The default value is `false`.
+- **timeSelectionEnabled** – Optional. Set to `true` to enable the time picker in the shared dashboard. The default value is `false`.
+- **isEnabled** – Optional. Set to `true` to enable the shared dashboard. The default value is `false`.
- **annotationsEnabled** – Optional. Set to `true` to show annotations. The default value is `false`.
- **share** – Optional. Set the share mode. The default value is `public`.
@@ -96,7 +96,7 @@ Content-Length: 78
Status Codes:
- **200** – Created
-- **400** – Errors (such as invalid json, missing or invalid fields, or dashboard is public)
+- **400** – Errors (such as invalid json, missing or invalid fields, or dashboard is shared)
- **401** – Unauthorized
- **403** – Access denied
- **404** – Dashboard not found
@@ -115,21 +115,21 @@ Content-Length: 107
}
```
-## Update a public dashboard
+## Update a shared dashboard
`PATCH /api/dashboards/uid/:uid/public-dashboards/:publicDashboardUid`
-Will update the public dashboard given the specified unique identifier (uid).
+Will update the shared dashboard given the specified unique identifier (uid).
**Required permissions**
-See note in the [introduction](#public-dashboard-api) for an explanation.
+See note in the [introduction](#shared-dashboard-api) for an explanation.
| Action | Scope |
| ------------------------- | -------------------------------- |
| `dashboards.public:write` | `dashboards:uid:` |
-**Example Request for updating a public dashboard**:
+**Example Request for updating a shared dashboard**:
```http
PATCH /api/dashboards/uid/xCpsVuc4z/public-dashboards/cd56d9fd-f3d4-486d-afba-a21760e2acbe HTTP/1.1
@@ -147,8 +147,8 @@ Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
JSON Body schema:
-- **timeSelectionEnabled** – Optional. Set to `true` to enable the time picker in the public dashboard. The default value is `false`.
-- **isEnabled** – Optional. Set to `true` to enable the public dashboard. The default value is `false`.
+- **timeSelectionEnabled** – Optional. Set to `true` to enable the time picker in the shared dashboard. The default value is `false`.
+- **isEnabled** – Optional. Set to `true` to enable the shared dashboard. The default value is `false`.
- **annotationsEnabled** – Optional. Set to `true` to show annotations. The default value is `false`.
- **share** – Optional. Set the share mode. The default value is `public`.
@@ -180,7 +180,7 @@ Status Codes:
- **400** – Errors (such as invalid json, missing or invalid fields)
- **401** – Unauthorized
- **403** – Access denied
-- **404** – Public dashboard not found
+- **404** – Dashboard not found
The error response body will have the following properties:
@@ -196,15 +196,15 @@ Content-Length: 107
}
```
-## Get public dashboard by dashboard uid
+## Get shared dashboard by dashboard uid
`GET /api/dashboards/uid/:uid/public-dashboards/`
-Will return the public dashboard given the dashboard unique identifier (uid).
+Will return the shared dashboard given the dashboard unique identifier (uid).
**Required permissions**
-See note in the [introduction](#public-dashboard-api) for an explanation.
+See note in the [introduction](#shared-dashboard-api) for an explanation.
| Action | Scope |
| ----------------- | -------------------------------- |
@@ -245,17 +245,17 @@ Status Codes:
- **200** – Found
- **401** – Unauthorized
- **403** – Access denied
-- **404** – Not found
+- **404** – Dashboard not found
-## Delete public dashboard by dashboard uid and public dashboard uid
+## Delete shared dashboard by dashboard uid and shared dashboard uid
`DELETE /api/dashboards/uid/:uid/public-dashboards/:publicDashboardUid`
-Will delete the public dashboard given the specified unique identifier (uid).
+Will delete the shared dashboard given the specified unique identifier (uid).
**Required permissions**
-See note in the [introduction](#public-dashboard-api) for an explanation.
+See note in the [introduction](#shared-dashboard-api) for an explanation.
| Action | Scope |
| ------------------------- | -------------------------------- |
@@ -276,13 +276,13 @@ Status Codes:
- **401** – Unauthorized
- **403** – Access denied
-## Get a list of all public dashboards with pagination
+## Get a list of all shared dashboards with pagination
`GET /api/dashboards/public-dashboards`
**Required permissions**
-See note in the [introduction](#public-dashboard-api) for an explanation.
+See note in the [introduction](#shared-dashboard-api) for an explanation.
| Action | Scope |
| ----------------- | -------------------------------- |
diff --git a/docs/sources/introduction/grafana-enterprise.md b/docs/sources/introduction/grafana-enterprise.md
index f2d96227778..da08521b3ed 100644
--- a/docs/sources/introduction/grafana-enterprise.md
+++ b/docs/sources/introduction/grafana-enterprise.md
@@ -61,7 +61,7 @@ Grafana Enterprise adds the following features:
- [Data source permissions]({{< relref "../administration/data-source-management#data-source-permissions" >}}) to restrict query access to specific teams and users.
- [Data source query and resource caching]({{< relref "../administration/data-source-management#query-and-resource-caching" >}}) to temporarily store query results in Grafana to reduce data source load and rate limiting.
- [Reporting]({{< relref "../dashboards/create-reports" >}}) to generate a PDF report from any dashboard and set up a schedule to have it emailed to whomever you choose.
-- [Export dashboard as PDF]({{< relref "../dashboards/share-dashboards-panels#export-dashboard-as-pdf" >}})
+- [Export dashboard as PDF]({{< relref "../dashboards/share-dashboards-panels#export-a-dashboard-as-pdf" >}})
- [Custom branding]({{< relref "../setup-grafana/configure-grafana/configure-custom-branding" >}}) to customize Grafana from the brand and logo to the footer links.
- [Usage insights]({{< relref "../dashboards/assess-dashboard-usage" >}}) to understand how your Grafana instance is used.
- [Recorded queries]({{< relref "../administration/recorded-queries" >}}) to see trends over time for your data sources.
diff --git a/docs/sources/panels-visualizations/panel-overview/index.md b/docs/sources/panels-visualizations/panel-overview/index.md
index 5816a6f1ce8..7acc0cf1ff1 100644
--- a/docs/sources/panels-visualizations/panel-overview/index.md
+++ b/docs/sources/panels-visualizations/panel-overview/index.md
@@ -140,7 +140,7 @@ To access the panel editor, hover over the top-right corner of any panel. Click
- **View**: View the panel in full screen.
- **Edit**: Open the panel editor to edit panel and visualization options.
-- **Share**: Share the panel as a link, embed, or library panel.
+- **Share**: Share the panel as a link, embed, or snapshot.
- **Explore**: Open the panel in **Explore**, where you can focus on your query.
- **Inspect**: Open the **Inspect** drawer, where you can review the panel data, stats, metadata, JSON, and query.
- **Data**: Open the **Inspect** drawer in the **Data** tab.
@@ -150,8 +150,8 @@ To access the panel editor, hover over the top-right corner of any panel. Click
- **More**: Access other panel actions.
- **Duplicate**: Make a copy of the panel. Duplicated panels query data separately from the original panel. You can use the special `Dashboard` data source to [share the same query results across panels](ref:share) instead.
- **Copy**: Copy the panel to the clipboard.
- - **Create library panel**: Create a panel that can be imported into other dashboards.
- - **Create alert**: Open the alert rule configuration page in **Alerting**, where you can [create a Grafana-managed alert](ref:create) based on the panel queries.
+ - **New library panel**: Create a panel that can be imported into other dashboards.
+ - **New alert rule**: Open the alert rule configuration page in **Alerting**, where you can [create a Grafana-managed alert](ref:create) based on the panel queries.
- **Hide legend**: Hide the panel legend.
- **Get help**: Send a snapshot or panel data to Grafana Labs Technical Support.
- **Remove**: Remove the panel from the dashboard.
@@ -164,10 +164,14 @@ By hovering over a panel with the mouse you can use some shortcuts that will tar
- `e`: Toggle panel edit view
- `v`: Toggle panel fullscreen view
-- `ps`: Open Panel Share Modal
+- `pu`: Share link
+- `pe`: Share embed
+- `ps`: Share snapshot
+- `px`: Open panel in **Explore**
- `pd`: Duplicate Panel
+- `i`: Inspect
+- `pl`: Hide or show legend
- `pr`: Remove Panel
-- `pl`: Toggle panel legend
## Add a panel
diff --git a/docs/sources/panels-visualizations/visualizations/table/index.md b/docs/sources/panels-visualizations/visualizations/table/index.md
index e7c8b2294fd..e1b6ecdaaaf 100644
--- a/docs/sources/panels-visualizations/visualizations/table/index.md
+++ b/docs/sources/panels-visualizations/visualizations/table/index.md
@@ -127,197 +127,22 @@ The table visualization helps with debugging when you need to know exactly what

-## Sort column
-
-Click a column title to change the sort order from default to descending to ascending. Each time you click, the sort order changes to the next option in the cycle. You can sort multiple columns by holding the `shift` key and clicking the column name.
-
-
-
-## Data set selector
-
-If the data queried contains multiple data sets, a table displays a drop-down list at the bottom, so you can select the data set you want to visualize.
-
-
-
-## Panel options
-
-{{< docs/shared lookup="visualizations/panel-options.md" source="grafana" version="" >}}
-
-## Table options
-
-{{% admonition type="note" %}}
-If you are using a table created before Grafana 7.0, then you need to migrate to the new table version in order to see these options. To migrate, on the Panel tab, click **Table** visualization. Grafana updates the table version and you can then access all table options.
-{{% /admonition %}}
-
-### Show header
-
-Show or hide column names imported from your data source.
-
-### Column width
-
-By default, Grafana automatically calculates the column width based on the table size and the minimum column width. This field option can override the setting and define the width for all columns in pixels.
-
-For example, if you enter `100` in the field, then when you click outside the field, all the columns will be set to 100 pixels wide.
-
-### Minimum column width
-
-By default, the minimum width of the table column is 150 pixels. This field option can override that default and will define the new minimum column width for the table in pixels.
-
-For example, if you enter `75` in the field, then when you click outside the field, all the columns will scale to no smaller than 75 pixels wide.
-
-For small-screen devices, such as smartphones or tablets, reduce the default `150` pixel value to`50` to allow table-based panels to render correctly in dashboards.
-
-### Column alignment
-
-Choose how Grafana should align cell contents:
-
-- Auto (default)
-- Left
-- Center
-- Right
-
-### Column filter
-
-You can temporarily change how column data is displayed. For example, you can order values from highest to lowest or hide specific values. For more information, refer to [Filter table columns](#filter-table-columns).
-
-### Pagination
-
-Use this option to enable or disable pagination. It is a front-end option that does not affect queries. When enabled, the page size automatically adjusts to the height of the table.
-
-## Cell options
-
-### Cell type
-
-By default, Grafana automatically chooses display settings. You can override the settings by choosing one of the following options to set the default for all fields. Additional configuration is available for some cell types.
-
-{{% admonition type="note" %}}
-If you set these in the Field tab, then the type will apply to all fields, including the time field. Many options will work best if you set them in the Override tab so that they can be restricted to one or more fields.
-{{% /admonition %}}
-
-#### Auto
-
-The **Auto** cell type automatically displays values, with sensible defaults applied.
-
-#### Color text
-
-If thresholds are set, then the field text is displayed in the appropriate threshold color.
-
-{{< figure src="/static/img/docs/tables/color-text.png" max-width="500px" caption="Color text" class="docs-image--no-shadow" >}}
-
-#### Color background (gradient or solid)
-
-If thresholds are set, then the field background is displayed in the appropriate threshold color.
-
-{{< figure src="/static/img/docs/tables/color-background.png" max-width="500px" caption="Color background" class="docs-image--no-shadow" >}}
-
-Toggle the **Apply to entire row** switch, to apply the background color that's configured for the cell to the whole row.
-
-{{< figure src="/static/img/docs/tables/colored-rows.png" max-width="500px" alt="Colored row background" class="docs-image--no-shadow" >}}
-
-#### Gauge
-
-Cells can be displayed as a graphical gauge, with several different presentation types.
-
-{{< admonition type="note" >}}
-The maximum and minimum values of the gauges are configured automatically from the smallest and largest values in your whole data set. If you don't want the max/min values to be pulled from the whole data set, you can configure them for each column with field overrides.
-{{< /admonition >}}
-
-##### Basic
-
-The basic mode will show a simple gauge with the threshold levels defining the color of gauge.
-
-{{< figure src="/static/img/docs/tables/basic-gauge.png" max-width="500px" caption="Gradient gauge" class="docs-image--no-shadow" >}}
-
-##### Gradient
-
-The threshold levels define a gradient.
-
-{{< figure src="/static/img/docs/tables/gradient-gauge.png" max-width="500px" caption="Gradient gauge" class="docs-image--no-shadow" >}}
-
-##### LCD
-
-The gauge is split up in small cells that are lit or unlit.
-
-{{< figure src="/static/img/docs/tables/lcd-gauge.png" max-width="500px" caption="LCD gauge" class="docs-image--no-shadow" >}}
-
-##### Label Options
-
-Additionally, labels displayed alongside of the gauges can be set to be colored by value, match the theme text color, or be hidden.
-
-**Value Color**
-
-{{< figure src="/static/img/docs/tables/value-color-mode.png" max-width="500px" caption="Color Label by Value" class="docs-image--no-shadow" >}}
-
-**Text Color**
-
-{{< figure src="/static/img/docs/tables/text-color-mode.png" max-width="500px" caption="Color Label by theme color" class="docs-image--no-shadow" >}}
-
-**Hidden**
-
-{{< figure src="/static/img/docs/tables/hidden-mode.png" max-width="500px" caption="Hide Label" class="docs-image--no-shadow" >}}
-
-#### Data links
-
-If you've configured data links, when the cell type is **Auto** mode, the cell text becomes clickable. If you change the cell type to **Data links**, the cell text reflects the titles of the configured data links. To control the application of data link text more granularly use a **Cell option > Cell type > Data links** field override.
-
-#### JSON view
-
-Shows value formatted as code. If a value is an object the JSON view allowing browsing the JSON object will appear on hover.
-
-{{< figure src="/static/img/docs/tables/json-view.png" max-width="500px" caption="JSON view" class="docs-image--no-shadow" >}}
-
-#### Image
-
-> Only available in Grafana 7.3+
-
-If you have a field value that is an image URL or a base64 encoded image you can configure the table to display it as an image.
-
-{{< figure src="/static/img/docs/v73/table_hover.gif" max-width="900px" caption="Table hover" >}}
-
-Use the **Alt text** option to set the alternative text of an image. The text will be available for screen readers and in cases when images can't be loaded.
-
-Use the **Title text** option to set the text that's displayed when the image is hovered over with a cursor.
-
-#### Sparkline
-
-Shows values rendered as a sparkline. You can show sparklines using the [Time series to table transformation](ref:time-series-to-table-transformation) on data with multiple time series to process it into a format the table can show.
-
-{{< figure src="/static/img/docs/tables/sparkline2.png" max-width="500px" caption="Sparkline" class="docs-image--no-shadow" >}}
-
-You can be customize sparklines with many of the same options as the [Time series panel](ref:time-series-panel) including line width, fill opacity, and more. You can also change the color of the sparkline by updating the [color scheme](ref:color-scheme) in the _Standard options_ section of the panel configuration.
-
-### Wrap text
-
-{{< admonition type="note" >}}
-Text wrapping is in [public preview](https://grafana.com/docs/release-life-cycle/#public-preview), however, it’s available to use by default. We’d love hear from you about how this new feature is working. To provide feedback, you can open an issue in the [Grafana GitHub repository](https://github.com/grafana/grafana).
-{{< /admonition >}}
-
-Toggle the **Wrap text** switch to wrap text in the cell with the longest content in your table. To wrap the text in a specific column only, use the Wrap Text option in a [field override](ref:field-override).
-
-### Cell value inspect
-
-Enables value inspection from table cells. When the **Cell inspect value** switch is toggled on, clicking the inspect icon in a cell opens the **Inspect value** drawer.
-
-The **Inspect value** drawer has two tabs, **Plain text** and **Code editor**. Grafana attempts to automatically detect the type of data in the cell and opens the drawer with the associated tab showing. However, you can switch back and forth between tabs.
-
-Cell value inspection is only available when the **Cell type** selection is **Auto**, **Colored text**, **Colored background**, or **JSON View**.
-
## Turn on column filtering
1. In Grafana, navigate to the dashboard with the table with the columns that you want to filter.
1. On the table panel you want to filter, open the panel editor.
-1. Click the **Field** tab.
-1. In Table options, turn on the **Column filter** option.
+1. Expand the the **Table** options section.
+1. Toggle on the [**Column filter** switch](#table-options).
A filter icon appears next to each column title.
-{{< figure src="/static/img/docs/tables/column-filter-with-icon.png" max-width="500px" caption="Column filtering turned on" class="docs-image--no-shadow" >}}
+{{< figure src="/static/img/docs/tables/column-filter-with-icon.png" max-width="350px" alt="Column filtering turned on" class="docs-image--no-shadow" >}}
### Filter column values
To filter column values, click the filter (funnel) icon next to a column title. Grafana displays the filter options for that column.
-{{< figure src="/static/img/docs/tables/filter-column-values.png" max-width="500px" caption="Filter column values" class="docs-image--no-shadow" >}}
+{{< figure src="/static/img/docs/tables/filter-column-values.png" max-width="300px" alt="Filter column values" class="docs-image--no-shadow" >}}
Click the check box next to the values that you want to display. Enter text in the search field at the top to show those values in the display so that you can select them rather than scroll to find them.
@@ -333,41 +158,202 @@ Click the check box above the **Ok** and **Cancel** buttons to add or remove all
Columns with filters applied have a blue funnel displayed next to the title.
-{{< figure src="/static/img/docs/tables/filtered-column.png" max-width="500px" caption="Filtered column" class="docs-image--no-shadow" >}}
+{{< figure src="/static/img/docs/tables/filtered-column.png" max-width="100px" alt="Filtered column" class="docs-image--no-shadow" >}}
To remove the filter, click the blue funnel icon and then click **Clear filter**.
-## Table footer
+## Sort columns
-You can use the table footer to show [calculations](ref:calculations) on fields.
+Click a column title to change the sort order from default to descending to ascending. Each time you click, the sort order changes to the next option in the cycle. You can sort multiple columns by holding the `shift` key and clicking the column name.
-After you enable the table footer:
+{{< figure src="/static/img/docs/tables/sort-descending.png" max-width="350px" alt="Sort descending" class="docs-image--no-shadow" >}}
-1. Select the **Calculation**
-2. Select the **Fields** that you want to calculate
+## Dataset selector
-The system applies the calculation to all numeric fields if you do not select a field.
+If the data queried contains multiple datasets, a table displays a drop-down list at the bottom, so you can select the dataset you want to visualize.
-### Count rows
+{{< figure src="/media/docs/grafana/panels-visualizations/TablePanelMultiSet.png" max-width="650px" alt="Table visualization with multiple datasets" class="docs-image--no-shadow" >}}
-If you want to show the number of rows in the dataset instead of the number of values in the selected fields, select the **Count** calculation and enable **Count rows**.
+## Configuration options
-## Standard options
+### Panel options
+
+{{< docs/shared lookup="visualizations/panel-options.md" source="grafana" version="" >}}
+
+### Table options
+
+{{% admonition type="note" %}}
+If you are using a table created before Grafana 7.0, then you need to migrate to the new table version in order to see these options. To migrate, on the Panel tab, click **Table** visualization. Grafana updates the table version and you can then access all table options.
+{{% /admonition %}}
+
+| Option | Description |
+| -------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| Show table header | Show or hide column names imported from your data source. |
+| Cell height | Set the height of the cell. Choose from **Small**, **Medium**, and **Large**. |
+| Enable pagination | Toggle the switch to control how many table rows are visible at once. When switched on, the page size automatically adjusts to the height of the table. This option doesn't affect queries. |
+| Minimum column width | Define the lower limit of the column width, in pixels. By default, the minimum width of the table column is 150 pixels. For small-screen devices, such as smartphones or tablets, reduce the default `150` pixel value to `50` to allow table-based panels to render correctly in dashboards. |
+| Column width | Define a column width, in pixels, rather than allowing the width to be set automatically. By default, Grafana calculates the column width based on the table size and the minimum column width. |
+| Column alignment | Set how Grafana should align cell contents. Choose from: **Auto** (default), **Left**, **Center**, and **Right**. |
+| Column filter | Temporarily change how column data is displayed. For example, you can order values from highest to lowest or hide specific values. For more information, refer to [Filter table columns](#filter-table-columns). |
+
+### Table footer options
+
+Toggle the **Show table footer** switch on and off to control the display of the footer. When the toggle is switched on, you can use the table footer to show [calculations](ref:calculations) on fields.
+
+After you activate the table footer, make selections in the following options:
+
+- **Calculation** - The calculation that you want to apply.
+- **Fields** - The fields to which you want to apply the calculations. The system applies the calculation to all numeric fields if you do not select a field.
+- **Count rows** - This options is displayed if you select the **Count** calculation. If you want to show the number of rows in the dataset instead of the number of values in the selected fields, toggle on the **Count rows** switch.
+
+### Cell options
+
+Cell options allow you to control how data is displayed in a table.
+
+#### Cell type
+
+By default, Grafana automatically chooses display settings. You can override the settings by choosing one of the following options to set the default for all fields. Additional configuration is available for some cell types.
+
+{{% admonition type="note" %}}
+If you set these in the Field tab, then the type will apply to all fields, including the time field. Many options will work best if you set them in the Override tab so that they can be restricted to one or more fields.
+{{% /admonition %}}
+
+| Cell type | Description |
+| ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| Auto | The **Auto** cell type automatically displays values, with sensible defaults applied. |
+| [Sparkline](#sparkline) | Shows values rendered as a sparkline. |
+| [Colored text](#colored-text) | If thresholds are set, then the field text is displayed in the appropriate threshold color. |
+| [Colored background](#colored-background) | If thresholds are set, then the field background is displayed in the appropriate threshold color. |
+| [Gauge](#gauge) | Cells can be displayed as a graphical gauge, with several different presentation types. You can set the [Gauge display mode](#gauge-display-mode) and the [Value display](#value-display) options. |
+| Data links | If you've configured data links, when the cell type is **Auto** mode, the cell text becomes clickable. If you change the cell type to **Data links**, the cell text reflects the titles of the configured data links. To control the application of data link text more granularly use a **Cell option > Cell type > Data links** field override. |
+| [JSON View](#json-view) | Shows value formatted as code. |
+| [Image](#image) | If you have a field value that is an image URL or a base64 encoded image you can configure the table to display it as an image. |
+
+##### Sparkline
+
+Shows values rendered as a sparkline. You can show sparklines using the [Time series to table transformation](ref:time-series-to-table-transformation) on data with multiple time series to process it into a format the table can show.
+
+{{< figure src="/static/img/docs/tables/sparkline2.png" max-width="500px" alt="Sparkline" class="docs-image--no-shadow" >}}
+
+You can customize sparklines with many of the same options as the [time series visualization](ref:time-series-panel) including line style and width, fill opacity, gradient mode, and more. You can also change the color of the sparkline by updating the [color scheme](ref:color-scheme) in the **Standard options** section of the panel configuration.
+
+##### Colored text
+
+If thresholds are set, then the field text is displayed in the appropriate threshold color.
+
+{{< figure src="/static/img/docs/tables/color-text.png" max-width="500px" alt="Color text" class="docs-image--no-shadow" >}}
+
+{{< admonition type="note" >}}
+This is an experimental feature.
+{{< /admonition >}}
+
+##### Colored background
+
+If thresholds are set, then the field background is displayed in the appropriate threshold color.
+
+{{< figure src="/static/img/docs/tables/color-background.png" max-width="500px" alt="Color background" class="docs-image--no-shadow" >}}
+
+Choose between **Basic** and **Gradient** to set the **Background display mode**.
+
+Toggle the **Apply to entire row** switch, to apply the background color that's configured for the cell to the whole row.
+
+{{< figure src="/static/img/docs/tables/colored-rows.png" max-width="500px" alt="Colored row background" class="docs-image--no-shadow" >}}
+
+##### Gauge
+
+Cells can be displayed as a graphical gauge, with several different presentation types controlled by the gauge display mode and the value display.
+
+{{< admonition type="note" >}}
+The maximum and minimum values of the gauges are configured automatically from the smallest and largest values in your whole data set. If you don't want the max/min values to be pulled from the whole data set, you can configure them for each column with field overrides.
+{{< /admonition >}}
+
+###### Gauge display mode
+
+You can set three gauge display modes.
+
+- **Basic** - Shows a simple gauge with the threshold levels defining the color of gauge.
+
+ {{< figure src="/static/img/docs/tables/basic-gauge.png" max-width="500px" alt="Gradient gauge" class="docs-image--no-shadow" >}}
+
+- **Gradient** - The threshold levels define a gradient.
+
+ {{< figure src="/static/img/docs/tables/gradient-gauge.png" max-width="500px" alt="Gradient gauge" class="docs-image--no-shadow" >}}
+
+- **Retro LCD** - The gauge is split up in small cells that are lit or unlit.
+
+ {{< figure src="/static/img/docs/tables/lcd-gauge.png" max-width="500px" alt="LCD gauge" class="docs-image--no-shadow" >}}
+
+###### Value display
+
+Labels displayed alongside of the gauges can be set to be colored by value, match the theme text color, or be hidden.
+
+- **Value color**
+
+ {{< figure src="/static/img/docs/tables/value-color-mode.png" max-width="500px" alt="Color Label by Value" class="docs-image--no-shadow" >}}
+
+- **Text color**
+
+ {{< figure src="/static/img/docs/tables/text-color-mode.png" max-width="500px" alt="Color Label by theme color" class="docs-image--no-shadow" >}}
+
+- **Hidden**
+
+ {{< figure src="/static/img/docs/tables/hidden-mode.png" max-width="500px" alt="Hide Label" class="docs-image--no-shadow" >}}
+
+##### JSON View
+
+Shows value formatted as code. If a value is an object the JSON view allowing browsing the JSON object will appear on hover.
+
+{{< figure src="/static/img/docs/tables/json-view.png" max-width="350px" alt="JSON view" class="docs-image--no-shadow" >}}
+
+##### Image
+
+{{< admonition type="note" >}}
+Only available in Grafana 7.3+
+{{< /admonition >}}
+
+If you have a field value that is an image URL or a base64 encoded image you can configure the table to display it as an image.
+
+{{< figure src="/static/img/docs/v73/table_hover.gif" max-width="900px" alt="Table hover" >}}
+
+- **Alt text** - Set the alternative text of an image. The text will be available for screen readers and in cases when images can't be loaded.
+- **Title text** - Set the text that's displayed when the image is hovered over with a cursor.
+
+#### Wrap text
+
+{{< admonition type="note" >}}
+Text wrapping is in [public preview](https://grafana.com/docs/release-life-cycle/#public-preview), however, it’s available to use by default. We’d love hear from you about how this new feature is working. To provide feedback, you can open an issue in the [Grafana GitHub repository](https://github.com/grafana/grafana).
+{{< /admonition >}}
+
+Toggle the **Wrap text** switch to wrap text in the cell with the longest content in your table. To wrap the text in a specific column only, use the Wrap Text option in a [field override](ref:field-override).
+
+This option isn't available when you set the cell type to **Gauge** or Data links,JSON View, Image.
+
+#### Cell value inspect
+
+Enables value inspection from table cells. When the **Cell inspect value** switch is toggled on, clicking the inspect icon in a cell opens the **Inspect value** drawer.
+
+The **Inspect value** drawer has two tabs, **Plain text** and **Code editor**. Grafana attempts to automatically detect the type of data in the cell and opens the drawer with the associated tab showing. However, you can switch back and forth between tabs.
+
+Cell value inspection is only available when the **Cell type** selection is **Auto**, **Colored text**, **Colored background**, or **JSON View**.
+
+This option isn't available when you set the cell type to **Gauge** or Data links, Image, .
+
+### Standard options
{{< docs/shared lookup="visualizations/standard-options.md" source="grafana" version="" >}}
-## Data links
+### Data links
{{< docs/shared lookup="visualizations/datalink-options.md" source="grafana" version="" >}}
-## Value mappings
+### Value mappings
{{< docs/shared lookup="visualizations/value-mappings-options.md" source="grafana" version="" >}}
-## Thresholds
+### Thresholds
{{< docs/shared lookup="visualizations/thresholds-options-2.md" source="grafana" version="" >}}
-## Field overrides
+### Field overrides
{{< docs/shared lookup="visualizations/overrides-options.md" source="grafana" version="" >}}
diff --git a/docs/sources/search/_index.md b/docs/sources/search/_index.md
index 832a359ba41..9fb729a3c07 100644
--- a/docs/sources/search/_index.md
+++ b/docs/sources/search/_index.md
@@ -1,9 +1,11 @@
---
-description: Learn how to search for Grafana dashboards and folders
+description: Use the command palette to search all of Grafana and initiate key actions
keywords:
- search
- - dashboard
- - folder
+ - dashboards
+ - alerts
+ - preferences
+ - sift
labels:
products:
- cloud
@@ -14,111 +16,24 @@ title: Search
weight: 80
---
-# Search dashboards and folders
+# Grafana search
-You can search for dashboards and dashboard folders by name.
-
-When you search for dashboards, you can also do it by panel title. Whether you search by name or panel title, the system returns all dashboards available within the Grafana instance, even if you do not have permission to view the contents of the dashboard.
-
-## Search by name
-
-Begin typing any part of the dashboard or folder name in the search bar. The search returns results for any partial string match in real-time, as you type.
-
-The search is:
-
-- Real-time
-- _Not_ case sensitive
-- Functional across stored _and_ file based dashboards and folders.
-
-{{% admonition type="note" %}}
-You can use your keyboard arrow keys to navigate the results and press `Enter` to open the selected dashboard or folder.
-{{% /admonition %}}
-
-The following images show:
-
-Searching by dashboard name from the **Dashboards** page.
-
-{{< figure src="/media/docs/grafana/dashboards/search-for-dashboard.png" width="700px" >}}
-
-Searching by folder name from the **Dashboards** page.
-
-{{< figure src="/media/docs/grafana/dashboards/search-folder.png" width="700px" >}}
-
-Searching by dashboard name inside a folder.
-
-{{< figure src="/media/docs/grafana/dashboards/search-in-folder.png" width="700px" >}}
-
-{{% admonition type="note" %}}
-When you search within a folder, its subfolders are not part of the results returned. You need to be on the **Dashboards** page (or the root level) to search for subfolders by name.
-{{% /admonition %}}
-
-## Search dashboards using panel title
-
-You can search for a dashboard by the title of a panel that appears in a dashboard.
-If a panel's title matches your search query, the dashboard appears in the search results.
-
-This feature is available by default in Grafana Cloud and in Grafana OSS v9.1 and higher, you access this feature by enabling the `panelTitleSearch` feature toggle.
-For more information about enabling panel title search, refer to [Enable the panelTitleSearch feature toggle.](#enable-panelTitleSearch-feature-toggle)
-
-The following image shows the search results when you search using panel title.
-
-{{< figure src="/static/img/docs/v91/dashboard-features/search-by-panel-title.png" width="700px" >}}
-
-### Enable the panelTitleSearch feature toggle
-
-Complete the following steps to enable the `panelTitleSearch` feature toggle.
-
-**Before you begin:**
-
-- If you are running Grafana Enterprise with RBAC, enable [service accounts]({{< relref "../administration/service-accounts/" >}}).
-
-**To enable the panelTitleSearch feature toggle:**
-
-1. Open the Grafana [configuration file]({{< relref "../setup-grafana/configure-grafana/#configuration-file-location" >}}).
-
-1. Locate the [feature_toggles]({{< relref "../setup-grafana/configure-grafana/#feature_toggles" >}}) section.
-
-1. Add the following parameter to the `feature_toggles` section:
-
- ```
- [feature_toggles]
- # enable features, separated by spaces
- enable = panelTitleSearch
- ```
-
-1. Save your changes and restart the Grafana server.
-
-## Filter dashboard search results by tag(s)
-
-Tags are a great way to organize your dashboards, especially as the number of dashboards grow. You can add and manage tags in dashboard `Settings`.
-
-When you select multiple tags, Grafana shows dashboards that include all selected tags.
-
-To filter dashboard search result by a tag, complete one of the following steps:
-
-- To filter dashboard search results by tag, click a tag that appears in the right column of the search results.
-
- You can continue filtering by clicking additional tags.
-
-- To see a list of all available tags, click the **Filter by tags** dropdown menu and select a tag.
-
- All tags will be shown, and when you select a tag, the dashboard search will be instantly filtered.
-
-{{% admonition type="note" %}}
-When using only a keyboard, press the `tab` key and navigate to the **Filter by tag** drop-down menu, press the down arrow key `▼` to activate the menu and locate a tag, and press `Enter` to select the tag.
-{{% /admonition %}}
+Use the command palette to search all of Grafana and to initiate key actions from any page in the application.
## Command palette
-The command palette enables you to:
+The command palette allows you to:
- Search for and open dashboards and folders
- Create dashboards and alert rules
- Locate pages within Grafana
- Change the theme to dark or light
+- Run Sift investigations

To open the command palette, press `cmd+K` in macOS or `ctrl+k` in Linux/Windows. You can also click on the input located in the navigation bar.
-> **Note:** To go to the previous step, press `backspace` with the command palette input empty.
+{{< admonition type="note">}}
+To go to the previous step, press `backspace` with the command palette input empty.
+{{< /admonition >}}
diff --git a/docs/sources/setup-grafana/configure-grafana/_index.md b/docs/sources/setup-grafana/configure-grafana/_index.md
index 505b3b141a5..8e74e21186f 100644
--- a/docs/sources/setup-grafana/configure-grafana/_index.md
+++ b/docs/sources/setup-grafana/configure-grafana/_index.md
@@ -2613,8 +2613,8 @@ Format: ` = `
## [public_dashboards]
-This section configures the [public dashboards]({{< relref "../../dashboards/dashboard-public" >}}) feature.
+This section configures the [shared dashboards](https://grafana.com/docs/grafana//dashboards/share-dashboards-panels/shared-dashboards/) feature.
### enabled
-Set this to `false` to disable the public dashboards feature. This prevents users from creating new public dashboards and disables existing ones.
+Set this to `false` to disable the shared dashboards feature. This prevents users from creating new shared dashboards and disables existing ones.
diff --git a/docs/sources/setup-grafana/configure-grafana/configure-custom-branding/index.md b/docs/sources/setup-grafana/configure-grafana/configure-custom-branding/index.md
index f38a142e429..4d39ca9b09e 100644
--- a/docs/sources/setup-grafana/configure-grafana/configure-custom-branding/index.md
+++ b/docs/sources/setup-grafana/configure-grafana/configure-custom-branding/index.md
@@ -112,22 +112,22 @@ The following two links are always present in the footer:
If you specify `footer_links` or `GF_WHITE_LABELING_FOOTER_LINKS`, then all other default links are removed from the footer, and only what is specified is included.
-## Custom branding for public dashboards
+## Custom branding for shared dashboards
-In addition to the customizations described below, you can customize the footer of your public dashboards.
-To customize the footer of a public dashboard, add the following section to the `grafana.ini` file.
+In addition to the customizations described below, you can customize the footer of your shared dashboards.
+To customize the footer of a shared dashboard, add the following section to the `grafana.ini` file.
```ini
[white_labeling.public_dashboards]
-# Hides the footer for the public dashboards if set to `true`.
+# Hides the footer for the shared dashboards if set to `true`.
# example: footer_hide = "true"
;footer_hide =
# Set to text shown in the footer
;footer_text =
-# Set to complete url to override public dashboard footer logo. Default is `grafana-logo` and will display the Grafana logo.
+# Set to complete url to override shared dashboard footer logo. Default is `grafana-logo` and will display the Grafana logo.
# An empty value will hide the footer logo.
;footer_logo =
diff --git a/docs/sources/setup-grafana/configure-grafana/feature-toggles/index.md b/docs/sources/setup-grafana/configure-grafana/feature-toggles/index.md
index 3102a626929..39ab938fb28 100644
--- a/docs/sources/setup-grafana/configure-grafana/feature-toggles/index.md
+++ b/docs/sources/setup-grafana/configure-grafana/feature-toggles/index.md
@@ -191,7 +191,6 @@ Experimental features might be changed or removed without prior notice.
| `alertingCentralAlertHistory` | Enables the new central alert history. |
| `pinNavItems` | Enables pinning of nav items |
| `failWrongDSUID` | Throws an error if a datasource has an invalid UIDs |
-| `databaseReadReplica` | Use a read replica for some database queries. |
| `alertingApiServer` | Register Alerting APIs with the K8s API server |
| `dashboardRestoreUI` | Enables the frontend to be able to restore a recently deleted dashboard |
| `dataplaneAggregator` | Enable grafana dataplane aggregator |
@@ -201,7 +200,10 @@ Experimental features might be changed or removed without prior notice.
| `exploreLogsShardSplitting` | Used in Explore Logs to split queries into multiple queries based on the number of shards |
| `exploreLogsAggregatedMetrics` | Used in Explore Logs to query by aggregated metrics |
| `exploreLogsLimitedTimeRange` | Used in Explore Logs to limit the time range |
+| `homeSetupGuide` | Used in Home for users who want to return to the onboarding flow or quickly find popular config pages |
| `appSidecar` | Enable the app sidecar feature that allows rendering 2 apps at the same time |
+| `alertingQueryAndExpressionsStepMode` | Enables step mode for alerting queries and expressions |
+| `rolePickerDrawer` | Enables the new role picker drawer design |
## Development feature toggles
diff --git a/docs/sources/setup-grafana/configure-security/configure-authentication/jwt/index.md b/docs/sources/setup-grafana/configure-security/configure-authentication/jwt/index.md
index eecb143e524..c8ed2b24a89 100644
--- a/docs/sources/setup-grafana/configure-security/configure-authentication/jwt/index.md
+++ b/docs/sources/setup-grafana/configure-security/configure-authentication/jwt/index.md
@@ -94,7 +94,7 @@ you can use JWT authentication to authenticate the iframe.
{{% admonition type="note" %}}
For Grafana Cloud, or scenarios where verifying viewer identity is not required,
-embed [public dashboards]({{< relref "../../../../dashboards/dashboard-public" >}}).
+embed [shared dashboards](https://grafana.com/docs/grafana//dashboards/share-dashboards-panels/shared-dashboards/).
{{% /admonition %}}
In this scenario, you will need to configure Grafana to accept a JWT
diff --git a/docs/sources/setup-grafana/image-rendering/_index.md b/docs/sources/setup-grafana/image-rendering/_index.md
index ed04d5cc64e..47a74351af8 100644
--- a/docs/sources/setup-grafana/image-rendering/_index.md
+++ b/docs/sources/setup-grafana/image-rendering/_index.md
@@ -26,7 +26,7 @@ While an image is being rendered, the PNG image is temporarily written to the fi
A background job runs every 10 minutes and removes temporary images. You can configure how long an image should be stored before being removed by configuring the [temp_data_lifetime]({{< relref "../configure-grafana#temp_data_lifetime" >}}) setting.
-You can also render a PNG by hovering over the panel to display the actions menu in the top right corner, and then clicking **Share > Direct link rendered image** in the Link tab.
+You can also render a PNG by hovering over the panel to display the actions menu in the top-right corner, and then clicking **Share > Share link**. The **Render image** option is displayed in the link settings.
## Alerting and render limits
@@ -82,8 +82,10 @@ AUTH_TOKEN=-
```json
{
- "security": {
- "authToken": "-"
+ "service": {
+ "security": {
+ "authToken": "-"
+ }
}
}
```
diff --git a/docs/sources/shared/visualizations/thresholds-options-2.md b/docs/sources/shared/visualizations/thresholds-options-2.md
index d2ea9c2a44a..f6defc3928e 100644
--- a/docs/sources/shared/visualizations/thresholds-options-2.md
+++ b/docs/sources/shared/visualizations/thresholds-options-2.md
@@ -8,11 +8,11 @@ comments: |
A threshold is a value or limit you set for a metric that’s reflected visually when it’s met or exceeded. Thresholds are one way you can conditionally style and color your visualizations based on query results.
-Set the following options:
+For each threshold, set the following options:
-- **Value** - Set the value for each threshold.
-- **Thresholds mode** - Choose from:
- - **Absolute**
- - **Percentage**
+| Option | Description |
+| --------------- | -------------------------------------------- |
+| Value | Set the value for each threshold. |
+| Thresholds mode | Choose from **Absolute** and **Percentage**. |
To learn more, refer to [Configure thresholds](../../configure-thresholds/).
diff --git a/docs/sources/whatsnew/whats-new-in-v10-0.md b/docs/sources/whatsnew/whats-new-in-v10-0.md
index df622eac402..9d5b08c7c44 100644
--- a/docs/sources/whatsnew/whats-new-in-v10-0.md
+++ b/docs/sources/whatsnew/whats-new-in-v10-0.md
@@ -225,7 +225,7 @@ With this update, we've made the following improvements:
To try it out, enable the `publicDashboards` feature toggle. If you’re using Grafana Cloud, and would like to enable this feature, please contact customer support.
-To learn more, refer to our [public dashboards documentation]({{< relref "../dashboards/dashboard-public" >}}).
+To learn more, refer to our [public dashboards documentation](https://grafana.com/docs/grafana//dashboards/share-dashboards-panels/shared-dashboards/).
### Public dashboards insights
@@ -255,7 +255,7 @@ This feature will have a cost by active users after being promoted into general
{{% /admonition %}}
-To learn more, refer to our [public dashboards documentation]({{< relref "../dashboards/dashboard-public" >}}).
+To learn more, refer to our [public dashboards documentation](https://grafana.com/docs/grafana//dashboards/share-dashboards-panels/shared-dashboards/).
## Authentication and authorization
diff --git a/docs/sources/whatsnew/whats-new-in-v10-2.md b/docs/sources/whatsnew/whats-new-in-v10-2.md
index 1db3a3d2505..3b0425ec2bb 100644
--- a/docs/sources/whatsnew/whats-new-in-v10-2.md
+++ b/docs/sources/whatsnew/whats-new-in-v10-2.md
@@ -46,7 +46,7 @@ Learn how to upload images here: https://grafana.com/docs/writers-toolkit/write/
_Generally available in all editions of Grafana_
-Public dashboards allow you to share your visualizations and insights with a broader audience without the requirement of a login. You can effortlessly use our current sharing model and create a public dashboard URL to share with anyone using the generated public URL link. To learn more, refer to the [Public dashboards documentation](https://grafana.com/docs/grafana//dashboards/dashboard-public/), as well as the following video demo:
+Public dashboards allow you to share your visualizations and insights with a broader audience without the requirement of a login. You can effortlessly use our current sharing model and create a public dashboard URL to share with anyone using the generated public URL link. To learn more, refer to the [Public dashboards documentation](https://grafana.com/docs/grafana//dashboards/share-dashboards-panels/shared-dashboards), as well as the following video demo:
{{< youtube id="XHwwRCdxHMg?rel=0" >}}
diff --git a/docs/sources/whatsnew/whats-new-in-v11-0.md b/docs/sources/whatsnew/whats-new-in-v11-0.md
index 024e7a44c69..361d52a37ae 100644
--- a/docs/sources/whatsnew/whats-new-in-v11-0.md
+++ b/docs/sources/whatsnew/whats-new-in-v11-0.md
@@ -384,7 +384,7 @@ To learn more about Grafana's strong password policy, refer to the [documentatio
_Generally available in Grafana Enterprise_
-We are announcing a license change to the anonymous access feature in Grafana 11. As you may already be aware, anonymous access allows users access to Grafana without login credentials. Anonymous access was an early feature of Grafana to share dashboards; however, we recently introduced [Public Dashboards](https://grafana.com/docs/grafana//dashboards/dashboard-public/) which allows you to share dashboards in a more secure manner. We also noticed that anonymous access inadvertently resulted in user licensing issues. After careful consideration, we have decided to charge for the continued use of anonymous access starting in Grafana 11.
+We are announcing a license change to the anonymous access feature in Grafana 11. As you may already be aware, anonymous access allows users access to Grafana without login credentials. Anonymous access was an early feature of Grafana to share dashboards; however, we recently introduced [Public Dashboards](https://grafana.com/docs/grafana//dashboards/share-dashboards-panels/shared-dashboards) which allows you to share dashboards in a more secure manner. We also noticed that anonymous access inadvertently resulted in user licensing issues. After careful consideration, we have decided to charge for the continued use of anonymous access starting in Grafana 11.
**Affected Grafana versions**
diff --git a/docs/sources/whatsnew/whats-new-in-v9-1.md b/docs/sources/whatsnew/whats-new-in-v9-1.md
index cab0a2696d4..7a6aeb9f44a 100644
--- a/docs/sources/whatsnew/whats-new-in-v9-1.md
+++ b/docs/sources/whatsnew/whats-new-in-v9-1.md
@@ -50,7 +50,7 @@ You can now easily embed Grafana in other applications by adding a JWT token dir
When the JWT token is passed through the request URL to Grafana, Grafana validates and authenticates the token linked to a specific user, allowing access to dashboards which that user can view.
To see JWT URL embedding in action, see the [sample project](https://github.com/grafana/grafana-iframe-oauth-sample).
-> **Note:** JWT URL Embedding and `allow_embedding` are not available to Grafana Cloud users. For Grafana Cloud, use the [Public Dashboards]({{< relref "../dashboards/dashboard-public" >}}) feature. To enable that, [open a ticket with our Support team](/docs/grafana-cloud/account-management/support/).
+> **Note:** JWT URL Embedding and `allow_embedding` are not available to Grafana Cloud users. For Grafana Cloud, use [public dashboards](https://grafana.com/docs/grafana//dashboards/share-dashboards-panels/shared-dashboards/). To enable that, [open a ticket with our Support team](/docs/grafana-cloud/account-management/support/).
{{< figure src="/static/img/docs/dashboards/jwt-url-embedding-9-1.png" max-width="750px" caption="A JWT token used to embed Grafana" >}}
@@ -156,7 +156,7 @@ The public view of a dashboard has a few restrictions:
- The public dashboard is displayed in a read-only kiosk view.
- The time range is fixed to the dashboard default time range.
-To learn more, see the [documentation]({{< relref "../dashboards/dashboard-public" >}}).
+To learn more, see the [documentation](https://grafana.com/docs/grafana//dashboards/share-dashboards-panels/shared-dashboards/).
#### Provisioning improvements for Grafana Alerting
diff --git a/docs/sources/whatsnew/whats-new-in-v9-2.md b/docs/sources/whatsnew/whats-new-in-v9-2.md
index 4deeb3a386a..deb8c3f836d 100644
--- a/docs/sources/whatsnew/whats-new-in-v9-2.md
+++ b/docs/sources/whatsnew/whats-new-in-v9-2.md
@@ -95,7 +95,7 @@ External alertmanagers should now be configured as data sources using Grafana Co
_Available in Experimental in Grafana Open Source, Enterprise, and Cloud._
_To enable public dashboards, you must enable a feature flag or request this feature from support._
-[Public dashboards](/docs/grafana/latest/dashboards/dashboard-public/) launched as an experimental feature in Grafana v9.1.
+[Public dashboards](https://grafana.com/docs/grafana//dashboards/share-dashboards-panels/shared-dashboards) launched as an experimental feature in Grafana v9.1.
We've received lots of great feedback on this much-anticipated feature and thank everyone who has helped us improve it.
The team has been hard at work polishing public dashboards, and we've closed quite a few bugs related to community reports.
If you're trying out public dashboards, let us know how it is going in the [open discussion in GitHub](https://github.com/grafana/grafana/discussions/49253).
diff --git a/docs/sources/whatsnew/whats-new-in-v9-3.md b/docs/sources/whatsnew/whats-new-in-v9-3.md
index f780b4890af..929381d679b 100644
--- a/docs/sources/whatsnew/whats-new-in-v9-3.md
+++ b/docs/sources/whatsnew/whats-new-in-v9-3.md
@@ -87,7 +87,7 @@ Annotations are now supported in public dashboards, with the exception of query
Note that because Public Dashboards is an experimental feature, you need to enable it in Grafana using the `publicDashboards` [feature toggle]({{< relref "../setup-grafana/configure-grafana#feature_toggles" >}}), or open a support ticket requesting public dashboards if you are a Cloud Advanced customer.
-To learn more about public dashboards, refer to [Public dashboards]({{< relref "../dashboards/dashboard-public" >}}).
+To learn more about public dashboards, refer to [Public dashboards](https://grafana.com/docs/grafana//dashboards/share-dashboards-panels/shared-dashboards/).
## New transformation: Partition by values
diff --git a/e2e/various-suite/prometheus-editor.spec.ts b/e2e/various-suite/prometheus-editor.spec.ts
index a35ca282e50..d04d502a706 100644
--- a/e2e/various-suite/prometheus-editor.spec.ts
+++ b/e2e/various-suite/prometheus-editor.spec.ts
@@ -1,5 +1,3 @@
-import { selectors } from '@grafana/e2e-selectors';
-
import { e2e } from '../utils';
import { getResources } from './helpers/prometheus-helpers';
@@ -67,9 +65,9 @@ describe('Prometheus query editor', () => {
// check options
e2e.components.DataSource.Prometheus.queryEditor.legend().scrollIntoView().should('exist');
e2e.components.DataSource.Prometheus.queryEditor.format().scrollIntoView().should('exist');
- cy.get(`#${selectors.components.DataSource.Prometheus.queryEditor.step}`).scrollIntoView().should('exist');
+ cy.get(`[data-test-id="prometheus-step"]`).scrollIntoView().should('exist');
e2e.components.DataSource.Prometheus.queryEditor.type().scrollIntoView().should('exist');
- cy.get(`#${selectors.components.DataSource.Prometheus.queryEditor.exemplars}`).scrollIntoView().should('exist');
+ cy.get(`[data-test-id="prometheus-exemplars"]`).scrollIntoView().should('exist');
});
describe('Code editor', () => {
diff --git a/go.mod b/go.mod
index 0e5c352c4ba..3d55ba923c1 100644
--- a/go.mod
+++ b/go.mod
@@ -73,7 +73,7 @@ require (
github.com/googleapis/gax-go/v2 v2.13.0 // @grafana/grafana-backend-group
github.com/gorilla/mux v1.8.1 // @grafana/grafana-backend-group
github.com/gorilla/websocket v1.5.0 // @grafana/grafana-app-platform-squad
- github.com/grafana/alerting v0.0.0-20240917171353-6c25eb6eff10 // @grafana/alerting-backend
+ github.com/grafana/alerting v0.0.0-20240926144415-27f4e81b4b6b // @grafana/alerting-backend
github.com/grafana/authlib v0.0.0-20240919120951-58259833c564 // @grafana/identity-access-team
github.com/grafana/authlib/claims v0.0.0-20240827210201-19d5347dd8dd // @grafana/identity-access-team
github.com/grafana/codejen v0.0.3 // @grafana/dataviz-squad
diff --git a/go.sum b/go.sum
index a375eb9ad37..143299e44c6 100644
--- a/go.sum
+++ b/go.sum
@@ -2256,8 +2256,8 @@ github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
-github.com/grafana/alerting v0.0.0-20240917171353-6c25eb6eff10 h1:oDbLKM34O+JUF9EQFS+9aYhdYoeNfUpXqNjFCLIxwF4=
-github.com/grafana/alerting v0.0.0-20240917171353-6c25eb6eff10/go.mod h1:GMLi6d09Xqo96fCVUjNk//rcjP5NKEdjOzfWIffD5r4=
+github.com/grafana/alerting v0.0.0-20240926144415-27f4e81b4b6b h1:UO4mv94pG1kzKCgBKh20TXdACBCAK2vYjV3Q2MlcpEQ=
+github.com/grafana/alerting v0.0.0-20240926144415-27f4e81b4b6b/go.mod h1:GMLi6d09Xqo96fCVUjNk//rcjP5NKEdjOzfWIffD5r4=
github.com/grafana/authlib v0.0.0-20240919120951-58259833c564 h1:zYF/RBulpvMqPYR3gbzJZ8t/j/Eymn5FNidSYkueNCA=
github.com/grafana/authlib v0.0.0-20240919120951-58259833c564/go.mod h1:PFzXbCrn0GIpN4KwT6NP1l5Z1CPLfmKHnYx8rZzQcyY=
github.com/grafana/authlib/claims v0.0.0-20240827210201-19d5347dd8dd h1:sIlR7n38/MnZvX2qxDEszywXdI5soCwQ78aTDSARvus=
diff --git a/go.work.sum b/go.work.sum
index 39980fec8f0..ca6f13d695d 100644
--- a/go.work.sum
+++ b/go.work.sum
@@ -561,6 +561,8 @@ github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv
github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
github.com/grafana/alerting v0.0.0-20240830172655-aa466962ea18 h1:3cQ+d+fkNL2EqpARaBVG34KlVz7flDujYfDx3njvdh8=
github.com/grafana/alerting v0.0.0-20240830172655-aa466962ea18/go.mod h1:GMLi6d09Xqo96fCVUjNk//rcjP5NKEdjOzfWIffD5r4=
+github.com/grafana/alerting v0.0.0-20240917171353-6c25eb6eff10 h1:oDbLKM34O+JUF9EQFS+9aYhdYoeNfUpXqNjFCLIxwF4=
+github.com/grafana/alerting v0.0.0-20240917171353-6c25eb6eff10/go.mod h1:GMLi6d09Xqo96fCVUjNk//rcjP5NKEdjOzfWIffD5r4=
github.com/grafana/gomemcache v0.0.0-20240229205252-cd6a66d6fb56/go.mod h1:PGk3RjYHpxMM8HFPhKKo+vve3DdlPUELZLSDEFehPuU=
github.com/grafana/pyroscope-go/godeltaprof v0.1.6/go.mod h1:Tk376Nbldo4Cha9RgiU7ik8WKFkNpfds98aUzS8omLE=
github.com/grafana/thema v0.0.0-20230511182720-3146087fcc26 h1:HX927q4X1n451pnGb8U0wq74i8PCzuxVjzv7TyD10kc=
diff --git a/package.json b/package.json
index 6a8e3ecbebc..e2b7a7751f6 100644
--- a/package.json
+++ b/package.json
@@ -79,7 +79,7 @@
"@emotion/eslint-plugin": "11.11.0",
"@grafana/eslint-config": "7.0.0",
"@grafana/eslint-plugin": "link:./packages/grafana-eslint-rules",
- "@grafana/plugin-e2e": "1.8.0",
+ "@grafana/plugin-e2e": "1.8.1",
"@grafana/tsconfig": "^2.0.0",
"@manypkg/get-packages": "^2.2.0",
"@playwright/test": "1.47.2",
@@ -116,13 +116,13 @@
"@types/history": "4.7.11",
"@types/ini": "^4",
"@types/jest": "29.5.13",
- "@types/jquery": "3.5.30",
+ "@types/jquery": "3.5.31",
"@types/js-yaml": "^4.0.5",
"@types/jsurl": "^1.2.28",
"@types/lodash": "4.17.9",
"@types/logfmt": "^1.2.3",
"@types/lucene": "^2",
- "@types/node": "20.16.6",
+ "@types/node": "20.16.9",
"@types/node-forge": "^1",
"@types/ol-ext": "npm:@siedlerchr/types-ol-ext@3.2.4",
"@types/pluralize": "^0.0.33",
@@ -156,7 +156,7 @@
"@typescript-eslint/eslint-plugin": "6.21.0",
"@typescript-eslint/parser": "6.21.0",
"autoprefixer": "10.4.20",
- "babel-loader": "9.1.3",
+ "babel-loader": "9.2.1",
"blob-polyfill": "9.0.20240710",
"browserslist": "^4.21.4",
"chance": "^1.0.10",
@@ -222,7 +222,7 @@
"redux-mock-store": "1.5.4",
"rimraf": "6.0.1",
"rudder-sdk-js": "2.48.18",
- "sass": "1.78.0",
+ "sass": "1.79.3",
"sass-loader": "14.2.1",
"smtp-tester": "^2.1.0",
"style-loader": "4.0.0",
@@ -234,7 +234,7 @@
"ts-jest": "29.2.5",
"ts-node": "10.9.2",
"typescript": "5.5.4",
- "webpack": "5.94.0",
+ "webpack": "5.95.0",
"webpack-assets-manifest": "^5.1.0",
"webpack-bundle-analyzer": "4.10.2",
"webpack-cli": "5.1.4",
@@ -268,7 +268,7 @@
"@grafana/prometheus": "workspace:*",
"@grafana/runtime": "workspace:*",
"@grafana/saga-icons": "workspace:*",
- "@grafana/scenes": "5.14.7",
+ "@grafana/scenes": "5.16.0",
"@grafana/schema": "workspace:*",
"@grafana/sql": "workspace:*",
"@grafana/ui": "workspace:*",
@@ -357,7 +357,7 @@
"rc-slider": "11.1.6",
"rc-time-picker": "3.7.3",
"rc-tree": "5.9.0",
- "re-resizable": "6.9.18",
+ "re-resizable": "6.10.0",
"react": "18.2.0",
"react-diff-viewer": "^3.1.1",
"react-dom": "18.2.0",
@@ -368,7 +368,7 @@
"react-hook-form": "^7.49.2",
"react-i18next": "^14.0.0",
"react-inlinesvg": "3.0.2",
- "react-loading-skeleton": "3.4.0",
+ "react-loading-skeleton": "3.5.0",
"react-moveable": "0.56.0",
"react-redux": "9.1.2",
"react-resizable": "3.0.5",
diff --git a/packages/grafana-data/package.json b/packages/grafana-data/package.json
index c71f738a903..45378752c73 100644
--- a/packages/grafana-data/package.json
+++ b/packages/grafana-data/package.json
@@ -62,11 +62,11 @@
},
"devDependencies": {
"@grafana/tsconfig": "^2.0.0",
- "@rollup/plugin-node-resolve": "15.2.4",
+ "@rollup/plugin-node-resolve": "15.3.0",
"@types/dompurify": "^3.0.0",
"@types/history": "4.7.11",
"@types/lodash": "4.17.9",
- "@types/node": "20.16.6",
+ "@types/node": "20.16.9",
"@types/papaparse": "5.3.14",
"@types/react": "18.3.3",
"@types/react-dom": "18.2.25",
diff --git a/packages/grafana-data/src/transformations/fieldReducer.test.ts b/packages/grafana-data/src/transformations/fieldReducer.test.ts
index baa5d704911..120a416d81a 100644
--- a/packages/grafana-data/src/transformations/fieldReducer.test.ts
+++ b/packages/grafana-data/src/transformations/fieldReducer.test.ts
@@ -55,13 +55,14 @@ describe('Stats Calculators', () => {
it('should calculate basic stats', () => {
const stats = reduceField({
field: basicTable.fields[0],
- reducers: [ReducerID.first, ReducerID.last, ReducerID.mean, ReducerID.count],
+ reducers: [ReducerID.first, ReducerID.last, ReducerID.mean, ReducerID.count, ReducerID.diffperc],
});
expect(stats.first).toEqual(10);
expect(stats.last).toEqual(20);
expect(stats.mean).toEqual(15);
expect(stats.count).toEqual(2);
+ expect(stats.diffperc).toEqual(100);
});
it('should handle undefined field data without crashing', () => {
diff --git a/packages/grafana-data/src/transformations/fieldReducer.ts b/packages/grafana-data/src/transformations/fieldReducer.ts
index a032619aeb3..a7d1f0c7242 100644
--- a/packages/grafana-data/src/transformations/fieldReducer.ts
+++ b/packages/grafana-data/src/transformations/fieldReducer.ts
@@ -582,7 +582,7 @@ export function doStandardCalcs(field: Field, ignoreNulls: boolean, nullAsZero:
}
if (isNumber(calcs.firstNotNull) && isNumber(calcs.diff)) {
- calcs.diffperc = calcs.diff / calcs.firstNotNull;
+ calcs.diffperc = (calcs.diff / calcs.firstNotNull) * 100;
}
return calcs;
}
diff --git a/packages/grafana-data/src/types/dataLink.ts b/packages/grafana-data/src/types/dataLink.ts
index 47cba535029..476f2441ed7 100644
--- a/packages/grafana-data/src/types/dataLink.ts
+++ b/packages/grafana-data/src/types/dataLink.ts
@@ -51,6 +51,10 @@ export interface DataLink {
internal?: InternalDataLink;
origin?: DataLinkConfigOrigin;
+ meta?: {
+ correlationData?: ExploreCorrelationHelperData;
+ transformations?: DataLinkTransformationConfig[];
+ };
}
/**
@@ -78,10 +82,6 @@ export interface InternalDataLink {
datasourceUid: string;
datasourceName: string; // used as a title if `DataLink.title` is empty
panelsState?: ExplorePanelsState;
- meta?: {
- correlationData?: ExploreCorrelationHelperData;
- };
- transformations?: DataLinkTransformationConfig[];
range?: TimeRange;
}
diff --git a/packages/grafana-data/src/types/featureToggles.gen.ts b/packages/grafana-data/src/types/featureToggles.gen.ts
index fe6aceaadec..7104c77c50e 100644
--- a/packages/grafana-data/src/types/featureToggles.gen.ts
+++ b/packages/grafana-data/src/types/featureToggles.gen.ts
@@ -193,7 +193,6 @@ export interface FeatureToggles {
openSearchBackendFlowEnabled?: boolean;
ssoSettingsLDAP?: boolean;
failWrongDSUID?: boolean;
- databaseReadReplica?: boolean;
zanzana?: boolean;
passScopeToDashboardApi?: boolean;
alertingApiServer?: boolean;
@@ -209,9 +208,12 @@ export interface FeatureToggles {
exploreLogsShardSplitting?: boolean;
exploreLogsAggregatedMetrics?: boolean;
exploreLogsLimitedTimeRange?: boolean;
+ homeSetupGuide?: boolean;
appPlatformAccessTokens?: boolean;
appSidecar?: boolean;
groupAttributeSync?: boolean;
+ alertingQueryAndExpressionsStepMode?: boolean;
improvedExternalSessionHandling?: boolean;
useSessionStorageForRedirection?: boolean;
+ rolePickerDrawer?: boolean;
}
diff --git a/packages/grafana-data/src/utils/dataLinks.ts b/packages/grafana-data/src/utils/dataLinks.ts
index 8c8084cee34..7f4a71f6aeb 100644
--- a/packages/grafana-data/src/utils/dataLinks.ts
+++ b/packages/grafana-data/src/utils/dataLinks.ts
@@ -40,11 +40,7 @@ export function mapInternalLinkToExplore(options: LinkToExploreOptions): LinkMod
const interpolatedQuery = interpolateObject(link.internal?.query, scopedVars, replaceVariables);
const interpolatedPanelsState = interpolateObject(link.internal?.panelsState, scopedVars, replaceVariables);
- const interpolatedCorrelationData = interpolateObject(
- link.internal?.meta?.correlationData,
- scopedVars,
- replaceVariables
- );
+ const interpolatedCorrelationData = interpolateObject(link.meta?.correlationData, scopedVars, replaceVariables);
const title = link.title ? link.title : internalLink.datasourceName;
return {
diff --git a/packages/grafana-e2e-selectors/package.json b/packages/grafana-e2e-selectors/package.json
index ccb6c46f1e5..022a12f9c4a 100644
--- a/packages/grafana-e2e-selectors/package.json
+++ b/packages/grafana-e2e-selectors/package.json
@@ -39,8 +39,8 @@
"postpack": "mv package.json.bak package.json"
},
"devDependencies": {
- "@rollup/plugin-node-resolve": "15.2.4",
- "@types/node": "20.16.6",
+ "@rollup/plugin-node-resolve": "15.3.0",
+ "@types/node": "20.16.9",
"esbuild": "0.24.0",
"rimraf": "6.0.1",
"rollup": "2.79.1",
diff --git a/packages/grafana-flamegraph/package.json b/packages/grafana-flamegraph/package.json
index 71e97d340a0..0849c031faf 100644
--- a/packages/grafana-flamegraph/package.json
+++ b/packages/grafana-flamegraph/package.json
@@ -60,7 +60,7 @@
"@babel/preset-env": "7.25.4",
"@babel/preset-react": "7.24.7",
"@grafana/tsconfig": "^2.0.0",
- "@rollup/plugin-node-resolve": "15.2.4",
+ "@rollup/plugin-node-resolve": "15.3.0",
"@testing-library/dom": "10.0.0",
"@testing-library/jest-dom": "^6.1.2",
"@testing-library/react": "15.0.2",
@@ -68,7 +68,7 @@
"@types/d3": "^7",
"@types/jest": "^29.5.4",
"@types/lodash": "4.17.9",
- "@types/node": "20.16.6",
+ "@types/node": "20.16.9",
"@types/react": "18.3.3",
"@types/react-virtualized-auto-sizer": "1.0.4",
"@types/tinycolor2": "1.4.6",
diff --git a/packages/grafana-icons/package.json b/packages/grafana-icons/package.json
index 639d00f6d22..056688c86d7 100644
--- a/packages/grafana-icons/package.json
+++ b/packages/grafana-icons/package.json
@@ -45,7 +45,7 @@
"@svgr/plugin-prettier": "^8.1.0",
"@svgr/plugin-svgo": "^8.1.0",
"@types/babel__core": "^7",
- "@types/node": "20.16.6",
+ "@types/node": "20.16.9",
"@types/react": "18.3.3",
"@types/react-dom": "18.2.25",
"esbuild": "0.24.0",
diff --git a/packages/grafana-o11y-ds-frontend/package.json b/packages/grafana-o11y-ds-frontend/package.json
index d5daba87c91..f6c5c6cb8ca 100644
--- a/packages/grafana-o11y-ds-frontend/package.json
+++ b/packages/grafana-o11y-ds-frontend/package.json
@@ -36,7 +36,7 @@
"@testing-library/react": "15.0.2",
"@testing-library/user-event": "14.5.2",
"@types/jest": "^29.5.4",
- "@types/node": "20.16.6",
+ "@types/node": "20.16.9",
"@types/react": "18.3.3",
"@types/systemjs": "6.15.1",
"@types/testing-library__jest-dom": "5.14.9",
diff --git a/packages/grafana-plugin-configs/package.json b/packages/grafana-plugin-configs/package.json
index 46e4e985bcb..fa204ae3c75 100644
--- a/packages/grafana-plugin-configs/package.json
+++ b/packages/grafana-plugin-configs/package.json
@@ -18,7 +18,7 @@
"replace-in-file-webpack-plugin": "1.0.6",
"swc-loader": "0.2.6",
"typescript": "5.5.4",
- "webpack": "5.94.0"
+ "webpack": "5.95.0"
},
"packageManager": "yarn@4.5.0"
}
diff --git a/packages/grafana-prometheus/package.json b/packages/grafana-prometheus/package.json
index 418e5140555..ad5afa4225b 100644
--- a/packages/grafana-prometheus/package.json
+++ b/packages/grafana-prometheus/package.json
@@ -40,7 +40,7 @@
"@floating-ui/react": "0.26.24",
"@grafana/data": "11.3.0-pre",
"@grafana/experimental": "1.8.0",
- "@grafana/faro-web-sdk": "1.10.0",
+ "@grafana/faro-web-sdk": "1.10.1",
"@grafana/runtime": "11.3.0-pre",
"@grafana/schema": "11.3.0-pre",
"@grafana/ui": "11.3.0-pre",
@@ -79,7 +79,7 @@
"@grafana/e2e-selectors": "11.3.0-pre",
"@grafana/tsconfig": "^2.0.0",
"@rollup/plugin-image": "3.0.3",
- "@rollup/plugin-node-resolve": "15.2.4",
+ "@rollup/plugin-node-resolve": "15.3.0",
"@swc/core": "1.4.2",
"@swc/helpers": "0.5.13",
"@testing-library/dom": "10.0.0",
@@ -90,9 +90,9 @@
"@types/debounce-promise": "3.1.9",
"@types/eslint": "8.56.10",
"@types/jest": "29.5.13",
- "@types/jquery": "3.5.30",
+ "@types/jquery": "3.5.31",
"@types/lodash": "4.17.9",
- "@types/node": "20.16.6",
+ "@types/node": "20.16.9",
"@types/pluralize": "^0.0.33",
"@types/prismjs": "1.26.4",
"@types/react": "18.3.3",
@@ -131,13 +131,13 @@
"rollup-plugin-dts": "^5.0.0",
"rollup-plugin-esbuild": "5.0.0",
"rollup-plugin-node-externals": "^5.0.0",
- "sass": "1.78.0",
+ "sass": "1.79.3",
"sass-loader": "14.2.1",
"style-loader": "4.0.0",
"testing-library-selector": "0.3.1",
"ts-node": "10.9.2",
"typescript": "5.5.4",
- "webpack": "5.94.0",
+ "webpack": "5.95.0",
"webpack-cli": "5.1.4"
},
"peerDependencies": {
diff --git a/packages/grafana-prometheus/src/datasource.ts b/packages/grafana-prometheus/src/datasource.ts
index f75aa985b1a..cb416fa8f0c 100644
--- a/packages/grafana-prometheus/src/datasource.ts
+++ b/packages/grafana-prometheus/src/datasource.ts
@@ -141,6 +141,7 @@ export class PrometheusDatasource
this.cache = new QueryCache({
getTargetSignature: this.getPrometheusTargetSignature.bind(this),
overlapString: instanceSettings.jsonData.incrementalQueryOverlapWindow ?? defaultPrometheusQueryOverlapWindow,
+ applyInterpolation: this.interpolateString.bind(this),
});
// This needs to be here and cannot be static because of how annotations typing affects casting of data source
diff --git a/packages/grafana-prometheus/src/querybuilder/components/PromQueryBuilderOptions.tsx b/packages/grafana-prometheus/src/querybuilder/components/PromQueryBuilderOptions.tsx
index 60c73709c68..d79bb1716e0 100644
--- a/packages/grafana-prometheus/src/querybuilder/components/PromQueryBuilderOptions.tsx
+++ b/packages/grafana-prometheus/src/querybuilder/components/PromQueryBuilderOptions.tsx
@@ -92,7 +92,7 @@ export const PromQueryBuilderOptions = React.memo(
minWidth={10}
onCommitChange={onChangeStep}
defaultValue={query.interval}
- id={selectors.components.DataSource.Prometheus.queryEditor.step}
+ data-test-id="prometheus-step"
/>
@@ -112,7 +112,7 @@ export const PromQueryBuilderOptions = React.memo(
)}
diff --git a/packages/grafana-prometheus/src/querycache/QueryCache.test.ts b/packages/grafana-prometheus/src/querycache/QueryCache.test.ts
index 8d6fd349a84..01cd25fd14f 100644
--- a/packages/grafana-prometheus/src/querycache/QueryCache.test.ts
+++ b/packages/grafana-prometheus/src/querycache/QueryCache.test.ts
@@ -6,7 +6,7 @@ import { DataFrame, DataQueryRequest, DateTime, dateTime, TimeRange } from '@gra
import { QueryEditorMode } from '../querybuilder/shared/types';
import { PromQuery } from '../types';
-import { CacheRequestInfo, QueryCache } from './QueryCache';
+import { CacheRequestInfo, findDatapointStep, QueryCache } from './QueryCache';
import { IncrementalStorageDataFrameScenarios, trimmedFirstPointInPromFrames } from './QueryCacheTestData';
// Will not interpolate vars!
@@ -559,3 +559,14 @@ describe('QueryCache: Prometheus', function () {
expect(cacheRequest.shouldCache).toBe(true);
});
});
+
+describe('findDataPointStep', () => {
+ it('should interpolate custom interval', () => {
+ const mockApplyInterpolation = jest.fn().mockImplementation(() => '1m');
+ const req = mockPromRequest();
+ req.targets[0].interval = '$interval';
+ const respFrames = trimmedFirstPointInPromFrames as unknown as DataFrame[];
+ findDatapointStep(req, respFrames, mockApplyInterpolation);
+ expect(mockApplyInterpolation).toBeCalledTimes(1);
+ });
+});
diff --git a/packages/grafana-prometheus/src/querycache/QueryCache.ts b/packages/grafana-prometheus/src/querycache/QueryCache.ts
index 9b9c308e022..9b06746b7cb 100644
--- a/packages/grafana-prometheus/src/querycache/QueryCache.ts
+++ b/packages/grafana-prometheus/src/querycache/QueryCache.ts
@@ -10,6 +10,7 @@ import {
isValidDuration,
parseDuration,
rangeUtil,
+ ScopedVars,
Table,
trimTable,
} from '@grafana/data';
@@ -23,10 +24,9 @@ type TargetIdent = string;
// query + template variables + interval + raw time range
// used for full target cache busting -> full range re-query
type TargetSig = string;
-
type TimestampMs = number;
-
type SupportedQueryTypes = PromQuery;
+type ApplyInterpolation = (str: string, scopedVars?: ScopedVars) => string;
// string matching requirements defined in durationutil.ts
export const defaultPrometheusQueryOverlapWindow = '10m';
@@ -59,12 +59,14 @@ export const getFieldIdent = (field: Field) => `${field.type}|${field.name}|${JS
export class QueryCache {
private overlapWindowMs: number;
private getTargetSignature: (request: DataQueryRequest, target: T) => string;
+ private applyInterpolation = (str: string, scopedVars?: ScopedVars) => str;
cache = new Map();
constructor(options: {
getTargetSignature: (request: DataQueryRequest, target: T) => string;
overlapString: string;
+ applyInterpolation?: ApplyInterpolation;
}) {
const unverifiedOverlap = options.overlapString;
if (isValidDuration(unverifiedOverlap)) {
@@ -76,6 +78,9 @@ export class QueryCache {
}
this.getTargetSignature = options.getTargetSignature;
+ if (options.applyInterpolation) {
+ this.applyInterpolation = options.applyInterpolation;
+ }
}
// can be used to change full range request to partial, split into multiple requests
@@ -221,7 +226,7 @@ export class QueryCache {
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
let table: Table = frame.fields.map((field) => field.values) as Table;
- const dataPointStep = findDatapointStep(request, respFrames);
+ const dataPointStep = findDatapointStep(request, respFrames, this.applyInterpolation);
// query interval is greater than request.intervalMs, use query interval to make sure we've always got one datapoint outside the panel viewport
let trimmed = trimTable(table, newFrom - dataPointStep, newTo);
@@ -260,7 +265,11 @@ export class QueryCache {
}
}
-function findDatapointStep(request: DataQueryRequest, respFrames: DataFrame[]): number {
+export function findDatapointStep(
+ request: DataQueryRequest,
+ respFrames: DataFrame[],
+ applyInterpolation: ApplyInterpolation
+): number {
// Prometheus specific logic below
if (request.targets[0].datasource?.type !== 'prometheus') {
return 0;
@@ -270,7 +279,7 @@ function findDatapointStep(request: DataQueryRequest, respFrames: Dat
let dataPointStep = request.intervalMs;
if (target?.interval) {
- const minStepMs = rangeUtil.intervalToMs(target.interval);
+ const minStepMs = rangeUtil.intervalToMs(applyInterpolation(target.interval));
if (minStepMs > request.intervalMs) {
dataPointStep = minStepMs;
}
diff --git a/packages/grafana-runtime/package.json b/packages/grafana-runtime/package.json
index 631c9128195..f773eb75175 100644
--- a/packages/grafana-runtime/package.json
+++ b/packages/grafana-runtime/package.json
@@ -49,7 +49,7 @@
},
"devDependencies": {
"@grafana/tsconfig": "^2.0.0",
- "@rollup/plugin-node-resolve": "15.2.4",
+ "@rollup/plugin-node-resolve": "15.3.0",
"@rollup/plugin-terser": "0.4.4",
"@testing-library/dom": "10.0.0",
"@testing-library/react": "15.0.2",
diff --git a/packages/grafana-schema/package.json b/packages/grafana-schema/package.json
index 1e5338c51b5..39c8d34ab20 100644
--- a/packages/grafana-schema/package.json
+++ b/packages/grafana-schema/package.json
@@ -37,7 +37,7 @@
},
"devDependencies": {
"@grafana/tsconfig": "^2.0.0",
- "@rollup/plugin-node-resolve": "15.2.4",
+ "@rollup/plugin-node-resolve": "15.3.0",
"esbuild": "0.24.0",
"glob": "^11.0.0",
"rimraf": "6.0.1",
diff --git a/packages/grafana-sql/package.json b/packages/grafana-sql/package.json
index 51c6ff2ad75..409e725d56e 100644
--- a/packages/grafana-sql/package.json
+++ b/packages/grafana-sql/package.json
@@ -42,7 +42,7 @@
"@testing-library/user-event": "14.5.2",
"@types/jest": "^29.5.4",
"@types/lodash": "4.17.9",
- "@types/node": "20.16.6",
+ "@types/node": "20.16.9",
"@types/react": "18.3.3",
"@types/react-dom": "18.2.25",
"@types/react-virtualized-auto-sizer": "1.0.4",
diff --git a/packages/grafana-ui/package.json b/packages/grafana-ui/package.json
index 0abc18b87d8..3c82160a6fc 100644
--- a/packages/grafana-ui/package.json
+++ b/packages/grafana-ui/package.json
@@ -63,7 +63,7 @@
"@react-aria/overlays": "3.23.2",
"@react-aria/utils": "3.25.2",
"@tanstack/react-virtual": "^3.5.1",
- "@types/jquery": "3.5.30",
+ "@types/jquery": "3.5.31",
"@types/lodash": "4.17.9",
"@types/react-table": "7.7.20",
"ansicolor": "1.1.100",
@@ -97,7 +97,7 @@
"react-hook-form": "^7.49.2",
"react-i18next": "^14.0.0",
"react-inlinesvg": "3.0.2",
- "react-loading-skeleton": "3.4.0",
+ "react-loading-skeleton": "3.5.0",
"react-router-dom-v5-compat": "^6.26.1",
"react-select": "5.8.1",
"react-table": "7.8.0",
@@ -117,7 +117,7 @@
"@babel/core": "7.25.2",
"@faker-js/faker": "^8.4.1",
"@grafana/tsconfig": "^2.0.0",
- "@rollup/plugin-node-resolve": "15.2.4",
+ "@rollup/plugin-node-resolve": "15.3.0",
"@storybook/addon-a11y": "^8.1.6",
"@storybook/addon-actions": "^8.1.6",
"@storybook/addon-docs": "^8.1.6",
@@ -145,7 +145,7 @@
"@types/is-hotkey": "0.1.10",
"@types/jest": "29.5.13",
"@types/mock-raf": "1.0.6",
- "@types/node": "20.16.6",
+ "@types/node": "20.16.9",
"@types/prismjs": "1.26.4",
"@types/react": "18.3.3",
"@types/react-color": "3.0.12",
@@ -185,7 +185,7 @@
"storybook-dark-mode": "^4.0.1",
"style-loader": "4.0.0",
"typescript": "5.5.4",
- "webpack": "5.94.0"
+ "webpack": "5.95.0"
},
"peerDependencies": {
"react": "^18.0.0",
diff --git a/packages/grafana-ui/src/components/BigValue/BigValue.test.tsx b/packages/grafana-ui/src/components/BigValue/BigValue.test.tsx
index ff682372578..e7819cd110d 100644
--- a/packages/grafana-ui/src/components/BigValue/BigValue.test.tsx
+++ b/packages/grafana-ui/src/components/BigValue/BigValue.test.tsx
@@ -41,7 +41,7 @@ describe('BigValue', () => {
/>
);
- expect(screen.getByText('50%')).toBeInTheDocument();
+ expect(screen.getByText('0.5%')).toBeInTheDocument();
});
it('should render without percent change', () => {
diff --git a/packages/grafana-ui/src/components/BigValue/PercentChange.tsx b/packages/grafana-ui/src/components/BigValue/PercentChange.tsx
index 24de61cbbc6..1e9c97a2ee2 100644
--- a/packages/grafana-ui/src/components/BigValue/PercentChange.tsx
+++ b/packages/grafana-ui/src/components/BigValue/PercentChange.tsx
@@ -27,6 +27,7 @@ export const PercentChange = ({ percentChange, styles }: Props) => {
);
};
+// percentChange is expected to be a value between 0-100
export const percentChangeString = (percentChange: number) => {
- return percentChange.toLocaleString(undefined, { style: 'percent', maximumSignificantDigits: 3 });
+ return (percentChange / 100).toLocaleString(undefined, { style: 'percent', maximumSignificantDigits: 3 });
};
diff --git a/packages/grafana-ui/src/components/Combobox/Combobox.tsx b/packages/grafana-ui/src/components/Combobox/Combobox.tsx
index cb8a5f7bbba..33eeed308eb 100644
--- a/packages/grafana-ui/src/components/Combobox/Combobox.tsx
+++ b/packages/grafana-ui/src/components/Combobox/Combobox.tsx
@@ -1,8 +1,7 @@
import { cx } from '@emotion/css';
-import { autoUpdate, flip, size, useFloating } from '@floating-ui/react';
import { useVirtualizer } from '@tanstack/react-virtual';
import { useCombobox } from 'downshift';
-import { SetStateAction, useCallback, useEffect, useId, useMemo, useRef, useState } from 'react';
+import { useCallback, useId, useMemo, useState } from 'react';
import { useStyles2 } from '../../themes';
import { t } from '../../utils/i18n';
@@ -10,6 +9,7 @@ import { Icon } from '../Icon/Icon';
import { Input, Props as InputProps } from '../Input/Input';
import { getComboboxStyles } from './getComboboxStyles';
+import { estimateSize, useComboboxFloat } from './useComboboxFloat';
export type ComboboxOption = {
label: string;
@@ -42,16 +42,6 @@ function itemFilter(inputValue: string) {
};
}
-function estimateSize() {
- return 45;
-}
-
-const MIN_HEIGHT = 400;
-// On every 100th index we will recalculate the width of the popover.
-const INDEX_WIDTH_CALCULATION = 100;
-// A multiplier guesstimate times the amount of characters. If any padding or image support etc. is added this will need to be updated.
-const WIDTH_MULTIPLIER = 7.3;
-
/**
* A performant Select replacement.
*
@@ -97,15 +87,10 @@ export const Combobox = ({
return null;
}, [selectedItemIndex, options, value]);
- const inputRef = useRef(null);
- const floatingRef = useRef(null);
-
const menuId = `downshift-${useId().replace(/:/g, '--')}-menu`;
const labelId = `downshift-${useId().replace(/:/g, '--')}-label`;
const styles = useStyles2(getComboboxStyles);
- const [popoverMaxWidth, setPopoverMaxWidth] = useState(undefined);
- const [popoverWidth, setPopoverWidth] = useState(undefined);
const virtualizerOptions = {
count: items.length,
@@ -167,38 +152,12 @@ export const Combobox = ({
}
},
});
+ const { inputRef, floatingRef, floatStyles } = useComboboxFloat(items, rowVirtualizer.range, isOpen);
const onBlur = useCallback(() => {
setInputValue(selectedItem?.label ?? value?.toString() ?? '');
}, [selectedItem, setInputValue, value]);
- // the order of middleware is important!
- const middleware = [
- flip({
- // see https://floating-ui.com/docs/flip#combining-with-shift
- crossAxis: true,
- boundary: document.body,
- }),
- size({
- apply({ availableWidth }) {
- setPopoverMaxWidth(availableWidth);
- },
- }),
- ];
- const elements = { reference: inputRef.current, floating: floatingRef.current };
- const { floatingStyles } = useFloating({
- strategy: 'fixed',
- open: isOpen,
- placement: 'bottom-start',
- middleware,
- elements,
- whileElementsMounted: autoUpdate,
- });
-
- const hasMinHeight = isOpen && rowVirtualizer.getTotalSize() >= MIN_HEIGHT;
-
- useDynamicWidth(items, rowVirtualizer.range, setPopoverWidth);
-
return (