

# Building dashboards
<a name="v12-dash-building-dashboards"></a>

****  
This documentation topic is designed for Grafana workspaces that support **Grafana version 12.x**.  
For Grafana workspaces that support Grafana version 10.x, see [Working in Grafana version 10](using-grafana-v10.md).  
For Grafana workspaces that support Grafana version 9.x, see [Working in Grafana version 9](using-grafana-v9.md).  
For Grafana workspaces that support Grafana version 8.x, see [Working in Grafana version 8](using-grafana-v8.md).

After you create a Grafana workspace and sign in, you can create dashboards and modify settings to suit your needs. A dashboard is made up of [panels with visualizations](v12-panels-viz.md). Each panel has a query associated with it, to pull data from one of your [Connect to data sources](AMG-data-sources.md).

You can create more interactive and dynamic dashboards by adding and using [variables](v12-dash-variables.md). Instead of hard-coding the server, application, or other names in your metric queries, you can use variables in their place.

**Topics**
+ [Creating dashboards](v12-dash-creating.md)
+ [Importing dashboards](v12-dash-importing.md)
+ [Exporting dashboards](v12-dash-exporting.md)
+ [Modifying dashboard settings](v12-dash-modify-settings.md)
+ [Dashboard URL variables](v12-dash-dashboard-url-variables.md)
+ [Managing library panels](v12-dash-manage-library-panels.md)
+ [Managing dashboard version history](v12-dash-manage-version-history.md)
+ [Managing dashboard links](v12-dash-manage-dashboard-links.md)
+ [Annotate visualizations](v12-dash-annotations.md)
+ [Dashboard JSON model](v12-dash-dashboard-json-model.md)
+ [Best practices for dashboards](v12-dash-bestpractices.md)

# Creating dashboards
<a name="v12-dash-creating"></a>

****  
This documentation topic is designed for Grafana workspaces that support **Grafana version 12.x**.  
For Grafana workspaces that support Grafana version 10.x, see [Working in Grafana version 10](using-grafana-v10.md).  
For Grafana workspaces that support Grafana version 9.x, see [Working in Grafana version 9](using-grafana-v9.md).  
For Grafana workspaces that support Grafana version 8.x, see [Working in Grafana version 8](using-grafana-v8.md).

**Creating a dashboard **

Dashboards and panels allow you to show your data in visual form using Grafana. Each panel needs at least one query to display a visualization. Before you get started, complete the following prerequisites.
+ Ensure that you have the proper permissions. For more information about permissions, see [Users, teams, and permissions](Grafana-administration-authorization.md).
+ Identify the dashboard to which you want to add the panel.
+ Understand the query language of the target data source.
+ Ensure that data source for which you are writing a query has been added. For more information, see [Connect to data sources](AMG-data-sources.md).

 To create a dashboard:

1. Sign into Grafana, and select **Dashboards** from the left menu.

1. Select **New**, then **New dashboard**.

1. On the empty dashboard, select **\$1 Add visualization**. This opens the new visualization dialog box.

1. Select a data source. You can choose an existing data source, one of Grafana's built in data sources for testing, or choose **Configure a new data source** to set up a new one (only users with Admin permissions can configure new data sources).

   The **Edit panel** view opens, with your data source selected. You can change the data source for the panel later, using the **Query** tab of the panel editor, if needed.

1. Write or construct a query in the query language of your data source. Choose the refresh dashboard icon to perform a query on the data source, seeing the results as you go.

1. In the **Visualization** list, select a visualization type. Grafana displays a preview of your query results with the visualization applied. For more information, see [Visualizations options](v12-panels-viz.md).

1. Under **Panel options**, you can enter a title and description for your panel. 

1. Most visualizations need some adjustment before they display the exact information that you need. You can adjust panel settings in the following ways.
   + [Configure value mappings](v12-panels-configure-value-mappings.md)
   + [Visualization-specific options](v12-panels-viz.md)
   + [Override field values](v12-panels-configure-overrides.md)
   + [Configure thresholds](v12-panels-configure-thresholds.md)
   + [Configure standard options](v12-panels-configure-standard-options.md)

1. When you've finished configuring your panel, choose **Save** to save the dashboard.

   Alternatively, select **Apply** to see changes without leaving the panel editor.

1. Add a note to describe the visualization (or describe your changes) and then click **Save** in the upper-right corner of the page.
**Note**  
Notes are helpful if you need to revert the dashboard to a previous version.

1. Choose **Save**.

1. Optionally, you can add more panels to the dashboard by choosing **Add** in the dashboard header, and selecting **Visualization** from the drop-down.

**Copying an existing dashboard**

You can quickly copy an existing dashboard, to jumpstart creating a new one.

**To copy an existing dashboard**

1. Select **Dashboards** from the left menu.

1. Choose the dashboard you want to copy, to open it.

1. Select **Settings** (gear icon) in the top right of the dashboard.

1. Select **Save as**in the top right corner of the dashboard.

1. (Optional) Specify the name, folder, description, and whether or not to copy the original dashboard tags for the copied dashboard.

1. Select **Save**.

**Configuring repeating rows**

You can configure Grafana to dynamically add panels or rows to a dashboard based on the value of a variable. Variables dynamically change your queries across all rows in a dashboard. For more information about repeating panels, see [Configure repeating panels]().

You can also repeat rows if you have variables set with `Multi-value` or `Include all values` selected.

Before you get started, ensure that the query includes a multi-value variable, then you should complete the following steps.

**To configure repeating rows**

1. Select **Dashboards** from the left menu, then choose the dashboard you want to modify.

1. At the top of the dashboard, select **Add**, and then select **Row** from the drop down.

   If the dashboard is empty, you can alternately select the **\$1 Add row** button in the middle of the dashboard.

1. Hover over the row title and select the **Settings** (gear) icon that appears.

1. On the **Row Options** dialog box, add a title and select the variable for which you want to add repeating rows.
**Note**  
 To provide context to dashboard users, add the variable to the row title. 

1. Select **Update**.

**Repeating rows and the Dashboard special data source**

If a row includes panels using the special [Dashboard](AMG-data-sources.md#AMG-data-sources-special) data source—the data source that uses a result set from another panel in the smae dashboard—then corresponding panels in repeated rows will reference the panel in the original row, not the ones in the repeated rows.

For example, in a dashboard:
+ `Row 1` includes `Panel 1A` and `Panel 1B`.
+ `Panel 1B` uses the results from `Panel 1A` by using the `Dashboard` data source.
+ Repeating `Row 2` includes `Panel 2A` and `Panel 2B`.
+ `Panel 2B` references `Panel 1A`, not `Panel 2A`.

**To move a panel**

1. Open the dashboard.

1. Select the panel title and drag the panel to the new location. You can place a panel on a dashboard in any location.

**To resize a panel**

1. Open the dashboard.

1. To adjust the size of the panel, drag the lower-right corner of the panel. You can size a dashboard panel to suits your needs.

# Importing dashboards
<a name="v12-dash-importing"></a>

****  
This documentation topic is designed for Grafana workspaces that support **Grafana version 12.x**.  
For Grafana workspaces that support Grafana version 10.x, see [Working in Grafana version 10](using-grafana-v10.md).  
For Grafana workspaces that support Grafana version 9.x, see [Working in Grafana version 9](using-grafana-v9.md).  
For Grafana workspaces that support Grafana version 8.x, see [Working in Grafana version 8](using-grafana-v8.md).

You can import preconfigured dashboards into your Amazon Managed Grafana workspace.

**To import a dashboard**

1. Sign into your Amazon Managed Grafana workspace.

1. Select **Dashboards** from the left menu.

1. Select **New** and choose **Import** in the drop down menu.

1. Next you need to choose the dashboard JSON definition to import. You have three choices for how to import JSON:
   + Upload a file containing dashboard JSON.
   + Directly copy JSON text into the text area.
   + Paste a Grafana Labs dashboard URL or ID into the field. For more information on grafana.com dashboard URLs, see the next section.
   + (Optional) Change any dashboard details that you wish to change.
   + Select a data source, if required.
   + Choose **Import**.
   + Save the dashboard.

## Finding dashboards on grafana.com
<a name="v12-dash-import-from-grafana"></a>

The [Dashboards](https://grafana.com/grafana/dashboards/) page on grafana.com provides you with dashboards for common server applications. Browse a library of official and community-built dashboards and import them to quickly get up and running.

**Note**  
To import dashboards from grafana.com, your Amazon Managed Grafana workspace must have access to the internet.

# Exporting dashboards
<a name="v12-dash-exporting"></a>

****  
This documentation topic is designed for Grafana workspaces that support **Grafana version 12.x**.  
For Grafana workspaces that support Grafana version 10.x, see [Working in Grafana version 10](using-grafana-v10.md).  
For Grafana workspaces that support Grafana version 9.x, see [Working in Grafana version 9](using-grafana-v9.md).  
For Grafana workspaces that support Grafana version 8.x, see [Working in Grafana version 8](using-grafana-v8.md).

You can use the Grafana UI or the HTTP API to export dashboards.

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.

**Making 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` will automatically be hidden in the dashboard, and will also be added as a required input when the dashboard is imported.

**To export a dashboard**

1. Open the dashboard that you want to export.

1. Select the share icon.

1. Choose **Export**.

1. Choose **Save to file.**

**Note**  
Grafana downloads a JSON file to your local machine. 

# Modifying dashboard settings
<a name="v12-dash-modify-settings"></a>

****  
This documentation topic is designed for Grafana workspaces that support **Grafana version 12.x**.  
For Grafana workspaces that support Grafana version 10.x, see [Working in Grafana version 10](using-grafana-v10.md).  
For Grafana workspaces that support Grafana version 9.x, see [Working in Grafana version 9](using-grafana-v9.md).  
For Grafana workspaces that support Grafana version 8.x, see [Working in Grafana version 8](using-grafana-v8.md).

The dashboard settings page enables you to:
+ Edit general dashboard properties, including time settings.
+ Add annotation queries.
+ Add dashboard variables.
+ Add links.
+ View the dashboard JSON model

**To access the dashboard setting page**

1. Open a dashboard in edit mode.

1. Click **Dashboard settings** (gear icon) located at the top of the page.

**Modifying dashboard time settings**

Adjust dashboard time settings when you want to change the dashboard timezone, the local browser time, and specify auto-refresh time intervals.

**To modify dashboard time settings**

1. On the **Dashboard** settings page, select **General**.

1. Navigate to the **Time Options** section.

1. Specify time settings according to the following descriptions.

1. 
   + **Timezone** – Specify the local time zone of the service or system that you are monitoring. This can be helpful when monitoring a system or service that operates across several time zones.
     + **Default** – Grafana uses the default selected time zone for the user profile, team, or organization. If no time zone is specified for the user profile, a team the user is a member of, or the organization, then Grafana uses the local browser time.
     + **Local browser time** – The time zone configured for the viewing user browser is used. This is usually the same time zone as set on the computer.
     + Use standard [ISO 8601 time zones](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones), including UTC.
   + **Auto-refresh** – Customize the options displayed for relative time and the auto-refresh options. Entries are comma separated and accept any valid time unit.
   + **Now delay** – Override the `now` time by entering a time delay. Use this option to accommodate known delays in data aggregation to avoid null values.
   + **Hide time picker** – Selecting this option if you do not want the dashboard to display the time picker.

**Note**  
To have time controls, your data must include a time column. See the documentation for your specific [data source](AMG-data-sources.md) for more information about including a time column.

**Adding an annotation query**

An annotation query is a query that queries for events. These events can be visualized in graphs across the dashboard as vertical lines along with a small icon you can hover over to see the event information.

**To add an annotation query**

1. On the **Dashboard settings** page, select **Annotations**.

1. Select **Add annotation query**. 

1. Enter a name and select a data source.

1. Complete the rest of the form to build a query and annotation.

The query editor UI changes based on the data source that you select. see the [Data source](AMG-data-sources.md) documentation for details on how to construct a query. Or, for data source plugins that you install from the [Find plugins with the plugin catalog](grafana-plugins.md#plugin-catalog), you can use the [documentation on the Grafana Labs website](https://grafana.com/docs/grafana/v10.3/datasources/).

**Adding a variable**

Variables enable you to create more interactive and dynamic dashboards. Instead of hard-coding things like server, application, and sensor names in your metric queries, you can use variables in their place. Variables are displayed as dropdown lists at the top of the dashboard. These dropdowns make it easy to change the data being displayed in your dashboard.

For more information about variables, see [Variables](v12-dash-variables.md).

**To add a variable**

1. On the **Dashboard settings** page, click **Variable** in the left side section menu and then the **Add variable** button.

1. In the **General** section, add the name of the variable. This is the name that you will later use in queries.

1. Select a variable **Type**.
**Note**  
The variable type that you select impacts which fields that you populate on the page.

1. Define the variable and click **Update**.

**Adding a link**

Dashboard links enable you to place links to other dashboards and websites directly below the dashboard header. Links provide for easy navigation to other, related dashboards and content. 

**To add a link**

1. On the **Dashboard settings** page, choose **Links** from the left side section menu and then the **Add link** button.

1. Enter a title and in the **Type** field, select **Dashboard** or **Link**.

1. To add a dashboard link, add an optional tag, select any of the dashboard link Options, and click **Apply**.
**Note**  
Using tags creates a dynamic dropdown of dashboards that all have a specific tag.

1. To add a web link, add a URL and tooltip text that appears when the user hovers over the link, select an icon that appears next to the link, and select any of the dashboard link options. 

**View dashboard JSON model **

A dashboard in Grafana is represented by a JSON object, which stores the metadata of a dashboard. Dashboard metadata includes dashboard properties, metadata from panels, template variables, panel queries, and so on. The JSON metadata defines the dashboard.

To view a dashboard JSON model, on the **Dashboard settings** page, click **JSON**.

For more information about the JSON fields, see [JSON fields](v12-dash-dashboard-json-model.md).

# Dashboard URL variables
<a name="v12-dash-dashboard-url-variables"></a>

****  
This documentation topic is designed for Grafana workspaces that support **Grafana version 12.x**.  
For Grafana workspaces that support Grafana version 10.x, see [Working in Grafana version 10](using-grafana-v10.md).  
For Grafana workspaces that support Grafana version 9.x, see [Working in Grafana version 9](using-grafana-v9.md).  
For Grafana workspaces that support Grafana version 8.x, see [Working in Grafana version 8](using-grafana-v8.md).

Grafana can apply variable values passed as query parameters in dashboard URLs. For more information, see [Manage dashboard links](v12-dash-manage-dashboard-links.md) and [Templates and variables](v12-dash-variables.md).

**Passing variables as query parameters**

Grafana interprets query string parameters prefixed with `var-` as variables in the given dashboard.

For example, in this URL: 

```
https://${your-domain}/path/to/your/dashboard?var-example=value
```

The query parameter `var-example=value` represents the dashboard variable example with a value of `value`.

**Passing multiple values for a variable**

To pass multiple values, repeat the variable parameter once for each value.

```
https://${your-domain}/path/to/your/dashboard?var-example=value1&var-example=value2
```

Grafana interprets `var-example=value1&var-example=value2` as the dashboard variable example with two values: `value1` and `value2`.

**Adding variables to dashboard links**

Grafana can add variables to dashboard links when you generate them from a dashboard’s settings. For more information and steps to add variables, see [Manage dashboard links](v12-dash-manage-dashboard-links.md).

**Passing ad hoc filters**

Ad hoc filters apply key or value filters to all metric queries that use a specified data source. For more information, see [Ad hoc filters](v12-dash-variable-add.md#v12-dash-variable-add-adhoc).

To pass an ad hoc filter as a query parameter, use the variable syntax to pass the ad hoc filter variable, and also provide the key, the operator as the value, and the value as a pipe-separated list.

For example, in this URL:

`https://${your-domain}/path/to/your/dashboard?var-adhoc=example_key|=|example_value` 

The query parameter `var-adhoc=key|=|value` applies the ad hoc filter configured as the adhoc dashboard variable using the `example_key` key, the `=` operator, and the `example_value` value.

**Note**  
When sharing URLs with ad hoc filters, remember to encode the URL. In the above example, replace the pipes (`|`) with `%7C` and the equality operator (`=`) with `%3D`.

**Controlling time range using the URL**

To set a dashboard’s time range, use the `from`, `to`, `time`, and `time.window` query parameters. Because these are not variables, they do not require the `var-` prefix.

# Managing library panels
<a name="v12-dash-manage-library-panels"></a>

****  
This documentation topic is designed for Grafana workspaces that support **Grafana version 12.x**.  
For Grafana workspaces that support Grafana version 10.x, see [Working in Grafana version 10](using-grafana-v10.md).  
For Grafana workspaces that support Grafana version 9.x, see [Working in Grafana version 9](using-grafana-v9.md).  
For Grafana workspaces that support Grafana version 8.x, see [Working in Grafana version 8](using-grafana-v8.md).

A library panel is a reusable panel that you can use in any dashboard. When you change a library panel, the change propagates to all instances of where the panel is used. Library panels streamline reuse of panels across multiple dashboards.

You can save a library panel in a folder alongside saved dashboards.

**Creating 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 after a panel is converted.

**To create a library panel**

1. Open the panel you want to convert to a library panel in edit mode.

1. In the panel display options, click the down arrow option to start changes to the visualization.

1. Select **Library panels**, and then **\$1 Create library panel**. This opens the create dialog.

1. In **Library panel name**, enter the name you want for the panel.

1. In **Save in folder**, select the folder to save the library panel.

1. Select **Create library panel** to save your changes to the library.

1. Save the dashboard.

After a library panel is created, you can modify the panel using any dashboard on which it appears. After you save the changes, all instances of the library panel reflect these modifications.

You can also create a library panel directly from the edit menu of any panel, by selecting **More...** then **Create library panel**.

**Adding a library panel to a dashboard**

Add a Grafana library panel to a dashboard when you want to provide visualizations to other dashboard users.

**To add a library panel to a dashboard**

1. Select **Dashboards** on the left menu.

1. Select **New**, and then choose **New dashboard** from the drop down.

1. On the empty dashboard, select **\$1 Import library panel**. You will see a list of your library panels.

1. Filter the list or search to find the panel you want to add.

1. Click a panel to add it to the dashboard.

**Unlinking a library panel**

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**

1. Select **Dashboards** on the left menu.

1. Select **Library panels**.

1. Select a library panel that is being used in different dashboards.

1. Select the panel that you want to unlink.

1. Select the panel title (or hover the pointer anywhere over the panel), to display the actions menu on the top right corner of the panel.

1. Select **Edit**. The panel will open in edit mode.

1. Select **Unlink** on the top right corner of the page.

1. Choose **Yes, unlink**.

**Viewing a list of library panels**

You can view a list of available library panels and search for a library panel.

**To view a list of library panels**

1. Select **Dashboards** on the left menu.

1. Select **Library panels**. You can see a list of previously defined library panels.

1. Search for a specific library panel if you know its name. You can also filter the panels by folder or type.

**Deleting a library panel**

Delete a library panel when you no longer need it.

**To delete a library panel**

1. Select **Dashboards** on the left menu.

1. Select **Library panels**.

1. Select the delete icon next to the library panel name for the panel you wish to delete.

# Managing dashboard version history
<a name="v12-dash-manage-version-history"></a>

****  
This documentation topic is designed for Grafana workspaces that support **Grafana version 12.x**.  
For Grafana workspaces that support Grafana version 10.x, see [Working in Grafana version 10](using-grafana-v10.md).  
For Grafana workspaces that support Grafana version 9.x, see [Working in Grafana version 9](using-grafana-v9.md).  
For Grafana workspaces that support Grafana version 8.x, see [Working in Grafana version 8](using-grafana-v8.md).

Whenever you save a version of your dashboard, a copy of that version is saved so that previous versions of your dashboard are not lost. A list of these versions is available by entering the dashboard settings and then selecting **Versions** in the left side menu.

**Note**  
The most recent 20 versions of a dashboard are saved.

The dashboard version history feature lets you compare and restore to previously saved dashboard versions.

**Comparing two dashboard versions**

To compare two dashboard versions, select the two versions from the list that you wish to compare. Click **Compare versions** to view the diff between the two versions. This brings up the version diff view. By default, you’ll see a textual summary of the changes.

If you want to view the diff of the raw JSON that represents your dashboard, you can do that by clicking the **View JSON Diff** button at the bottom.

**Restoring to a previously saved dashboard version**

If you need to restore to a previously saved dashboard version, you can either select the **Restore** button on the right of a row in the dashboard version list, or select the **Restore to version *<x>*** button in the diff view. Selecting either of these will prompt you to confirm the restoration.

After restoring to a previous version, a new version will be created containing the same exact data as the previous version, only with a different version number. This is indicated in the **Notes column** for the row in the new dashboard version. This ensures your previous dashboard versions are not affected by the change.

# Managing dashboard links
<a name="v12-dash-manage-dashboard-links"></a>

****  
This documentation topic is designed for Grafana workspaces that support **Grafana version 12.x**.  
For Grafana workspaces that support Grafana version 10.x, see [Working in Grafana version 10](using-grafana-v10.md).  
For Grafana workspaces that support Grafana version 9.x, see [Working in Grafana version 9](using-grafana-v9.md).  
For Grafana workspaces that support Grafana version 8.x, see [Working in Grafana version 8](using-grafana-v8.md).

You can use links to navigate between commonly used dashboards or to connect others to your visualizations. Links let you create shortcuts to other dashboards, panels, and even external websites.

Grafana supports dashboard links, panel links, and data links. Dashboard links are displayed at the top of the dashboard. Panel links are accessible by clicking an icon on the top left corner of the panel.

**Choosing which link to use**

Start by figuring out how you’re currently navigating between dashboards. If you’re often jumping between a set of dashboards and struggling to find the same context in each, links can help optimize your workflow.

The next step is to figure out which link type is right for your workflow. Even though all the link types in Grafana are used to create shortcuts to other dashboards or external websites, they work in different contexts.
+ If the link relates to most if not all of the panels in the dashboard, use dashboard links.
+ If you want to drill down into specific panels, use panel links.
+ If you want to link to an external site, you can use either a dashboard link or a panel link.
+ If you want to drill down into a specific series, or even a single measurement, use data links.

**Controlling the time range using a URL**

To control the time range of a panel or dashboard, you can provide query parameters in the dashboard URL:
+ `from` defines lower limit of the time range, specified in ms epoch.
+ `to` defines upper limit of the time range, specified in ms epoch.
+ `time` and `time.window` defines a time range from `time-time.window/2` to `time+time.window/2`. Both params should be specified in ms. For example `?time=1500000000000&time.window=10000` will result in 10s time range from 1499999995000 to 1500000005000.

**Dashboard links**

When you create a dashboard link, you can include the time range and current template variables to directly jump to the same context in another dashboard. This way, you don’t have to worry whether the person you send the link to is looking at the right data. For other types of links, see [Data link variables]().

Dashboard links can also be used as shortcuts to external systems, such as submitting a GitHub issue with the current dashboard name.

After adding a dashboard link, it will show up in the upper-right corner of your dashboard.

**Adding links to dashboards**

Add links to other dashboards at the top of your current dashboard.

**To add a link to a dashboard**

1. While viewing the dashboard you want to link, click the gear at the top of the screen to open **Dashboard settings**.

1. Select **Links** and then **Add Dashboard Link** or **New**.

1. In **Type**, select **dashboards**.

1. Select link options from the following.
   + **With tags** – Enter tags to limit the linked dashboards to only the ones with the tags you enter. Otherwise, Grafana includes links to all other dashboards.
   + **As dropdown** – If you are linking to many dashboards, By default, Grafana displays them all side-by-side across the top of your dashboard. Selecting this option and adding an optional title, will display the links in a dropdown.
   + **Time range** – Select this option to include the dashboard time range in the link. When the user clicks the link, the linked dashboard will open with the indicated time range already set.
   + **Variable values** – Select this option to include template variables currently used as query parameters in the link. When the user clicks the link, any matching templates in the linked dashboard are set to the values from the link. For more information, see [Dashboard URL variables](v12-dash-dashboard-url-variables.md).
   + **Open in new tab** – Select this option if you want the dashboard link to open in a new tab or window.

1. Click **Add**.

**Adding a URL link to a dashboard**

Add a link to a URL at the top of your current dashboard. You can link to any available URL, including dashboards, panels, or external sites. You can even control the time range to ensure the user is zoomed in on the right data in Grafana.

**To add a URL link to a dashboard**

1. While viewing the dashboard you want to link, select the gear at the top of the screen to open **Dashboard settings**.

1. Select **Links** and then **Add Dashboard Link** or **New**.

1. In **Type**, select **Link**.

1. Select link options from the following.
   + **URL** – Enter the URL you want to link to. Depending on the target, you might want to include field values.
   + **Title** – Enter the title you want the link to display.
   + **Tooltip** – Enter the tooltip you want the link to display.
   + **Icon** – Choose the icon that you want displayed with the link.
   + **Time range** – Select this option to include the dashboard time range in the link. When the user clicks the link, the linked dashboard will open with the indicated time range set.
     + `from` – Defines lower limit of the time range, specified in ms epoch.
     + `to` – Defines upper limit of the time range, specified in ms epoch.
     + `time` and `time.window` – Define a time range from `time-time.window/2` to `time+time.window/2`. Both params should be specified in ms. For example `?time=1500000000000&time.window=10000` will result in 10s time range from 1499999995000 to 1500000005000.
   + **Variable values** – Select this option to include template variables currently used as query parameters in the link. When the user clicks the link, any matching templates in the linked dashboard are set to the values from the link.

     The variable format is as follows:

     ```
     https://${you-domain}/path/to/your/dashboard?var-${template-varable1}=value1&var-{template-variable2}=value2
     ```
   + **Open in a new tab** – Select this option if you want the dashboard link to open in a new tab or window

1. Select **Add**.

**Updating a dashboard link**

To change or update an existing dashboard link, follow this procedure.

**To update a dashboard link**

1. In **Dashboard settings,** on the **Links** tab, select the existing link that you want to edit.

1. Change the settings and then choose **Update**.

**Duplicating a dashboard link**

To duplicate an existing dashboard link, select the duplicate icon next to the existing link that you want to duplicate.

**Deleting a dashboard link**

To delete an existing dashboard link, select the trash icon next to the link that you want to delete.

**Panel links**

Each panel can have its own set of links that are shown in the upper left corner of the panel. You can link to any available URL, including dashboards, panels, or external sites. You can even control the time range to ensure the user is zoomed in on the right data in Grafana.

To see available panel links, select the icon to the right of the panel title.
+ **Adding a panel link**: Each panel can have its own set of links that are shown in the upper left corner of the panel. You can link to any available URL, including dashboards, panels, or external sites. You can even control the time range to ensure the user is zoomed in on the right data in Grafana. Click the icon on the top left corner of a panel to see available panel links.

  1. Hover your cursor over the panel to which you want to add a link.

  1. Select the menu, and choose **Edit**, or you can use the keyboard shortcut, `e`.

  1. Expand the **Panel options** section, and scroll down to **Panel links**.

  1. Select **Add link**.

  1. Enter a **Title**. This is a human-readable label for the link that will be displayed in the UI.

  1. Enter the **URL** you want to link to. Press `Ctrl+Space` (or `Cmd+Space`) and select the URL field to see available variables. By adding template variables to your panel link, the link sends the user to the right context, with the relevant variables already set.

     You can also use time variables.
     + `from` defines the lower limit of the time range, specified in ms epoch.
     + `to` defines the upper limit of the time range, specified in ms epoch.
     + `time` and `time.window` defines a time range from `time-time.window/2` to `time+time.window/2`. Both parameters should be specified in ms. For example `?time=1500000000000&time.window=10000` results in 10s time range from 1499999995000 to 1500000005000.
+ **Updating a panel link**

  1. Select a panel (or place the cursor over the panel) to display an actions menu at the top right of the panel.

  1. From the menu, select the **Edit**.

     You can also use the keyboard shortcut, `e`.

  1. Expand the **Panel options** section, and scroll down to **Panel links**.

  1. Find the link that you want to change, and select the **Edit** (pencil) icon next to it.

  1. Make any necessary changes.

  1. Select **Save** to save changes and close the window.

  1. Save changes to your dashboard by selecting **Save** in the upper right.
+ **Deleting a panel link**

  1. Select a panel (or place the cursor over the panel) to display an actions menu at the top right of the panel.

  1. From the menu, select the **Edit**.

     You can also use the keyboard shortcut, `e`.

  1. Expand the **Panel options** section, and scroll down to **Panel links**.

  1. Find the link that you want to delete, and select the **X** icon next to it.

  1. Select **Save** in the upper right to save your changes to the dashboard.

# Annotate visualizations
<a name="v12-dash-annotations"></a>

****  
This documentation topic is designed for Grafana workspaces that support **Grafana version 12.x**.  
For Grafana workspaces that support Grafana version 10.x, see [Working in Grafana version 10](using-grafana-v10.md).  
For Grafana workspaces that support Grafana version 9.x, see [Working in Grafana version 9](using-grafana-v9.md).  
For Grafana workspaces that support Grafana version 8.x, see [Working in Grafana version 8](using-grafana-v8.md).

Annotations provide a way to mark points on a visualization with rich events. They are visualized as vertical lines and icons on all graph panels. When you hover over an annotation, you can get event description and event tags. The text field can include links to other systems with more detail.

Annotations support Cron syntax for time regions, providing more precise control over time-based annotations.

You can annotate visualizations in three ways:
+ Directly in the panel, using the [built-in annotations query](#v12-dash-built-in-query).
+ Using the Grafana HTTP API.
+ Configuring annotation queries in the dashboard settings.

In the first two cases, you’re creating new annotations, while in the last you’re querying existing annotations from data sources. The built-in annotation query also supports this.

This section explains the first and third options; for information about using the Grafana HTTP API, refer to [Annotations API](v12-Grafana-API-Annotations.md).

Annotations are supported for the following visualization types:
+ Time series 
+ State timeline
+ Candlestick

## Create annotations in panels
<a name="v12-dash-create-annotations-in-panels"></a>

Grafana comes with the ability to add annotation events directly from a panel using the [built-in annotations query](#v12-dash-built-in-query) that exists on all dashboards. Annotations that you create this way are stored in Grafana.

To add annotations directly in the panel:
+ The dashboard must already be saved.
+ The built-in query must be enabled.

**To add an annotation**

1. In the dashboard select the panel to which you’re adding the annotation. A context menu will appear. 

1. In the context menu, select **Add annotation**.

1. (Optional) Add an annotation description and tags.

1. Select **Save**.

Alternatively, to add an annotation, press `Ctrl` (or `Cmd`) while selecting the panel, and the **Add annotation** popover will appear.

**Region annotations**

You can also create annotations that cover a region, or period of time in a visualization.

**To add a region annotation**

1. In the dashboard press `Ctrl` (or `Cmd`) while selecting an area of the panel.

1.  Add an annotation description and tags (optional). 

1.  Click **Save**. 

**To edit an annotation**

1. In the dashboard, hover over an annotation indicator on a panel.

1. Select the **Edit** (pencil) icon in the annotation tooltip.

1. Modify the description and/or tags.

1. Select **Save**.

**To delete an annotation**

1. In the dashboard, hover over an annotation indicator on a panel.

1. Select the **Delete** (trash) icon in the annotation tooltip.

## Fetch annotations through dashboard settings
<a name="v12-dash-fetch-annotations"></a>

In the dashboard settings, under **Annotations**, you can add new queries to fetch annotations using any data source, including the built-in data annotation data source. Annotation queries return events that can be visualized as event markers in graphs across the dashboard. 

**To add a new annotation query**

1. Select the **Settings** (gear) icon in the dashboard header to open the settings menu.

1. Select **Annotations**.

1. Click **Add annotation query**.

1. Enter a name for the annotation query.

   This name is given to the toggle (checkbox) that will allow you to enable showing annotation events from this query. 

1. Select the data source for the annotations.

   You can also choose **Open advanced data source picker** to see more options, including adding a new data source (available for Admins only).

1. If you don’t want to use the annotation query right away, clear the **Enabled** checkbox.

1. If you don’t want the annotation query toggle to be displayed in the dashboard, select the **Hidden** checkbox.

1. Select a color for the event markers.

1. In the **Show in** drop-down, choose one of the following options:
   + **All panels** – The annotations are displayed on all panels that support annotations.
   + **Selected panels** – The annotations are displayed on all the panels you select.
   + **All panels except** – The annotations are displayed on all panels except the ones you select.

1. Configure the query.

   The annotation query options are different for each data source. For information about annotations in a specific data source, see [Connect to data sources](AMG-data-sources.md).

## Built-in query
<a name="v12-dash-built-in-query"></a>

After you add an annotation, they will still be visible. This is due to the built-in annotation query that exists on all dashboards. This annotation query will fetch all annotation events that originate from the current dashboard, which are stored in Grafana, and show them on the panel where they were created. This includes alert state history annotations.

By default, the built-in annotation query uses the `Grafana` special data source, and manual annotations are only supported using this data source. You can use another data source in the built-in annotation query, but you’ll only be able to create automated annotations using the query editor for that data source.

To add annotations directly to the dashboard, this query must be enabled.

**To confirm the built-in query is enabled**

1. Select the dashboard **settings** (gear) icon in the dashboard header to open the dashboard settings menu.

1. Select **Annotations**. 

1. Find the **Annotations & Alerts (Built-in)** query.

   If it shows **Disabled** before the name of the query, then you’ll need to select the query name to open it and update the setting.

**To stop annotations from being fetched and drawn**

1. Select the dashboard **settings** (gear) icon in the dashboard header to open the dashboard settings menu.

1. Select **Annotations**. 

1. Select the **Annotations & Alerts (Built-in)** query.

1. Select the **Enabled** toggle to turn it off.

When you copy a dashboard using the **Save As** feature it will get a new dashboard id, so annotations created on the source dashboard will no longer be visible on the copy. You can still show them if you add a new **Annotation Query** and filter by tags. However, this only works if the annotations on the source dashboard had tags to filter by.

**Filtering queries by tag**

You can create new queries to fetch annotations from the built-in annotation query using the `Grafana` data source by setting **Filter by** to `Tags`.

For example, create an annotation query name `outages` and specify a tag `outage`. This query will show all annotations (from any dashboard or via API) with the `outage` tag. If multiple tags are defined in an annotation query, then Grafana will only show annotations matching all the tags. To modify the behavior, enable **Match any**, and Grafana will show annotations that contain any one of the tags you provided.

 You can also use template variables in the tag query. This means if you have a dashboard showing stats for different services and a template variable that dictates which services to show, you can use the same template variable in your annotation query to only show annotations for those services. 

# Dashboard JSON model
<a name="v12-dash-dashboard-json-model"></a>

****  
This documentation topic is designed for Grafana workspaces that support **Grafana version 12.x**.  
For Grafana workspaces that support Grafana version 10.x, see [Working in Grafana version 10](using-grafana-v10.md).  
For Grafana workspaces that support Grafana version 9.x, see [Working in Grafana version 9](using-grafana-v9.md).  
For Grafana workspaces that support Grafana version 8.x, see [Working in Grafana version 8](using-grafana-v8.md).

A dashboard in Grafana is represented by a JSON object, which stores metadata of its dashboard. Dashboard metadata includes dashboard properties, metadata from panels, template variables, and panel queries.

**To view the JSON of a dashboard**

1. Navigate to a dashboard.

1. In the top navigation menu, select the **Dashboard settings** (gear) icon.

1. Select **JSON Model**.

## JSON fields
<a name="v12-dash-json-fields"></a>

When a user creates a new dashboard, a new dashboard JSON object is initialized with the following fields.

**Note**  
In the following JSON, id is shown as null, which is the default value assigned to it until a dashboard is saved. After a dashboard is saved, an integer value is assigned to the `id` field.

```
{
  "id": null,
  "uid": "cLV5GDCkz",
  "title": "New dashboard",
  "tags": [],
  "timezone": "browser",
  "editable": true,
  "graphTooltip": 1,
  "panels": [],
  "time": {
    "from": "now-6h",
    "to": "now"
  },
  "timepicker": {
    "time_options": [],
    "refresh_intervals": []
  },
  "templating": {
    "list": []
  },
  "annotations": {
    "list": []
  },
  "refresh": "5s",
  "schemaVersion": 17,
  "version": 0,
  "links": []
}
```

The following describes each field in the dashboard JSON.


| Name | Usage | 
| --- | --- | 
| `id` | unique numeric identifier for the dashboard (generated by the db) | 
| `uid` | unique dashboard identifier that can be generated by anyone. string (8-40) | 
| `title` | current title of dashboard | 
| `tags` | tags associated with dashboard, an array of strings | 
| `style` | theme of dashboard, such as `dark` or `light` | 
| `timezone` | timezone of dashboard, such as `utc` or `browser` | 
| `editable` | whether a dashboard is editable or not | 
| `graphTooltip` | 0 for no shared crosshair or tooltip (default), 1 for shared crosshair, 2 for shared crosshair and shared tooltip | 
| `time` | time range for dashboard, such as `last 6 hours` or `last 7 days` | 
| `timepicker` | timepicker metadata, see [timepicker section](#v12-dash-json-panels) for details | 
| `templating` | templating metadata, see [templating section](#v12-dash-json-panels) for details | 
| `annotations` | annotations metadata, see [annotations](v12-dash-annotations.md) for how to add them | 
| `refresh` | auto-refresh interval | 
| `schemaVersion` | version of the JSON schema (integer), incremented each time a Grafana update brings changes to this schema | 
| `version` | version of the dashboard (integer), incremented each time the dashboard is updated | 
| `panels` | panels array (see the next section for detail) | 

## Panels
<a name="v12-dash-json-panels"></a>

Panels are the building blocks of a dashboard. It consists of data source queries, type of graphs, aliases, and more. Panel JSON consists of an array of JSON objects, each representing a different panel. Most of the fields are common for all panels but some fields depend on the panel type. The following is an example of panel JSON of a text panel.

```
"panels": [
  {
    "type": "text",
    "title": "Panel Title",
    "gridPos": {
      "x": 0,
      "y": 0,
      "w": 12,
      "h": 9
    },
    "id": 4,
    "mode": "markdown",
    "content": "# title"
  }
```

**Panel size and position**

The gridPos property describes the panel size and position in grid coordinates.
+ `w` – 1 to 24 (the width of the dashboard is divided into 24 columns)
+ `h` – In grid height units, each represents 30 pixels.
+ `x` – The x position, in the same unit as `w`.
+ `y` – The y position, in the same unit as `h`.

The grid has a negative gravity that moves up panels if there is empty space above a panel.

**Timepicker**

```
"timepicker": {
    "collapse": false,
    "enable": true,
    "notice": false,
    "now": true,
    "refresh_intervals": [
      "5s",
      "10s",
      "30s",
      "1m",
      "5m",
      "15m",
      "30m",
      "1h",
      "2h",
      "1d"
    ],
    "status": "Stable",
    "type": "timepicker"
  }
```

**Templating **

The `templating` field contains an array of template variables with their saved values along with some other metadata.

```
"templating": {
    "enable": true,
    "list": [
       {
        "allFormat": "wildcard",
        "current":  {
          "tags": [],
          "text": "prod",
          "value": "prod"
        },
        "datasource": null,
        "includeAll": true,
        "name": "env",
        "options": [
           {
            "selected": false,
            "text": "All",
            "value": "*"
          },
           {
            "selected": false,
            "text": "stage",
            "value": "stage"
          },
           {
            "selected": false,
            "text": "test",
            "value": "test"
          }
        ],
        "query": "tag_values(cpu.utilization.average,env)",
        "refresh": false,
        "type": "query"
      },
       {
        "allFormat": "wildcard",
        "current":  {
          "text": "apache",
          "value": "apache"
        },
        "datasource": null,
        "includeAll": false,
        "multi": false,
        "multiFormat": "glob",
        "name": "app",
        "options": [
           {
            "selected": true,
            "text": "tomcat",
            "value": "tomcat"
          },
           {
            "selected": false,
            "text": "cassandra",
            "value": "cassandra"
          }
        ],
        "query": "tag_values(cpu.utilization.average,app)",
        "refresh": false,
        "regex": "",
        "type": "query"
      }
    ]
  }
```

The following table describes the usage of the templating fields.


| Name | Usage | 
| --- | --- | 
|  `enable`  |  whether templating is enabled or not  | 
|  `list`  |  an array of objects each representing one template variable  | 
|  `allFormat`  |  format to use while fetching all values from data source, including `wildcard`, `glob`, `regex`, `pipe`.  | 
|  `current`  |  shows current selected variable text/value on the dashboard  | 
|  `datasource`  |  shows data source for the variables  | 
|  `includeAll`  |  whether all value option is available or not  | 
|  `multi`  |  whether multiple values can be selected or not from variable value list  | 
|  `multiFormat`  |  format to use while fetching timeseries from data source  | 
|  `name`  |  name of variable  | 
|  `options`  |  array of variable text/value pairs available for selection on dashboard  | 
|  `query`  |  data source query used to fetch values for a variable  | 
|  `refresh`  |  configures when to refresh a variable  | 
|  `regex`  |  extracts part of a series name or metric node segment  | 
|  `type`  |  type of variable, `custom`, `query`, or `interval`  | 

# Best practices for dashboards
<a name="v12-dash-bestpractices"></a>

****  
This documentation topic is designed for Grafana workspaces that support **Grafana version 12.x**.  
For Grafana workspaces that support Grafana version 10.x, see [Working in Grafana version 10](using-grafana-v10.md).  
For Grafana workspaces that support Grafana version 9.x, see [Working in Grafana version 9](using-grafana-v9.md).  
For Grafana workspaces that support Grafana version 8.x, see [Working in Grafana version 8](using-grafana-v8.md).

This section provides information about best practices for Grafana administrators and users about how to build and maintain Grafana dashboards.

For information about the different kinds of dashboards you can create, refer to the [Grafana dashboards: A complete guide to all the different types you can build](https://grafana.com/blog/2022/06/06/grafana-dashboards-a-complete-guide-to-all-the-different-types-you-can-build/?pg=webinar-getting-started-with-grafana-dashboard-design-amer&plcmt=related-content-1) blog post on the Grafana Labs website.

**Note**  
This section can help you create a strategy for your monitoring and dashboard maintenance. You know your systems best, and should use this section to guide your understanding. Ultimately, it is your responsibility to create the best strategy for your system.

## Common observability strategies
<a name="v12-dash-common-observability-strategies"></a>

When you have a lot to monitor, like a server farm, you need a strategy to decide what is important enough to monitor. This page describes several common methods for choosing what to monitor.

A logical strategy allows you to make uniform dashboards and scale your observability platform more easily.

**Guidelines for strategies**
+ The USE method tells you how happy your machines are, the RED method tells you how happy your users are.
+ USE reports on causes of issues.
+ RED reports on user experience and is more likely to report symptoms of problems.
+ Monitoring both is important to understanding your system. As a best practice, alert on symptoms rather than causes. Typically, alerting is configured on RED dashboards.

**USE method**

USE stands for:
+ **Utilization** – Percent time the resource is busy, such as node CPU usage.
+ **Saturation** – Amount of work a resource has to do, often queue length or node load.
+ **Errors** – Count of error events.

This method is best for hardware resources in infrastructure, such as CPU, memory, and network devices. For more information, see Brendan Gregg's blog post [The USE Method](http://www.brendangregg.com/usemethod.html).

**RED method**

RED stands for:
+ **Rate** – Requests per second
+ **Errors** – Number of requests that are failing.
+ **Duration** – Amount of time these requests take, distribution of latency measurements.

This method is most applicable to services, especially a microservices environment. For each of your services, instrument the code to expose these metrics for each component. RED dashboards are good for alerting and SLAs. A well-designed RED dashboard is a proxy for user experience.

For more information, see Tom Wilkie’s blog post [The RED method: How to instrument your services](https://grafana.com/blog/2018/08/02/the-red-method-how-to-instrument-your-services).

**The Four Golden Signals**

According to the [Google SRE handbook](https://landing.google.com/sre/sre-book/chapters/monitoring-distributed-systems/#xref_monitoring_golden-signals), if you can only measure four metrics of your user-facing system, focus on these four.

This method is similar to the RED method, but it includes saturation.
+ **Latency** – Time taken to serve a request.
+ **Traffic** – How much demand is placed on your system.
+ **Errors** – Rate of requests that are failing.
+ **Saturation** – How "full" your system is,

## Dashboard management maturity model
<a name="v12-dash-management-maturity-model"></a>

*Dashboard management maturity* refers to how well-designed and efficient your dashboard ecosystem is. We recommend periodically reviewing your dashboard setup to gauge where you are and how you can improve.

Broadly speaking, dashboard maturity can be defined as low, medium, or high. 

 Much of the content for this topic was taken from the KubeCon 2019 talk [Fool-Proof Kubernetes Dashboards for Sleep-Deprived Oncalls](https://www.youtube.com/watch?v=YE2aQFiMGfY). 

**Low – default state**

At this stage, you have no coherent dashboard management strategy. Almost everyone starts here.

How can you tell you are here?
+ Everyone can modify your dashboards.
+ Lots of copied dashboards, little to no dashboard reuse.
+ One-off dashboards that hang around forever.
+ No version control (dashboard JSON in version control).
+ Lots of browsing for dashboards, searching for the right dashboard. This means lots of wasted time trying to find the dashboard you need.
+ Not having any alerts to direct you to the right dashboard.

**Medium – methodical dashboards**

At this stage, you are starting to manage your dashboard use with methodical dashboards. You might have laid out a strategy, but there are some things you could improve.

 How can you tell you are here? 
+ Prevent sprawl by using template variables. For example, you don’t need a separate dashboard for each node, you can use query variables. Even better, you can make the data source a template variable too, so you can reuse the same dashboard across different clusters and monitoring backends.

  Refer to the list of examples in [Variables](v12-dash-variables.md), for ideas.
+ Methodical dashboards according to an [observability strategy](#v12-dash-common-observability-strategies).
+ Hierarchical dashboards with drill-downs to the next level.
+ Dashboard design reflects service hierarchies. For example, you could use the RED method with one row per service. The row order could reflect the data flow, as you scroll down the dashboard.
+ Compare like to like: split service dashboards when the magnitude differs. Make sure aggregated metrics don’t drown out important information.
+ Expressive charts with meaningful use of color and normalizing axes where you can.
  + Example of meaningful color: Blue means it’s good, red means it’s bad. [Thresholds](v12-panels-configure-thresholds.md) can help with that.
  + Example of normalizing axes: When comparing CPU usage, measure by percentage rather than raw number, because machines can have a different number of cores. Normalizing CPU usage by the number of cores reduces cognitive load because the viewer can trust that at 100% all cores are being used, without having to know the number of CPUs.
+ Directed browsing cuts down on guessing.
  + Template variables make it harder to browse randomly or aimlessly.
  + Most dashboards should be linked to by alerts.
  + Browsing is directed with links. For more information, see [Managing dashboard links](v12-dash-manage-dashboard-links.md).
+  Version-controlled dashboard JSON. 

**High – optimized use**

At this stage, you have optimized your dashboard management use with a consistent and thoughtful strategy. It requires maintenance, but the results are worth it.
+ Actively reducing sprawl.
  + Regularly review existing dashboards to make sure they are still relevant.
  + Only approved dashboards added to master dashboard list.
  + Tracking dashboard use. You can take advantage of [Usage insights](v12-dash-assess-dashboard-usage.md).
+ Consistency by design.
+ Use scripting libraries to generate dashboards, ensure consistency in pattern and style.
  + grafonnet (Jsonnet)
  + grafanalib (Python)
+ No editing in the browser. Dashboard viewers change views with variables.
+ Browsing for dashboards is the exception, not the rule.
+ Perform experimentation and testing in a separate Grafana instance dedicated to that purpose, not your production instance. When a dashboard in the test environment is proven useful, then add that dashboard to your main Grafana instance.

## Best practices for creating dashboards
<a name="v12-dash-best-practices-for-creating-dashboards"></a>

This section outlines some best practices to follow when creating Grafana dashboards.

**Before you begin**

 Here are some principles to consider before you create a dashboard. 

**A dashboard should tell a story or answer a question**

What story are you trying to tell with your dashboard? Try to create a logical progression of data, such as large to small or general to specific. What is the goal for this dashboard? (Hint: If the dashboard doesn’t have a goal, then ask yourself if you really need the dashboard.)

Keep your graphs simple and focused on answering the question that you are asking. For example, if your question is "which servers are in trouble?", then maybe you don’t need to show all the server data. Just show data for the ones in trouble.

**Dashboards should reduce cognitive load, not add to it**

*Cognitive load* is basically how hard you need to think about something in order to figure it out. Make your dashboard easy to interpret. Other users and future you (when you’re trying to figure out what broke at 2AM) will appreciate it.

 Ask yourself: 
+ Can I tell what exactly each graph represents? Is it obvious, or do I have to think about it?
+ If I show this to someone else, how long will it take them to figure it out? Will they get lost?

**Have a monitoring strategy**

It’s easy to make new dashboards. It’s harder to optimize dashboard creation and adhere to a plan, but it’s worth it. This strategy should govern both your overall dashboard scheme and enforce consistency in individual dashboard design.

Refer to [Common observability strategies](#v12-dash-common-observability-strategies) and [Dashboard management maturity levels](#v12-dash-management-maturity-model) for more information.

**Write it down**

Once you have a strategy or design guidelines, write them down to help maintain consistency over time.

**Best practices to follow**
+ When creating a new dashboard, make sure it has a meaningful name.
  + If you are creating a dashboard to play or experiment, then put the word `TEST` or `TMP` in the name.
  + Consider including your name or initials in the dashboard name or as a tag so that people know who owns the dashboard.
  + Remove temporary experiment dashboards when you are done with them.
+ If you create many related dashboards, think about how to cross-reference them for easy navigation. For more information, see [Best practices for managing dashboards](#v12-dash-best-practices-for-managing-dashboards), later in this section.
+ Grafana retrieves data from a data source. A basic understanding of [Connect to data sources](AMG-data-sources.md) in general, and your specific data sources is important.
+ Avoid unnecessary dashboard refreshing to reduce the load on the network or backend. For example, if your data changes every hour, then you don’t need to set the dashboard refresh rate to 30 seconds.
+ Use the left and right Y-axes when displaying time series with different units or ranges.
+ Add documentation to dashboards and panels.
  + To add documentation to a dashboard, add a [Text panel visualization](v12-panels-text.md) to the dashboard. Record things like the purpose of the dashboard, useful resource links, and any instructions users might need to interact with the dashboard.
  + To add documentation to a panel, edit the panel settings and add a description. Any text you add will appear if you hover your cursor over the small `i` in the top left corner of the panel.
+ Reuse your dashboards and enforce consistency by using [templates and variables](v12-dash-variables.md).
+ Be careful with stacking graph data. The visualizations can be misleading, and hide important data. We recommend turning it off in most cases.

## Best practices for managing dashboards
<a name="v12-dash-best-practices-for-managing-dashboards"></a>

 This page outlines some best practices to follow when managing Grafana dashboards. 

**Before you begin**

Here are some principles to consider before you start managing dashboards.

**Strategic observability**

There are several [common observability strategies](#v12-dash-common-observability-strategies). You should research them and decide whether one of them works for you or if you want to come up with your own. Either way, have a plan, write it down, and stick to it.

Adapt your strategy to changing needs as necessary.

**Maturity level**

What is your dashboard maturity level? Analyze your current dashboard setup and compare it to the [Dashboard management maturity model](#v12-dash-management-maturity-model). Understanding where you are can help you decide how to get to where you want to be.

**Best practices to follow**
+ Avoid dashboard sprawl, meaning the uncontrolled growth of dashboards. Dashboard sprawl negatively affects time to find the right dashboard. Duplicating dashboards and changing "one thing" (worse: keeping original tags) is the easiest kind of sprawl.
  + Periodically review the dashboards and remove unnecessary ones.
  + If you create a temporary dashboard, perhaps to test something, prefix the name with `TEST:`. Delete the dashboard when you are finished.
+ Copying dashboards with no significant changes is not a good idea.
  + You miss out on updates to the original dashboard, such as documentation changes, bug fixes, or additions to metrics.
  + In many cases copies are being made to simply customize the view by setting template parameters. This should instead be done by maintaining a link to the master dashboard and customizing the view with [URL parameters](v12-panels-configure-data-links.md#v12-panels-data-link-variables).
+ When you must copy a dashboard, clearly rename it and *do not* copy the dashboard tags. Tags are important metadata for dashboards that are used during search. Copying tags can result in false matches.
+ Maintain a dashboard of dashboards or cross-reference dashboards. This can be done in several ways: 
  + Create dashboard links, panel, or data links. Links can go to other dashboards or to external systems. For more information, refer to [Manage dashboard links](v12-dash-manage-dashboard-links.md).
  +  Add a [Dashboard list panel](v12-panels-dashboard-list.md). You can then customize what you see by doing tag or folder searches.
  + Add a [Text panel](v12-panels-dashboard-list.md) and use markdown to customize the display. 