From 667e8c9626551d32f98aeb713c6d698b56b12f61 Mon Sep 17 00:00:00 2001
From: trangl
Date: Mon, 2 Dec 2024 19:05:29 +0100
Subject: [PATCH 01/42] Move contents from create simple chart and reformat
with tables
---
data-visualization/charts/create-charts.rst | 132 ++++++++++++++------
1 file changed, 96 insertions(+), 36 deletions(-)
diff --git a/data-visualization/charts/create-charts.rst b/data-visualization/charts/create-charts.rst
index 605464b1d..ae1ac31c8 100644
--- a/data-visualization/charts/create-charts.rst
+++ b/data-visualization/charts/create-charts.rst
@@ -13,17 +13,6 @@ Before you create a chart, you need to have an idea of which metrics you want to
Also consider customizing the defaults for your charts. You can filter metrics to limit the data to specific hosts, or specify a different time range for the chart. You can return to customize chart features at any time.
-.. note::
-
- Instead of displaying metrics on a chart, you can also:
-
- - Create a chart that contains a text note. See :ref:`text-note`. Use this feature to add documentation and guidance to a dashboard, because the text
- chart appears as one of the charts in the dashboard.
- - Create a chart that contains events (an event feed). See :ref:`dashboard-event-feed`
- - Overlay events on a chart that already displays metrics. See :ref:`chart-events`.
- - Link a detector to a chart and display its alert status on the chart. See :ref:`linking-detectors`.
-
-
.. _ways-to-create-charts:
Create a chart
@@ -34,58 +23,131 @@ Once you have an initial plan for the metrics you want to display on your chart,
.. note::
You can't add charts to a built-in dashboard. For more information, see :ref:`built-in-dashboards`.
-- To create one or more simple charts on a new or existing dashboard, see :ref:`simple-charts-dashboards`. This technique is also a good choice if you want to see what metrics are available, because you can see them in the |ms|.
+See the following table for different chart creation methods:
-- To copy charts you see on a dashboard to a new or existing dashboard, see :ref:`copy-charts`.
+.. list-table::
+ :header-rows: 1
+ :widths: 30 70
-- To copy charts you are viewing in the Chart Builder, use the :guilabel:`Save As` option (see :ref:`save-chart`), change the name as desired, and choose the dashboard where you want to place the copied chart. If you have edited the chart, those changes will be reflected in the copied chart.
+ * - :strong:`Method`
+ - :strong:`Description`
+ * - Create a chart using the metrics sidebar
+ - Use this method to create a simple chart or add a new chart to an existing dashboard. To learn more, see :ref:`create-chart-metric-sidebar`.
+ * - Copy a chart
+ - Use this method to add a clone or move a chart to another dashboard. To learn more, see :ref:`copy-charts`.
+ * - Create a chart using the Chart Builder
+ - Use this method to create a more complex chart with customizations during the creation process. To learn more, see :ref:`create-chart-with-chart-builder`.
+ * - Create a chart using the API
+ - Use this method to programmatically create a chart instead of creating one through the user interface. To learn more, see :ref:`create-chart-via-api`.
- To create a chart based on a metric you have found in the Metadata Catalog, see :ref:`create-chart-from-catalog`.
-- To build a chart from scratch, see :ref:`create-chart-with-chart-builder`.
-- To programmatically create a chart instead of creating one through the user interface, see :ref:`create-chart-via-api`.
+.. _create-chart-metric-sidebar:
+
+Create a chart using the metrics sidebar
+------------------------------------------------
+
+To start creating a simple chart, use the metrics sidebar to find and select the metrics and events you want to display in your chart:
+
+#. Open the metrics sidebar.
+
+ * For an existing dashboard: Navigate to the existing dashboard and open it. Select the sidebar icon in the top right to open the metrics sidebar.
+ * For a new dashboard: From the :strong:`Create` menu in the top, select :strong:`Dashboard`. Select :strong:`Browse metrics sidebar` to open the metrics sidebar.
+
+#. On the :strong:`Metrics` tab, select :strong:`Find metrics` or :strong:`Find events`, depending what you want to plot in your chart.
+#. Enter keywords into the search field. If a search keyword also matches metric metadata, such as a dimension name or property value, the metadata displays under the metric name. To add the metadata to your query as a filter, select the matching metadata or the :strong:`Filter` (+) icon. To exclude the metadata from your search results, select the :strong:`Exclude` (-) icon.
+ .. note:: Hover over a metric or event name to display information about it.
+
+Create one or multiple charts with metrics
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+* Create a chart with a single metric:
+
+ #. Select the check box next to the metric name.
+ #. Select :strong:`Add chart`.
+
+* Create a chart containing one plot for each metric:
+ #. Select the check box next to each item you want to add.
+ #. Select :strong:`Add chart`.
+
+* Create multiple charts, one for each metric:
+
+ #. Select the check box next to each item you want to add.
+ #. Select the :strong:`Separate charts` option.
+ #. Select :strong:`Add charts`.
+
+.. note:: Select :strong:`Add with filters` to add matching metadata from each metric result as filters to your chart.
+
+Create one or multiple charts with events
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+* Create a chart with a single event:
+
+ #. Select the check box next to the event name.
+ #. Select :strong:`Add chart`.
+
+* Create a chart containing one plot for each event:
+
+ #. Select the check box next to each item you want to add.
+ #. Select :strong:`Add single chart`.
+
+* Create multiple charts, one for each event:
+
+ #. Select the check box next to each item you want to add.
+ #. Select :strong:`Multiple charts`.
.. _copy-charts:
-Copy charts
------------
+Copy a chart
+---------------
-You can copy charts from one or multiple dashboards to a clipboard. This technique is useful if you are troubleshooting an issue and want to pull some existing charts together to view on a new dashboard (see :ref:`create-dashboard`), or if you want to copy charts from one dashboard to another.
+You can copy charts from one or multiple dashboards to a clipboard. You might want to use this technique for the following use cases:
-You can also use this method to "move" a chart from one dashboard to another; after copying a chart, delete the original chart.
+* Pull some existing charts together in a new dashboard for troubleshooting.
+* Copy charts from one dashboard to another.
+* Move a chart from one dashboard to another; after copying a chart, delete the original chart.
.. _copy-chart-to-clipboard:
-Follow these steps to copy charts to a clipboard:
+Follow these steps to copy a chart to a clipboard:
-#. To start, open the dashboard containing the chart you want to copy. Staying in the dashboard view, select :guilabel:`Copy` from the :guilabel:`Chart actions` drop-down menu of the chart you want to copy. You have to be in dashboard view to see the Copy option.
+#. Open the dashboard containing the chart you want to copy.
+#. In the dashboard view, open the :guilabel:`Chart actions` menu of the chart you want to copy.
+#. Select :guilabel:`Copy`.
#. When you copy a chart, a counter on the :guilabel:`Create` icon on the navigation bar indicates how many charts you have copied to the clipboard.
-#. To copy another chart to the clipboard, select :guilabel:`Chart actions > Add to Clipboard` from a different chart, or select the :guilabel:`Add to clipboard` icon on another chart while in the dashboard view. The counter increments as you add additional charts.
+#. To copy another chart to the clipboard, select :guilabel:`Chart actions > Add to clipboard` from a different chart, or select the :guilabel:`Add to clipboard` icon on another chart while in the dashboard view. The counter increments as you add additional charts.
-Different options on the Create menu let you paste the charts onto a dashboard. Pasting charts clears the clipboard.
+Once you copy charts to the clipboard, several options from the :strong:`Create` menu let you paste the charts to another dashboard. Pasting charts clears the clipboard.
-- To paste the charts into a dashboard you are viewing, select :guilabel:`Paste Charts` from the :guilabel:`Create` menu. You must have write permissions for the dashboard. See :ref:`about-permissions` for more detail.
+.. list-table::
+ :header-rows: 1
+ :widths: 30 70
-- If you see :guilabel:`Dashboard with copied charts` on the Create menu, select that option to create a new, unsaved dashboard and paste the charts into it.
-
-- If you see :guilabel:`Dashboard (unsaved)` on the Create menu, you have already added charts to a new dashboard and haven't saved the dashboard yet. Select this option to open the unsaved dashboard, then select :guilabel:`Paste Charts`.
-
-To clear the clipboard contents without pasting the charts to a dashboard, select :guilabel:`Clear Clipboard` from the Create menu.
+ * - :strong:`Option`
+ - :strong:`Description`
+ * - Paste charts
+ - Select this option to paste the charts into a dashboard you are viewing. You must have write permissions for the dashboard. See :ref:`about-permissions` for more detail.
+ * - Dashboard with copied charts
+ - Select this option to create a new dashboard consisting of all the copied charts.
+ * - Dashboard (unsaved)
+ - If you see this option, you have already added charts to a new dashboard but haven't saved it. Select this option to open the unsaved dashboard. Select :strong:`Past charts` to add the copied charts to this dashboard.
+ * - Clear clipboard
+ - Select this option to clear the clipboard content without pasting charts to a dashboard.
.. _create-chart-with-chart-builder:
Create a new chart using the Chart Builder
------------------------------------------
-#. Select :guilabel:`Chart` from the :guilabel:`Create` menu. Alternatively, you can select :guilabel:`New Chart` on custom dashboards.
+#. In the :strong:`Create` menu, select :strong:`Chart`. Alternatively, select :guilabel:`New chart` on custom dashboards.
#. Search for metrics or events you want to plot on your chart. For more information, see :ref:`chart-builder`.
.. note:: You can add functions to your chart with the :strong:`F(x)` column. See :ref:`plot-analytics` and :ref:`analytics-ref` for more details.
+
#. Customize your chart. See :ref:`chart-options-tab`.
-See also :ref:`choose-chart-type`.
.. _create-chart-from-finder:
@@ -93,7 +155,6 @@ Create a chart from the Metric Finder
-------------------------------------
Use the Metric Finder to find the metric you want to track. From the results page, select the metric name to open the Chart Builder, pre-populated with your metric.
-See also :ref:`choose-chart-type`.
.. _create-chart-from-catalog:
@@ -102,19 +163,18 @@ Create a chart from the Metadata Catalog
You can also create a chart from the Metadata Catalog. Select a metric from the list in the sidebar, then select :guilabel:`View in Chart` in the preview pane to open the Chart Builder, pre-populated with your metric.
-See also :ref:`choose-chart-type`.
.. _create-chart-via-api:
Create a chart using Splunk Observability Cloud API
---------------------------------------------------
-If you prefer to work programmatically, see :new-page:`Display Data Using Charts ` to create a chart with API.
+If you prefer to work programmatically, see :new-page:`Display data using charts ` to create a chart with API.
.. _choose-chart-type:
Select a chart type
-===================
+=======================
Available chart types are shown as icons in the chart's title bar. You can also select a chart type in the Chart Options tab. Hover over an icon to see which chart type it represents, then select an icon to display the chart in that format. The selected chart type is highlighted and indicated by a small pointer.
From 63fe821ff490dc1634c173aaa5588b9bb074badb Mon Sep 17 00:00:00 2001
From: trangl
Date: Mon, 2 Dec 2024 19:39:28 +0100
Subject: [PATCH 02/42] Fix title capitalization
---
data-visualization/charts/chart-options.rst | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/data-visualization/charts/chart-options.rst b/data-visualization/charts/chart-options.rst
index 29eb484a3..4ceca672a 100644
--- a/data-visualization/charts/chart-options.rst
+++ b/data-visualization/charts/chart-options.rst
@@ -1,7 +1,7 @@
.. _chart-options-tab:
*****************************************************************
-Chart Options in the Chart Builder
+Chart options in the Chart Builder
*****************************************************************
From f51cc478212fbdafd4e1562d0b2b5bc0b388696e Mon Sep 17 00:00:00 2001
From: trangl
Date: Tue, 3 Dec 2024 10:40:59 +0100
Subject: [PATCH 03/42] Wording
---
data-visualization/charts/create-charts.rst | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/data-visualization/charts/create-charts.rst b/data-visualization/charts/create-charts.rst
index ae1ac31c8..b1d096692 100644
--- a/data-visualization/charts/create-charts.rst
+++ b/data-visualization/charts/create-charts.rst
@@ -34,7 +34,7 @@ See the following table for different chart creation methods:
* - Create a chart using the metrics sidebar
- Use this method to create a simple chart or add a new chart to an existing dashboard. To learn more, see :ref:`create-chart-metric-sidebar`.
* - Copy a chart
- - Use this method to add a clone or move a chart to another dashboard. To learn more, see :ref:`copy-charts`.
+ - Use this method to add a copy or move a chart to another dashboard. To learn more, see :ref:`copy-charts`.
* - Create a chart using the Chart Builder
- Use this method to create a more complex chart with customizations during the creation process. To learn more, see :ref:`create-chart-with-chart-builder`.
* - Create a chart using the API
@@ -59,7 +59,7 @@ To start creating a simple chart, use the metrics sidebar to find and select the
#. Enter keywords into the search field. If a search keyword also matches metric metadata, such as a dimension name or property value, the metadata displays under the metric name. To add the metadata to your query as a filter, select the matching metadata or the :strong:`Filter` (+) icon. To exclude the metadata from your search results, select the :strong:`Exclude` (-) icon.
.. note:: Hover over a metric or event name to display information about it.
-Create one or multiple charts with metrics
+Create charts with metrics
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
* Create a chart with a single metric:
@@ -75,12 +75,12 @@ Create one or multiple charts with metrics
* Create multiple charts, one for each metric:
#. Select the check box next to each item you want to add.
- #. Select the :strong:`Separate charts` option.
+ #. Select :strong:`Separate charts`.
#. Select :strong:`Add charts`.
.. note:: Select :strong:`Add with filters` to add matching metadata from each metric result as filters to your chart.
-Create one or multiple charts with events
+Create charts with events
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
* Create a chart with a single event:
From 2c76b3abe59319b16a8932a8383c660ee5f38f2e Mon Sep 17 00:00:00 2001
From: trangl
Date: Tue, 3 Dec 2024 11:13:33 +0100
Subject: [PATCH 04/42] Remove simple chart topic
---
data-visualization/charts/chart-builder.rst | 2 +-
data-visualization/charts/charts.rst | 2 -
data-visualization/charts/create-charts.rst | 22 +--
.../charts/simple-charts-dashboards.rst | 134 ------------------
.../dashboards/dashboard-create-customize.rst | 10 +-
.../dashboards/dashboard-group.rst | 2 +-
6 files changed, 5 insertions(+), 167 deletions(-)
delete mode 100644 data-visualization/charts/simple-charts-dashboards.rst
diff --git a/data-visualization/charts/chart-builder.rst b/data-visualization/charts/chart-builder.rst
index deb8bfc89..5585189da 100644
--- a/data-visualization/charts/chart-builder.rst
+++ b/data-visualization/charts/chart-builder.rst
@@ -9,7 +9,7 @@ Plot metrics and events using chart builder in Splunk Observability Cloud
Charts are highly customizable. This topic describes how to use chart builder's tools and options to customize your charts to display signals (metrics and events) in an intuitive and compelling way.
-.. note:: Use the chart builder only if you are already familiar with Splunk Observability Cloud charts and are ready to dive into its more advanced features. For a simpler approach to creating charts, see :ref:`simple-charts-dashboards`.
+.. note:: Use the chart builder only if you are already familiar with Splunk Observability Cloud charts and are ready to dive into its more advanced features. For a simpler approach to creating charts, see :ref:`create-chart-metric-sidebar`.
If you are editing an existing chart, you might want to start by configuring plot lines already on the chart (see :ref:`plot-options` and :ref:`plot-config-panel`).
diff --git a/data-visualization/charts/charts.rst b/data-visualization/charts/charts.rst
index 3ee5e55bf..be51f7aa3 100644
--- a/data-visualization/charts/charts.rst
+++ b/data-visualization/charts/charts.rst
@@ -11,7 +11,6 @@ Charts in Splunk Observability Cloud
:hidden:
Chart types
- Create simple charts
Create charts
data-resolution-and-rollups
Plot metrics and events using Chart Builder
@@ -29,7 +28,6 @@ Charts can range from extremely simple (monitor a single metric for a single hos
The following sections lead you through developing the expertise you need to build charts that meet your requirements, based on the metrics you want to monitor.
- :ref:`chart-types`
-- :ref:`Create simple charts `
- :ref:`create-charts`
- :ref:`data-resolution-rollups-charts`
- :ref:`Plot metrics and events using Chart Builder `
diff --git a/data-visualization/charts/create-charts.rst b/data-visualization/charts/create-charts.rst
index b1d096692..43e618e7f 100644
--- a/data-visualization/charts/create-charts.rst
+++ b/data-visualization/charts/create-charts.rst
@@ -40,8 +40,6 @@ See the following table for different chart creation methods:
* - Create a chart using the API
- Use this method to programmatically create a chart instead of creating one through the user interface. To learn more, see :ref:`create-chart-via-api`.
-- To create a chart based on a metric you have found in the Metadata Catalog, see :ref:`create-chart-from-catalog`.
-
.. _create-chart-metric-sidebar:
@@ -141,29 +139,13 @@ Once you copy charts to the clipboard, several options from the :strong:`Create`
Create a new chart using the Chart Builder
------------------------------------------
-#. In the :strong:`Create` menu, select :strong:`Chart`. Alternatively, select :guilabel:`New chart` on custom dashboards.
+#. In the :strong:`Create` menu on the top navigation bar, select :strong:`Chart`. Alternatively, select :guilabel:`New chart` on custom dashboards.
#. Search for metrics or events you want to plot on your chart. For more information, see :ref:`chart-builder`.
.. note:: You can add functions to your chart with the :strong:`F(x)` column. See :ref:`plot-analytics` and :ref:`analytics-ref` for more details.
#. Customize your chart. See :ref:`chart-options-tab`.
-
-.. _create-chart-from-finder:
-
-Create a chart from the Metric Finder
--------------------------------------
-Use the Metric Finder to find the metric you want to track. From the results page, select the metric name to open the Chart Builder, pre-populated with your metric.
-
-
-.. _create-chart-from-catalog:
-
-Create a chart from the Metadata Catalog
-----------------------------------------
-
-You can also create a chart from the Metadata Catalog. Select a metric from the list in the sidebar, then select :guilabel:`View in Chart` in the preview pane to open the Chart Builder, pre-populated with your metric.
-
-
.. _create-chart-via-api:
Create a chart using Splunk Observability Cloud API
@@ -192,7 +174,7 @@ Edit a chart
To edit a chart, open it from any dashboard or the Dashboard panel of a navigator. Editing a chart is essentially identical to building a chart. See :ref:`chart-builder`.
-If you don't have write permissions for the dashboard containing the chart, or you are in a built-in dashboard, you have to use :guilabel:`Save as` to save the edited chart.
+If you don't have write permissions for the dashboard containing the chart or if you are in a built-in dashboard, you have to use :guilabel:`Save as` to save the edited chart as a new chart.
.. _save-chart:
diff --git a/data-visualization/charts/simple-charts-dashboards.rst b/data-visualization/charts/simple-charts-dashboards.rst
deleted file mode 100644
index a4bde9f10..000000000
--- a/data-visualization/charts/simple-charts-dashboards.rst
+++ /dev/null
@@ -1,134 +0,0 @@
-.. _simple-charts-dashboards:
-
-***********************************************************************
-Create simple charts using Splunk Observability Cloud
-***********************************************************************
-
-.. meta::
- :description: Splunk Observability Cloud makes it easy for you to quickly add simple charts to a new or existing dashboard. For example, you might want to put together a new draft dashboard with simple charts to share with others. If you're troubleshooting a problem, you can add charts for various metrics to a dashboard, share it with others, then close it without even saving it.
-
-This topic describes how to create simple charts to add to a new or existing dashboard.
-
-For example, you can create a new draft dashboard and add one or more simple charts to it. You can then :ref:`share the chart ` on the draft dashboard with others. If you want to continue using the charts on the draft dashboard, you can save the dashboard. Or, if you no longer need the charts, you can just clear the draft dashboard without saving.
-
-You can also add simple charts to existing dashboards that you have write permissions for.
-
-For information about developing more complex charts, see :ref:`create-charts`.
-
-
-.. _finding-metrics-and-events:
-.. _use-metrics-sidebar:
-
-Find metrics and events to add to a simple chart
-=============================================================================
-
-To start creating a simple chart, use the Metrics Sidebar to find and select the metrics and events you want to display in your chart.
-
-- To add a new chart to an existing dashboard, open the dashboard. Click the sidebar icon in the top right to open the Metrics Sidebar, if it isn't already open.
-
-- To add a new chart to a new dashboard, open the navigation :strong:`Menu` and select :strong:`Dashboard`. Open the :strong:`Create` menu (+) in the top right and select :strong:`Dashboard`. Click :strong:`Browse Metrics Sidebar` in the new chart placeholder section to open the Metrics Sidebar.
-
-To search for a metric to display in a chart, select the :strong:`Find Metrics` option, enter one or more keywords in the search field, and click the search icon or press Enter. To search for an event to display in a chart, select the :strong:`Find Events` option instead.
-
-If a search keyword also matches metric metadata, such as a dimension name or property value, the metadata displays under the metric name. Click the matching metadata, or the :strong:`Filter` (+) icon, to add it to your search as a filter. To exclude the metadata from your search results, click the :strong:`Exclude` (-) icon.
-
-Hover over a metric or event name to display information about it. For example, when you hover over a metric name, you can see the metric name, its description, the time it was created, its type, and the number of time series that it reports (filtered by any filters that have been applied to your search query).
-
-For general guidance on how to browse and search for metrics, see :ref:`metric-finder`.
-
-
-.. _creating-charts:
-
-Create a simple chart
-=============================================================================
-
-After you've found one or more metrics or events that you want to add to your chart, you have the following options.
-
-
-Add metrics to a simple chart
--------------------------------------
-
-On the :strong:`Metrics` tab in the Metrics Sidebar, select the :strong:`Find Metrics` option.
-
-- To add a chart for a single metric, click the metric name.
-
-- To add a single chart containing one plot for each metric:
-
- - Select the checkbox next to each item; you can also click :strong:`Select All`.
- - Click :strong:`Add Chart`.
-
-- To add multiple charts to the dashboard, one for each metric:
-
- - Select the checkbox next to each item; you can also click :strong:`Select all`.
- - Select the :strong:`Separate charts` option.
- - Click :strong:`Add charts`.
-
-- To add active filters and matching metadata from each metric result to a chart as a filter:
-
- - Select the checkbox next to each item; you can also click :strong:`Select all`.
- - Select the :strong:`Add with filters` option.
- - Click :strong:`Add Chart`.
-
-
-Add events to a simple chart
--------------------------------------
-
-On the :strong:`Metrics` tab in the Metrics Sidebar, select the :strong:`Find Events` option.
-
-- To add a chart for a single event, click the event name.
-
-- To add a single chart containing one plot for each event:
-
- - Select the checkbox next to each item; you can also click :strong:`Select All`.
- - Click :strong:`Add Single Chart`.
-
-- To add multiple charts to the dashboard, one for each event:
-
- - Select the checkbox next to each item; you can also click :strong:`Select all`.
- - Click :strong:`Multiple Charts`.
-
-.. note:: New charts are always added to the bottom of a dashboard. Depending on the number of charts on your dashboard, you might need to scroll to see a chart you've just added. Hover over the top edge of a chart in a dashboard to display a control that enables you to move the chart. You can also resize a chart by clicking and dragging the corners or the side and bottom edges.
-
-
-.. _new-dashboard-next-steps:
-
-Save, share, or clear charts
-=============================================================================
-
-After adding charts to a new dashboard, you have several options:
-
-- Share the charts.
-
- If other people are interested in seeing your charts, such as for troubleshooting an issue, you can share the charts, or the entire dashboard, without having to save the dashboard.
-
- To share a chart, open the :strong:`Chart actions` menu by clicking the |more| icon in the top right of a chart and select :strong:`Share`.
-
- For more details about sharing charts, see :ref:`sharing-a-chart`.
-
- To share the dashboard, open the :strong:`Dashboard actions` menu by clicking the |more| icon in the top right of the dashboard and select :strong:`Share`.
-
-- Save the dashboard.
-
- If you created a set of charts you want to refer to in the future, save the dashboard.
-
- To save the dashboard, open the :strong:`Dashboard actions` menu by clicking the |more| icon in the top right of the dashboard and select :strong:`Save As...`. Enter a dashboard name and the dashboard group you want to save the dashboard to. You can save the dashboard to an existing custom or user dashboard group, or you can create a new dashboard group. If you create a new dashboard group, the group is added as a Custom Dashboard group. For information about dashboard group types, see :ref:`dashboard-basics`.
-
-- Clear the charts.
-
- When you are done working with an unsaved dashboard and don't need the charts anymore, click :strong:`Clear` to remove all charts and return the dashboard to an empty state.
-
-- Exit the dashboard without saving it.
-
- If needed, you can navigate away from your charts and dashboard without saving them. The charts and dashboard are kept as an unsaved dashboard.
-
- To navigate back to your unsaved dashboard, access the Dashboards page, open the :strong:`Create` (+) menu, and click :strong:`Dashboard (unsaved)`. The unsaved dashboard is also accessible from your list of :strong:`Recent` dashboards at the top of the Dashboards page.
-
-
-Next steps
-=============================================================================
-
-- To find your metrics quickly and easily, consider using the full-featured :ref:`Metric Finder`.
-
-- To learn how to modify and configure charts, including applying additional analytics functions to make them more informative, see :ref:`chart-builder` and :ref:`gain-insights-through-chart-analytics`.
-
-- To learn how to create an event feed chart, see :ref:`dashboard-event-feed`.
diff --git a/data-visualization/dashboards/dashboard-create-customize.rst b/data-visualization/dashboards/dashboard-create-customize.rst
index 00ea44f45..7c73ec0a7 100644
--- a/data-visualization/dashboards/dashboard-create-customize.rst
+++ b/data-visualization/dashboards/dashboard-create-customize.rst
@@ -7,15 +7,7 @@ Create and customize dashboards
.. meta::
:description: Visualize metrics and create customized filters and variables to explore data in real time with dashboards in Splunk Observability Cloud.
-You can quickly visualize the metrics you monitor using Splunk Observability Cloud dashboards. This topic
-explains how to create and customize these dashboards, as well as how to customize mirrored dashboards.
-
-Prerequisites
-==================
-
-- If you are unfamiliar with dashboards or need a refresher, see :ref:`dashboard-basics`.
-
-- See :ref:`simple-charts-dashboards` for information about simple charts.
+You can quickly visualize the metrics you monitor using Splunk Observability Cloud dashboards. This topic explains how to create and customize these dashboards, as well as how to customize mirrored dashboards. If you are unfamiliar with dashboards or need a refresher, see :ref:`dashboard-basics`.
.. _create-dashboard:
diff --git a/data-visualization/dashboards/dashboard-group.rst b/data-visualization/dashboards/dashboard-group.rst
index eb055a6bc..a5ad6211e 100644
--- a/data-visualization/dashboards/dashboard-group.rst
+++ b/data-visualization/dashboards/dashboard-group.rst
@@ -23,7 +23,7 @@ To create a dashboard group from scratch, take the following steps:
#. Set write permissions if needed, then click :guilabel:`Create`. To learn more, see :ref:`about-permissions`.
#. After that, you land on a dashboard with the same name as the group. You can rename the dashboard from the dashboard's Actions menu (|more|), or begin adding charts to the group.
-For more information on creating charts, see :ref:`simple-charts-dashboards` and :ref:`create-charts`.
+For more information on creating charts, see :ref:`create-charts`.
.. _protect-dashboard:
From 67598007ace7b95865563c2367ec76754c0b9463 Mon Sep 17 00:00:00 2001
From: trangl
Date: Tue, 3 Dec 2024 11:20:23 +0100
Subject: [PATCH 05/42] Rephrase and reformat notes
---
data-visualization/charts/create-charts.rst | 24 +++++++++++----------
1 file changed, 13 insertions(+), 11 deletions(-)
diff --git a/data-visualization/charts/create-charts.rst b/data-visualization/charts/create-charts.rst
index 43e618e7f..8b66ec3eb 100644
--- a/data-visualization/charts/create-charts.rst
+++ b/data-visualization/charts/create-charts.rst
@@ -169,24 +169,26 @@ To learn more about different chart types, see :ref:`chart-types`.
The chart type you select is applied as a default to all the plots on the chart, but you can use different visualizations for individual plots. To learn more, see :ref:`plot-config-panel`.
-Edit a chart
-============
-
-To edit a chart, open it from any dashboard or the Dashboard panel of a navigator. Editing a chart is essentially identical to building a chart. See :ref:`chart-builder`.
-
-If you don't have write permissions for the dashboard containing the chart or if you are in a built-in dashboard, you have to use :guilabel:`Save as` to save the edited chart as a new chart.
-
.. _save-chart:
Save a chart
============
-When you finish creating or editing a chart, select :guilabel:`Save`, :guilabel:`Save as`, or :guilabel:`Save and close` from the :guilabel:`Chart actions` drop-down menu of the chart. The button text varies depending on how you created or opened the chart. If the button is not labeled with the option you want, you can select other options from the :guilabel:`Chart actions` menu.
+When you finish creating or editing a chart, select :guilabel:`Save`, :guilabel:`Save as`, or :guilabel:`Save and close` from the :guilabel:`Chart actions` menu of the chart. The options vary depending on how you created or opened the chart.
-If you don't have write permissions for the dashboard you are viewing, or you are in a built-in dashboard, you can't see an option to save the chart. Instead, you have to use :guilabel:`Save as` to save the chart.
+If you don't have write permissions for the dashboard you are viewing or if you are in a built-in dashboard, you can't see an option to save the chart. Instead, you have to use :guilabel:`Save as` to save the chart to another dashboard.
-If you don't want to save your changes, select :guilabel:`Close`.
+To save your changes, select :guilabel:`Close`.
.. note::
- If you select :guilabel:`Close`, you will not be prompted to save the chart, even if you have made some changes. Any unsaved changes will be lost.
+ Closing a chart doesn't prompt you to save changes. You must save your changes before closing, or unsaved changes will be lost.
+
+Edit a chart
+============
+
+To edit a chart, open it from any dashboard or the :strong:`Dashboard` panel of a navigator.
+
+ .. note:: If you don't have write permissions for the dashboard containing the chart or if you are in a built-in dashboard, you have to use :guilabel:`Save as` to save the edited chart to another dashboard.
+
+
From 7db142e696081e998065063ba98cf462e1c5dc56 Mon Sep 17 00:00:00 2001
From: trangl
Date: Tue, 3 Dec 2024 11:28:02 +0100
Subject: [PATCH 06/42] Update broken labels
---
conf.py | 2 +-
data-visualization/charts/chart-builder.rst | 12 ++++++------
.../metrics-finder-metadata-catalog.rst | 2 +-
3 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/conf.py b/conf.py
index 4515173de..689b75827 100644
--- a/conf.py
+++ b/conf.py
@@ -162,7 +162,7 @@
# An RST epilog to add variable names for feature text replacement, and non-breaking space.
rst_epilog = """
-.. |ms| replace:: Metrics Sidebar
+.. |ms| replace:: metrics sidebar
.. |mtab| replace:: Muting Rules tab
.. |sn| replace:: ServiceNow
.. |sv| replace:: secondary visualization
diff --git a/data-visualization/charts/chart-builder.rst b/data-visualization/charts/chart-builder.rst
index 5585189da..b384c5da3 100644
--- a/data-visualization/charts/chart-builder.rst
+++ b/data-visualization/charts/chart-builder.rst
@@ -47,14 +47,14 @@ If your metrics follow the naming conventions for Graphite metrics, see :ref:`gr
.. _find-metric:
-Use the Metrics Sidebar to find a metric
+Use the metrics sidebar to find a metric
-------------------------------------------------------------------
-You can also choose the signal by using the Metrics Sidebar to search for metric and histogram metric names, instead of typing one in directly. Select :strong:`Browse` next to the :strong:`Signal` field to display the Metrics Sidebar.
+You can also select the signal by using the metrics sidebar to search for metric and histogram metric names, instead of typing one in directly. Select :strong:`Browse` next to the :strong:`Signal` field to display the metrics sidebar.
-In the Metrics Sidebar, select the :strong:`Find Metrics` option to search for metrics and histogram metrics. Using the Metrics Sidebar is the same as described in :ref:`use-metrics-sidebar`, except that each selected metric is added as a plot in the chart, instead of as one or more new charts.
+In the metrics sidebar, select :strong:`Find metrics` to search for metrics and histogram metrics. Using the metrics sidebar is the same as described in :ref:`create-chart-metric-sidebar`, except that each selected metric is added as a plot in the chart, instead of as one or more new charts.
-For information about how to use the :strong:`Find Events` option, see :ref:`chart-events-as-occur`.
+For information about how to use the :strong:`Find events` option, see :ref:`chart-events-as-occur`.
.. _expression:
@@ -234,9 +234,9 @@ For background information on events, see :ref:`events-intro`.
Display events as they occur
-------------------------------------------------------------------
-The process for adding an event triggered by a :term:`detector`, or occurrences of a custom event, is essentially identical to :ref:`specifying a metric as a signal`. The only real difference is that if you :ref:`use the Metrics Sidebar `, you must select the :strong:`Find Events` option to search for detector or custom event names.
+The process for adding an event triggered by a :term:`detector`, or occurrences of a custom event, is essentially identical to :ref:`specifying a metric as a signal`. The only real difference is that if you use the metrics sidebar, you must select the :strong:`Find events` option to search for detector or custom event names.
-.. note:: If you clear the :strong:`Find Metrics` option to search only for events, none of the other search options in the Metrics Sidebar are available. You must enter text manually to find matching detector or custom event names. Similarly, if you add a filter, you can search only for metrics, not for events.
+.. note:: If you clear the :strong:`Find metrics` option to search only for events, none of the other search options in the metrics sidebar are available. You must enter text manually to find matching detector or custom event names. Similarly, if you add a filter, you can search only for metrics, not for events.
.. _event-markers:
diff --git a/metrics-and-metadata/metrics-finder-metadata-catalog.rst b/metrics-and-metadata/metrics-finder-metadata-catalog.rst
index b3f89d97a..946c3f8f7 100644
--- a/metrics-and-metadata/metrics-finder-metadata-catalog.rst
+++ b/metrics-and-metadata/metrics-finder-metadata-catalog.rst
@@ -1,7 +1,7 @@
.. _metrics-finder-and-metadata-catalog:
*****************************************************************
-Search the Metric Finder and Metadata catalog
+Search the Metric Finder and Metadata Catalog
*****************************************************************
.. meta::
From e59625f81b1b5ffd83baacfaee2ad53f212c3054 Mon Sep 17 00:00:00 2001
From: trangl
Date: Tue, 3 Dec 2024 11:30:25 +0100
Subject: [PATCH 07/42] Style fixes
---
data-visualization/charts/chart-builder.rst | 2 +-
data-visualization/dashboards/dashboards-add.rst | 6 +++---
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/data-visualization/charts/chart-builder.rst b/data-visualization/charts/chart-builder.rst
index b384c5da3..eb57c3c67 100644
--- a/data-visualization/charts/chart-builder.rst
+++ b/data-visualization/charts/chart-builder.rst
@@ -716,7 +716,7 @@ For example, for a regular wildcard query, :code:`jvm.*` returns anything that s
For Graphite wildcards, :code:`jvm.*` returns only something that has no subsequent dots in the name. For example, for :code:`jvm.*`, :code:`jvm.foo` would be returned, but :code:`jvm.foo.bar` and :code:`jvm.foo.bar.foo` would not.
-To use the Graphite wildcard, enter the appropriate Graphite syntax into the signal field, then select the Graphite wildcard option. If you are using the Metrics Sidebar, enter any search term with an asterisk between two dot (.) characters, then select :strong:`Graphite wildcard` from the search results list.
+To use the Graphite wildcard, enter the appropriate Graphite syntax into the signal field, then select the Graphite wildcard option. If you are using the metrics sidebar, enter any search term with an asterisk between two dot (.) characters, then select :strong:`Graphite wildcard` from the search results list.
When the Graphite wildcard option is selected, the ability to filter plots by dimensions is removed. Graphite naming conventions encapsulate dimension values into dot-separated strings and are in effect selected through the use of wildcards.
diff --git a/data-visualization/dashboards/dashboards-add.rst b/data-visualization/dashboards/dashboards-add.rst
index 1e9de7559..fe61231a4 100644
--- a/data-visualization/dashboards/dashboards-add.rst
+++ b/data-visualization/dashboards/dashboards-add.rst
@@ -43,9 +43,9 @@ An event feed chart shows a list of events that meet criteria you specify, inclu
- custom events that you have manually created in Splunk Infrastructure Monitoring
- custom events that have been sent in from an external source
-You can use the Metrics Sidebar to quickly add simple event feed charts to your dashboard (see :ref:`create-charts`). Click :menuselection:`Find Events` in the Metrics Sidebar to include only events in your search results.
+You can use the metrics sidebar to quickly add simple event feed charts to your dashboard (see :ref:`create-charts`). Select :menuselection:`Find events` in the metrics sidebar to include only events in your search results.
-To add charts with more robust event feeds to a dashboard, open the dashboard and then select :menuselection:`Chart` from the dashboard's Actions menu (|more|). (Alternately, you can click :guilabel:`New chart` in the placeholder image at the bottom of every dashboard.) From the chart type selector, select :menuselection:`Event Feed`. See :ref:`chart-types` for more information on Event Feed charts.
+To add charts with more robust event feeds to a dashboard, open the dashboard and then select :menuselection:`Chart` from the dashboard's Actions menu (|more|). (Alternately, you can select :guilabel:`New chart` in the placeholder image at the bottom of every dashboard.) From the chart type selector, select :menuselection:`Event Feed`. See :ref:`chart-types` for more information on Event Feed charts.
If you don't have :ref:`write permissions` for the dashboard you are viewing, or you are in a built-in dashboard, you need to select :guilabel:`Save as` to save the chart.
@@ -53,7 +53,7 @@ You can add multiple event types to the feed by adding a new plot line for each
If you add events generated when a detector triggers an alert, the severity of the alert is shown in the feed.
-Click :guilabel:`Save As` to save the event feed to the dashboard; the event feed is placed at the bottom of the dashboard. Once in the dashboard, the event feed can be moved and resized like any other chart. You can also click on custom events listed in the feed to edit or delete them.
+Select :guilabel:`Save As` to save the event feed to the dashboard; the event feed is placed at the bottom of the dashboard. Once in the dashboard, the event feed can be moved and resized like any other chart. You can also select custom events listed in the feed to edit or delete them.
When you hover over an event in a dashboard's event feed chart, a vertical line is displayed in all the charts at the time the event occurred. This feature makes it easy for you to visualize correlations between metric values and the event. (Of course, a line is displayed only when the event occurred during the time frame displayed in the dashboard.)
From 33057cab11aee25f1b6c3384526d113c45e5a506 Mon Sep 17 00:00:00 2001
From: trangl
Date: Tue, 3 Dec 2024 11:32:28 +0100
Subject: [PATCH 08/42] Add numbered steps
---
data-visualization/charts/create-charts.rst | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/data-visualization/charts/create-charts.rst b/data-visualization/charts/create-charts.rst
index 8b66ec3eb..09f15147e 100644
--- a/data-visualization/charts/create-charts.rst
+++ b/data-visualization/charts/create-charts.rst
@@ -174,11 +174,11 @@ The chart type you select is applied as a default to all the plots on the chart,
Save a chart
============
-When you finish creating or editing a chart, select :guilabel:`Save`, :guilabel:`Save as`, or :guilabel:`Save and close` from the :guilabel:`Chart actions` menu of the chart. The options vary depending on how you created or opened the chart.
+#. When you finish creating or editing a chart, select :guilabel:`Save`, :guilabel:`Save as`, or :guilabel:`Save and close` from the :guilabel:`Chart actions` menu of the chart. The options vary depending on how you created or opened the chart.
-If you don't have write permissions for the dashboard you are viewing or if you are in a built-in dashboard, you can't see an option to save the chart. Instead, you have to use :guilabel:`Save as` to save the chart to another dashboard.
+ If you don't have write permissions for the dashboard you are viewing or if you are in a built-in dashboard, you have to use :guilabel:`Save as` to save the chart to another dashboard.
-To save your changes, select :guilabel:`Close`.
+#. Select :guilabel:`Close`.
.. note::
From 01a4544c00b1dbb67068ba4865af64b99431ff2e Mon Sep 17 00:00:00 2001
From: trangl
Date: Tue, 3 Dec 2024 11:42:08 +0100
Subject: [PATCH 09/42] Remove stacked headings
---
data-visualization/charts/chart-types.rst | 5 -----
1 file changed, 5 deletions(-)
diff --git a/data-visualization/charts/chart-types.rst b/data-visualization/charts/chart-types.rst
index fca069693..02bf0a43f 100644
--- a/data-visualization/charts/chart-types.rst
+++ b/data-visualization/charts/chart-types.rst
@@ -8,11 +8,6 @@ Chart types in Splunk Observability Cloud
.. meta::
:description: Learn about different chart types and when to use each chart type in Splunk Observability Cloud
-.. _charts-overview:
-
-Overview
-====================
-
Charts in Splunk Observability Cloud are components of a dashboard. Each chart type provides a different way to represent your data:
- :ref:`graph-charts`: Display data points over a period of time. Graph charts come in four different forms.
From 1dd0ba64e4bdb8e34d0235deadd05bf9b80ee797 Mon Sep 17 00:00:00 2001
From: ada
Date: Fri, 6 Dec 2024 15:52:36 -0800
Subject: [PATCH 10/42] Add info to table of available components per region
or realm
---
get-started/service-description.rst | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/get-started/service-description.rst b/get-started/service-description.rst
index 8c1b9dc58..618de7be5 100644
--- a/get-started/service-description.rst
+++ b/get-started/service-description.rst
@@ -274,13 +274,13 @@ The following components are available for each global region. Each Cloud provid
-
* US: Oregon (us-west-2), Virginia (us-east-1)
* Europe: Dublin (eu-west-1), Frankfurt (eu-central-1), London (eu-west-2)
- * Asia Pacific: Sydney (ap-southeast-2)
+ * Asia Pacific: Sydney (ap-southeast-2), Tokyo (ap-northeast-1)
-
* US: Oregon (us-west-1)
-
* us0, us1, us2
* eu0, eu1, eu2
- * au0
+ * au0, jp0
* - Synthetic Monitoring
-
* US: Oregon (us-west-2), Virginia (us-east-1)
From b44eafdbe024b8cbb6fbcc019d4e3125f27b412b Mon Sep 17 00:00:00 2001
From: jcatera
Date: Thu, 12 Dec 2024 16:52:14 -0800
Subject: [PATCH 11/42] Adding a note that we don't officially support
compatibility with the Java agents of other vendors.
---
gdi/get-data-in/application/java/java-otel-requirements.rst | 2 ++
1 file changed, 2 insertions(+)
diff --git a/gdi/get-data-in/application/java/java-otel-requirements.rst b/gdi/get-data-in/application/java/java-otel-requirements.rst
index 86b367a1c..395f76862 100644
--- a/gdi/get-data-in/application/java/java-otel-requirements.rst
+++ b/gdi/get-data-in/application/java/java-otel-requirements.rst
@@ -9,6 +9,8 @@ Java agent compatibility and requirements
Meet the following requirements to instrument Java applications for Splunk Observability Cloud.
+.. note:: Splunk does not officially support compatibility with Java agents from other vendors.
+
.. _java-requirements:
Make sure you are using compatible Java and JVM versions
From e497706602debc9a9be7b4a30ba9369e79d53108 Mon Sep 17 00:00:00 2001
From: Bri Hillmer
Date: Fri, 13 Dec 2024 10:07:16 -0700
Subject: [PATCH 12/42] add expectation note
---
_templates/layout.html | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/_templates/layout.html b/_templates/layout.html
index 553856012..92c05200f 100644
--- a/_templates/layout.html
+++ b/_templates/layout.html
@@ -181,8 +181,8 @@ Was this
Feedback submitted, thanks!
-
- Did you know that you can edit this page?
Learn how!
+
+ We review and resolve documentation feedback based on the severity of the issue reported, as well as an assessment of the potential number of customers who might be affected. If you have a question about using Splunk software, we encourage you to check Splunk Answers or Splunk community Slack to see if similar questions have been answered, or to post your question for others to answer. Alternatively, if you have an active support entitlement and believe that your situation is caused by a product defect, file a support case via the Support portal
https://login.splunk.com/page/sso_redirect?type=portal.
From 3fd2e4b87606b9c48a41f06ccf869c85e3c9cd01 Mon Sep 17 00:00:00 2001
From: Bri Hillmer
Date: Fri, 13 Dec 2024 10:39:08 -0700
Subject: [PATCH 13/42] add text about migration
---
_templates/layout.html | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/_templates/layout.html b/_templates/layout.html
index 92c05200f..90a909bbf 100644
--- a/_templates/layout.html
+++ b/_templates/layout.html
@@ -182,7 +182,11 @@ Was this
Feedback submitted, thanks!
- We review and resolve documentation feedback based on the severity of the issue reported, as well as an assessment of the potential number of customers who might be affected. If you have a question about using Splunk software, we encourage you to check Splunk Answers or Splunk community Slack to see if similar questions have been answered, or to post your question for others to answer. Alternatively, if you have an active support entitlement and believe that your situation is caused by a product defect, file a support case via the Support portal
https://login.splunk.com/page/sso_redirect?type=portal.
+ We are currently moving to a new documentation site. Expect a delay in responding to your feedback and applying any updates based on your feedback. Thank you for your patience and understanding while we work to bring you an improved documentation experience!
+
+ We resolve documentation feedback based on the severity of the issue reported, as well as an assessment of the potential number of customers who might be affected.
+
+ If you have a question about using Splunk software, we encourage you to check Splunk Answers or Splunk community Slack to see if similar questions have been answered, or to post your question for others to answer. If you have an active support entitlement and believe that your situation is caused by a product defect, file a support case in the Support portal
https://login.splunk.com/page/sso_redirect?type=portal.
From e64b830c49f114910c6cb27e7c1ccc8c0cb6e652 Mon Sep 17 00:00:00 2001
From: Bri Hillmer
Date: Fri, 13 Dec 2024 10:59:56 -0700
Subject: [PATCH 14/42] reformat
---
_templates/layout.html | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/_templates/layout.html b/_templates/layout.html
index 90a909bbf..4ed4dd382 100644
--- a/_templates/layout.html
+++ b/_templates/layout.html
@@ -179,14 +179,12 @@ Was this
-
Feedback submitted, thanks!
+ Feedback submitted, thank you! We resolve documentation feedback based on the severity of the issue reported, as well as an assessment of the potential number of customers who might be affected.
+
+ If you have a question about using Splunk software, we encourage you to check Splunk Answers or Splunk community Slack to see if similar questions have been answered, or to post your question for others to answer. If you have an active support entitlement and believe that your situation is caused by a product defect, file a support case in the Support portal
https://login.splunk.com/page/sso_redirect?type=portal.
We are currently moving to a new documentation site. Expect a delay in responding to your feedback and applying any updates based on your feedback. Thank you for your patience and understanding while we work to bring you an improved documentation experience!
-
- We resolve documentation feedback based on the severity of the issue reported, as well as an assessment of the potential number of customers who might be affected.
-
- If you have a question about using Splunk software, we encourage you to check Splunk Answers or Splunk community Slack to see if similar questions have been answered, or to post your question for others to answer. If you have an active support entitlement and believe that your situation is caused by a product defect, file a support case in the Support portal
https://login.splunk.com/page/sso_redirect?type=portal.
From c52659f8b64cf8d0010838f8a8cfddf85c5e6652 Mon Sep 17 00:00:00 2001
From: ada
Date: Fri, 13 Dec 2024 19:01:05 -0800
Subject: [PATCH 15/42] Adds the instructions for a common use case -- to send
an alert when a test fails
---
synthetics/test-config/synth-alerts.rst | 48 ++++++++++++++++++++-----
1 file changed, 40 insertions(+), 8 deletions(-)
diff --git a/synthetics/test-config/synth-alerts.rst b/synthetics/test-config/synth-alerts.rst
index b1a852ddb..aed8dc931 100644
--- a/synthetics/test-config/synth-alerts.rst
+++ b/synthetics/test-config/synth-alerts.rst
@@ -11,32 +11,64 @@ In Splunk Observability Cloud, detectors monitor your tests and metrics for anom
To learn more about advanced alerts and detectors in Splunk Observability Cloud, see :ref:`get-started-detectoralert`. Read on to learn about creating static threshold detectors specific to Synthetics.
-Use cases for detectors in Synthetics
+Types of detectors in Synthetics
=======================================
-You can use detectors to alert on metrics at the test level, or at the page level or synthetic transaction level for Browser tests. The following table provides example use cases for detectors at each of these levels:
+In Synthetics, there are detectors to alert on metrics at the test level, at the page level, or at the synthetic transaction level for browser tests. The following table explains each of these detector types:
.. list-table::
:header-rows: 1
:widths: 25 75
* - :strong:`Detector type`
- - :strong:`Use case`
+ - :strong:`Description`
* - Test-level detectors
- - | Create test-level detectors to trigger alerts on metrics that correspond to the entire test.
+ - | Test-level detectors send alerts on metrics that correspond to an entire test.
|
- | For example, alert when the count of failed runs, % Uptime, or duration of the entire test exceeds a given threshold.
+ | Examples: Send an alert when the count of failed runs, % uptime, or duration of the entire test exceeds a given threshold.
* - Page-level detectors
- - | In Browser tests, create page-level detectors to trigger alerts on metrics corresponding to a single page within a test. For example, alert when the DOM load time, largest contentful paint (LCP), or total image size on a given page exceeds a given threshold.
+ - | Page-level detectors send alerts on metrics that correspond to a single page within a browser test.
+ |
+ | Examples: Send an alert when the DOM load time, largest contentful paint (LCP), or total image size on a given page exceeds a given threshold.
|
| If you don't scope your alerts to the page level for page-level metrics, the detector monitors the average metric value across pages. See :ref:`page-level-detector` to learn more.
* - Transaction-level detectors
- - | In Browser tests, create synthetic transaction-level detectors to trigger alerts on metrics based on a synthetic transaction within a test.
+ - | Synthetic transaction-level detectors send alerts on metrics that correspond to a synthetic transaction within a browser test.
|
- | You can alert on the three transaction-level metrics that Splunk Synthetic Monitoring captures: Duration, Requests, and Size. See :ref:`transaction-level-detector` to learn more.
+ | Examples: Send an alert on the three transaction-level metrics that Splunk Synthetic Monitoring captures (duration, requests, and size). See :ref:`transaction-level-detector` to learn more.
+
+
+Sample use case: Send an alert when a synthetic test fails
+===============================================================
+
+You can set up a detector while initially creating or editing a test, or from the results view for a particular test. A detector can track one or multiple Synthetic Monitoring tests of the same type.
+
+To set up a detector, do one of the following:
+
+* While creating or editing a test, select :guilabel:`Create detector`. The detector dialog box opens.
+* From the :guilabel:`Test results` page for a particular test, select :guilabel:`Create detector`. The detector dialog box opens.
+
+In the detector dialog box, enter the following fields:
+
+#. In the test name list, select the tests you want to include in your detector. Best practice is to select tests that have a similar run length.
+#. In the metric list, select :strong:`Uptime`. The uptime metric is 0 when the test fails.
+#. In :strong:`+ Add filters` don't add filters for :guilabel:`failed` or :guilabel:`success`. Omit these filters to ensure that the detector sees all datapoints for the test run.
+
+#. In the :guilabel:`Alert details` section, enter the following:
+
+ * :guilabel:`Trigger threshold`: The threshold to trigger the alert.
+ * :guilabel:`Orientation`: Only available for uptime metric. Specify whether the metric must fall below or exceed the threshold to trigger the alert.
+ * :guilabel:`Violates threshold`: How many times the metric must violate the threshold to trigger the alert.
+ * :guilabel:`Split by location`: Select whether to split the detector by test location. If you don't filter by location, the detector monitors the average value across all locations.
+
+#. Use the severity selector to select the severity of the alert.
+#. Add recipients.
+#. Select :guilabel:`Activate`.
+
+Your detector is now set up to check for failed test runs every minute and to send an alert based on your settings in :guilabel:`Alert details`.
.. _synth-detector-setup:
From c85d6b65fe16933623e075bfb89357dd0a333399 Mon Sep 17 00:00:00 2001
From: ada
Date: Fri, 13 Dec 2024 19:36:03 -0800
Subject: [PATCH 16/42] Updates on wording
---
synthetics/test-config/synth-alerts.rst | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/synthetics/test-config/synth-alerts.rst b/synthetics/test-config/synth-alerts.rst
index aed8dc931..315813d04 100644
--- a/synthetics/test-config/synth-alerts.rst
+++ b/synthetics/test-config/synth-alerts.rst
@@ -44,7 +44,7 @@ In Synthetics, there are detectors to alert on metrics at the test level, at the
Sample use case: Send an alert when a synthetic test fails
===============================================================
-You can set up a detector while initially creating or editing a test, or from the results view for a particular test. A detector can track one or multiple Synthetic Monitoring tests of the same type.
+You can set up a detector while initially creating or editing a test, or from the results view for a particular test. A detector can track one or more synthetic tests.
To set up a detector, do one of the following:
@@ -60,15 +60,15 @@ In the detector dialog box, enter the following fields:
#. In the :guilabel:`Alert details` section, enter the following:
* :guilabel:`Trigger threshold`: The threshold to trigger the alert.
- * :guilabel:`Orientation`: Only available for uptime metric. Specify whether the metric must fall below or exceed the threshold to trigger the alert.
+ * :guilabel:`Orientation`: Whether the metric must fall below or exceed the threshold to trigger the alert.
* :guilabel:`Violates threshold`: How many times the metric must violate the threshold to trigger the alert.
- * :guilabel:`Split by location`: Select whether to split the detector by test location. If you don't filter by location, the detector monitors the average value across all locations.
+ * :guilabel:`Split by location`: Whether to split the detector by test location. If you don't split by location, the detector monitors the average value across all locations.
-#. Use the severity selector to select the severity of the alert.
+#. Use the severity selector to set the severity of the alert.
#. Add recipients.
#. Select :guilabel:`Activate`.
-Your detector is now set up to check for failed test runs every minute and to send an alert based on your settings in :guilabel:`Alert details`.
+Your detector is now set up to check for failed tests every minute and to send an alert based on your settings in :guilabel:`Alert details`.
.. _synth-detector-setup:
From bcc9b1aa6a8ce28ee0817abfbfa089966aae08d8 Mon Sep 17 00:00:00 2001
From: jcatera
Date: Fri, 13 Dec 2024 19:50:11 -0800
Subject: [PATCH 17/42] Replaced the description of two synth metrics with text
from an engineer that was verified as accurate. I rewrote the description to
ensure it was consistent with the text we have for other metric descriptions.
---
synthetics/api-test/api-test-metrics.rst | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/synthetics/api-test/api-test-metrics.rst b/synthetics/api-test/api-test-metrics.rst
index 8f612de4e..b1c225967 100644
--- a/synthetics/api-test/api-test-metrics.rst
+++ b/synthetics/api-test/api-test-metrics.rst
@@ -108,9 +108,9 @@ Each occurrence of a test from a particular device and location at a specific ti
* - Uptime
- ``synthetics.run.uptime.percent``
- - The percentage of non-failed test runs. Uptime is calculated by taking the average score of all runs in the selected time frame, where a successful run receives a score of 100 and a failure receives a score of 0.
+ - The uptime of a test run: the value will be 0 if the test run failed and 100 if it succeeded.
* - Downtime
- ``synthetics.run.downtime.percent``
- - The percentage of failed runs within the selected time frame. Downtime is calculated by taking the average score of all runs in the selected time frame, where a failed run receives a score of 100 and a successful run receives a score of 0.
+ - The downtime of a test run: The value will be 100 if the test run failed and 0 if it succeeded.
From 736e8de8df39391ff5adc903fbda129243375266 Mon Sep 17 00:00:00 2001
From: ada
Date: Fri, 13 Dec 2024 20:07:49 -0800
Subject: [PATCH 18/42] Updates on wording
---
synthetics/test-config/synth-alerts.rst | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/synthetics/test-config/synth-alerts.rst b/synthetics/test-config/synth-alerts.rst
index 315813d04..bac8998fe 100644
--- a/synthetics/test-config/synth-alerts.rst
+++ b/synthetics/test-config/synth-alerts.rst
@@ -68,7 +68,7 @@ In the detector dialog box, enter the following fields:
#. Add recipients.
#. Select :guilabel:`Activate`.
-Your detector is now set up to check for failed tests every minute and to send an alert based on your settings in :guilabel:`Alert details`.
+Your detector is now set up to check for failed test runs every minute and to send an alert based on your settings in :guilabel:`Alert details`.
.. _synth-detector-setup:
From 95d51f59ce91b45d0c9bf343b7990f50acdb23b4 Mon Sep 17 00:00:00 2001
From: ada
Date: Fri, 13 Dec 2024 21:52:30 -0800
Subject: [PATCH 19/42] First pass on normalizing, alphabetizing,
deduplicating, and restricting the advanced config section to just advanced
configs
---
index.rst | 6 +-
synthetics/api-test/api-test.rst | 2 +-
synthetics/test-config/built-in-variables.rst | 2 +-
synthetics/test-config/devices.rst | 25 +++++
synthetics/test-config/global-variables.rst | 4 +-
synthetics/test-config/private-locations.rst | 2 +-
synthetics/test-config/public-locations.rst | 2 +-
synthetics/test-config/syn-downtimes.rst | 2 +-
synthetics/test-config/synth-alerts.rst | 2 +-
synthetics/test-config/test-config.rst | 101 ++----------------
.../{test-kpis => test-status}/test-kpis.rst | 0
synthetics/test-status/test-status.rst | 50 +++++++++
synthetics/uptime-test/uptime-test.rst | 2 +-
13 files changed, 93 insertions(+), 107 deletions(-)
create mode 100644 synthetics/test-config/devices.rst
rename synthetics/{test-kpis => test-status}/test-kpis.rst (100%)
create mode 100644 synthetics/test-status/test-status.rst
diff --git a/index.rst b/index.rst
index e4235e118..05df6fe13 100644
--- a/index.rst
+++ b/index.rst
@@ -758,17 +758,17 @@ To keep up to date with changes in the products, see the Splunk Observability Cl
.. toctree::
:maxdepth: 3
- Uptime Tests for port and HTTP TOGGLE
+ Uptime tests for port and HTTP TOGGLE
.. toctree::
:maxdepth: 3
- Use an API test to test an endpoint TOGGLE
+ API tests for endpoints TOGGLE
.. toctree::
:maxdepth: 3
- synthetics/test-kpis/test-kpis
+ Test status TOGGLE
.. toctree::
:maxdepth: 3
diff --git a/synthetics/api-test/api-test.rst b/synthetics/api-test/api-test.rst
index 97a7c0f12..6e0e204d6 100644
--- a/synthetics/api-test/api-test.rst
+++ b/synthetics/api-test/api-test.rst
@@ -1,7 +1,7 @@
.. _api-test:
************************************
-API Tests for endpoint
+API tests for endpoints
************************************
.. meta::
diff --git a/synthetics/test-config/built-in-variables.rst b/synthetics/test-config/built-in-variables.rst
index 0bedf04ef..ca3977716 100644
--- a/synthetics/test-config/built-in-variables.rst
+++ b/synthetics/test-config/built-in-variables.rst
@@ -1,7 +1,7 @@
.. _built-in-variables:
***********************************
-Built-in variables to use in tests
+Built-in variables
***********************************
.. meta::
diff --git a/synthetics/test-config/devices.rst b/synthetics/test-config/devices.rst
new file mode 100644
index 000000000..b3d404e82
--- /dev/null
+++ b/synthetics/test-config/devices.rst
@@ -0,0 +1,25 @@
+.. _devices:
+
+*****************************************
+Devices
+*****************************************
+
+.. meta::
+ :description: When you set up a test in Splunk Synthetic Monitoring, you can configure the viewport and network connection of the device from which the test is simulated.
+
+When you set up a test in Splunk Synthetic Monitoring, you can configure the viewport and network connection of the device from which the test is simulated.
+
+Because Browser tests capture the visual experience of a page, while Uptime and API tests only capture response data, viewport applies to Browser tests only. Network connection applies to all test types.
+
+
+Viewport
+===================================
+Browser tests in Splunk Synthetic Monitoring capture the visual experience of a user interacting with your application. The viewport is the framed area on a device's screen for viewing information, such as the browser window on a desktop. By default, Browser tests run from a desktop-sized viewport. You can configure tests to run from other viewport sizes to test the user experience from a variety of window sizes and device types.
+
+When you set up a test, you can choose the viewport size from a list of common devices, or set a custom viewport by height and width.
+
+Network connection
+===================================
+You can run Browser, Uptime, or API tests to simulate network connections of various latencies, including Mobile LTE, Mobile 3G, DSL, Mobile 5G, and cable internet. Testing your site from a variety of connection types lets you monitor the experience of users in a variety of settings.
+
+
diff --git a/synthetics/test-config/global-variables.rst b/synthetics/test-config/global-variables.rst
index ff92d4b04..f37798c57 100644
--- a/synthetics/test-config/global-variables.rst
+++ b/synthetics/test-config/global-variables.rst
@@ -1,13 +1,13 @@
.. _global-variables:
*****************************************
-Create and use global variables
+Global variables
*****************************************
.. meta::
:description: Define a variable that you can use in multiple browser and API tests in Splunk Synthetic Monitoring.
-Define a global variable once, and then use it across all of your browser and API tests.
+Global variables are pre-saved, reusable variables that you define once and use across all your browser and API tests.
How can you use a global variable?
diff --git a/synthetics/test-config/private-locations.rst b/synthetics/test-config/private-locations.rst
index fc31ea30e..60918a1af 100644
--- a/synthetics/test-config/private-locations.rst
+++ b/synthetics/test-config/private-locations.rst
@@ -5,7 +5,7 @@ Private locations
*****************
.. meta::
- :description: Run synthetic tests from an internal site or private web application to quickly find defects using Splunk Synthetic Monitoring.
+ :description: Run synthetic tests from private locations such as internal sites, private web applications, or private networks.
A private location is a software package that offers a quick and easy deployment of Splunk Synthetic Monitoring solutions beyond the public network so that you can find, fix, and prevent web performance defects on any internal web application, in any environment - whether inside or outside of your firewalls. Private locations allow Splunk Synthetics Monitoring users to test sooner in the development cycle and against internal sites or applications that aren't available to the public.
diff --git a/synthetics/test-config/public-locations.rst b/synthetics/test-config/public-locations.rst
index 412071af4..9babdfdc5 100644
--- a/synthetics/test-config/public-locations.rst
+++ b/synthetics/test-config/public-locations.rst
@@ -5,7 +5,7 @@ Public locations
*****************
.. meta::
- :description: Run synthetic tests from locations set by infrastructure and connectivity providers to simulate performance for users in that location.
+ :description: Run synthetic tests from locations set by infrastructure and connectivity providers to simulate performance from a range of checkpoints around the world.
Public locations are global checkpoints from which you can run synthetic tests to simulate performance for users in that location.
diff --git a/synthetics/test-config/syn-downtimes.rst b/synthetics/test-config/syn-downtimes.rst
index 0b367dbae..b9e10d419 100644
--- a/synthetics/test-config/syn-downtimes.rst
+++ b/synthetics/test-config/syn-downtimes.rst
@@ -1,7 +1,7 @@
.. _syn-downtimes:
************************************************************
-Schedule a downtime configuration
+Downtime
************************************************************
diff --git a/synthetics/test-config/synth-alerts.rst b/synthetics/test-config/synth-alerts.rst
index b1a852ddb..43743880a 100644
--- a/synthetics/test-config/synth-alerts.rst
+++ b/synthetics/test-config/synth-alerts.rst
@@ -1,7 +1,7 @@
.. _synth-alerts:
************************************************************
-Set up detectors and alerts in Splunk Synthetic Monitoring
+Detectors and alerts
************************************************************
.. meta::
diff --git a/synthetics/test-config/test-config.rst b/synthetics/test-config/test-config.rst
index e4a8e0089..3b3ca026a 100644
--- a/synthetics/test-config/test-config.rst
+++ b/synthetics/test-config/test-config.rst
@@ -9,92 +9,19 @@ Advanced test configurations
.. toctree::
- synth-alerts
built-in-variables
+ synth-alerts
+ devices
+ syn-downtimes
global-variables
- public-locations
private-locations
+ public-locations
rum-synth
try-now
- syn-downtimes
+
To simulate diverse types of traffic to your site or application, use a range of configuration options to customize each of your tests.
-========================================================================================
-Devices
-========================================================================================
-
-When you set up a test in Splunk Synthetic Monitoring, you can configure the viewport and network connection of the device from which the test is simulated.
-
-Because Browser tests capture the visual experience of a page, while Uptime and API tests only capture response data, viewport applies to Browser tests only. Network connection applies to all test types.
-
-----------------------------------------------------------------------------------------
-Viewport
-----------------------------------------------------------------------------------------
-Browser tests in Splunk Synthetic Monitoring capture the visual experience of a user interacting with your application. The viewport is the framed area on a device's screen for viewing information, such as the browser window on a desktop. By default, Browser tests run from a desktop-sized viewport. You can configure tests to run from other viewport sizes to test the user experience from a variety of window sizes and device types.
-
-When you set up a test, you can choose the viewport size from a list of common devices, or set a custom viewport by height and width.
-
-----------------------------------------------------------------------------------------
-Network connection
-----------------------------------------------------------------------------------------
-You can run Browser, Uptime, or API tests to simulate network connections of various latencies, including Mobile LTE, Mobile 3G, DSL, Mobile 5G, and cable internet. Testing your site from a variety of connection types lets you monitor the experience of users in a variety of settings.
-
-========================================================================================
-Variables
-========================================================================================
-Use variables to fill in fields, provide URLs, and enter other information during your tests.
-
-.. list-table::
- :header-rows: 1
- :widths: 20 80
-
- * - :strong:`Variable type`
- - :strong:`Description`
- * - Built-in variables
- - Built-in variables such as random values, dates and times, or location names, for use in your Browser and API Tests. See :ref:`built-in-variables` to learn more.
- * - Global variables
- - Pre-saved, reusable variables you can define once and use across all your Browser and API tests. See :ref:`global-variables` to learn more.
-
-========================================================================================
-Locations
-========================================================================================
-Specify locations for your tests to simulate traffic from a range of checkpoints around the world, or use private locations to test sites from within a private network.
-
-For more, see:
-
-* :ref:`public-locations`
-* :ref:`private-locations`
-
-.. * See :ref:`private-locations` to set up private locations.
-
-
-========================================================================================
-Test state and current status
-========================================================================================
-You can use the play and pause buttons in the more menu (|more|) of your tests to pause or resume data collection.
-
-The current status of a test is updated every time you load the :guilabel:`Test Overview` page in Splunk Synthetic Monitoring. The following table describes the possible status types for each test.
-
-.. list-table::
- :header-rows: 1
- :widths: 20, 80
-
- * - :strong:`Current status`
- - :strong:`Description`
-
- * - Pending
- - Splunk Synthetic Monitoring is still retrieving the status of this test.
-
- * - Available
- - The test is functioning properly. If the test is active, data is being collected at the set interval and can be viewed in the :guilabel:`Test History` page. If the test is paused, it can be unpaused and will resume collecting data.
-
- * - No Data
- - The test isn't currently collecting data.
-
- * - Failure
- - The test encountered a failure.
-
========================================================================================
Test naming conventions
========================================================================================
@@ -106,22 +33,6 @@ Choosing informative names for your tests and alerts helps organize content. Her
.. image:: /_images/synthetics/ButtercupGames-naming-convention.png
:width: 60%
- :alt: This image shows two Browser tests with the prefix [ButtercupGames].
-
-
-================================
-Troubleshoot broken tests
-================================
-
-See, :ref:`syn-troubleshoot`.
+ :alt: This image shows two browser tests with the prefix [ButtercupGames].
-
-========================================================================================
-Filter tests
-========================================================================================
-You can filter by test type, key-value pairs, and more.
-
-.. image:: /_images/synthetics/syn-filter-test.png
- :width: 60%
- :alt: This image shows the filter env:prod for all tests on the Synthetic homepage..
diff --git a/synthetics/test-kpis/test-kpis.rst b/synthetics/test-status/test-kpis.rst
similarity index 100%
rename from synthetics/test-kpis/test-kpis.rst
rename to synthetics/test-status/test-kpis.rst
diff --git a/synthetics/test-status/test-status.rst b/synthetics/test-status/test-status.rst
new file mode 100644
index 000000000..9de75e18c
--- /dev/null
+++ b/synthetics/test-status/test-status.rst
@@ -0,0 +1,50 @@
+.. _test-status:
+
+***************************************************
+Test status
+***************************************************
+
+.. meta::
+ :description: words
+
+
+.. toctree::
+
+ test-kpis
+
+========================================================================================
+Test state and current status
+========================================================================================
+You can use the play and pause buttons in the more menu (|more|) of your tests to pause or resume data collection.
+
+The current status of a test is updated every time you load the :guilabel:`Test Overview` page in Splunk Synthetic Monitoring. The following table describes the possible status types for each test.
+
+.. list-table::
+ :header-rows: 1
+ :widths: 20, 80
+
+ * - :strong:`Current status`
+ - :strong:`Description`
+
+ * - Pending
+ - Splunk Synthetic Monitoring is still retrieving the status of this test.
+
+ * - Available
+ - The test is functioning properly. If the test is active, data is being collected at the set interval and can be viewed in the :guilabel:`Test History` page. If the test is paused, it can be unpaused and will resume collecting data.
+
+ * - No Data
+ - The test isn't currently collecting data.
+
+ * - Failure
+ - The test encountered a failure.
+
+
+
+========================================================================================
+Filter tests
+========================================================================================
+You can filter by test type, key-value pairs, and more.
+
+.. image:: /_images/synthetics/syn-filter-test.png
+ :width: 60%
+ :alt: This image shows the filter env:prod for all tests on the Synthetic homepage..
diff --git a/synthetics/uptime-test/uptime-test.rst b/synthetics/uptime-test/uptime-test.rst
index afa21464b..8b7dbe1cc 100644
--- a/synthetics/uptime-test/uptime-test.rst
+++ b/synthetics/uptime-test/uptime-test.rst
@@ -2,7 +2,7 @@
.. _uptime-test:
**************************************************
-Uptime Tests for port and HTTP
+Uptime tests for port and HTTP
**************************************************
.. meta::
From 666498f367ec3e03768cd96d0df9f98338e8dc40 Mon Sep 17 00:00:00 2001
From: ada
Date: Mon, 16 Dec 2024 14:33:43 -0800
Subject: [PATCH 20/42] Added screenshot per request from PM
---
_images/synthetics/detector-one.png | Bin 0 -> 148060 bytes
synthetics/test-config/synth-alerts.rst | 6 ++++++
2 files changed, 6 insertions(+)
create mode 100644 _images/synthetics/detector-one.png
diff --git a/_images/synthetics/detector-one.png b/_images/synthetics/detector-one.png
new file mode 100644
index 0000000000000000000000000000000000000000..1d91cebe84807b0ae6f6ef41d6588faf9a673ddd
GIT binary patch
literal 148060
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