From d90fc061edac8c58edb9b0b608a6831cda38c8a6 Mon Sep 17 00:00:00 2001 From: ada Date: Tue, 25 Feb 2025 16:52:21 -0800 Subject: [PATCH 001/100] [O11YDOCS-6514] Instrument browser applications --- rum/instrument-browser-apps.rst | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 rum/instrument-browser-apps.rst diff --git a/rum/instrument-browser-apps.rst b/rum/instrument-browser-apps.rst new file mode 100644 index 000000000..1883080c3 --- /dev/null +++ b/rum/instrument-browser-apps.rst @@ -0,0 +1,18 @@ +.. _instrument-browser-apps: + +********************************************************************* +Instrument browser applications +********************************************************************* + +.. meta:: + :description: PLACEHOLDER. + + +PLACEHOLDER + +See also +===================================================================== + +* :ref:`built-in-variables` +* :ref:`global-variables` + From 2e151d13af814f09d6a8734a3f3e1ddd087af771 Mon Sep 17 00:00:00 2001 From: ada Date: Fri, 14 Mar 2025 11:10:42 -0700 Subject: [PATCH 002/100] Moved the new file --- {rum => gdi/get-data-in/rum/browser}/instrument-browser-apps.rst | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {rum => gdi/get-data-in/rum/browser}/instrument-browser-apps.rst (100%) diff --git a/rum/instrument-browser-apps.rst b/gdi/get-data-in/rum/browser/instrument-browser-apps.rst similarity index 100% rename from rum/instrument-browser-apps.rst rename to gdi/get-data-in/rum/browser/instrument-browser-apps.rst From 9aea0b09bc7bcfaae17711c3ae248aedd3e75b5d Mon Sep 17 00:00:00 2001 From: ada Date: Fri, 14 Mar 2025 11:18:03 -0700 Subject: [PATCH 003/100] Added the new file to the toctree --- gdi/get-data-in/rum/browser/get-browser-data-in.rst | 1 + gdi/get-data-in/rum/browser/instrument-browser-apps.rst | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/gdi/get-data-in/rum/browser/get-browser-data-in.rst b/gdi/get-data-in/rum/browser/get-browser-data-in.rst index de96f9368..9f1b36aa6 100644 --- a/gdi/get-data-in/rum/browser/get-browser-data-in.rst +++ b/gdi/get-data-in/rum/browser/get-browser-data-in.rst @@ -14,6 +14,7 @@ Instrument browser-based web applications for Splunk RUM Configuration Manual instrumentation Migrate manual instrumentation + Add browser JavaScript symbolication Data collected Instrumentation-specific data Errors collected diff --git a/gdi/get-data-in/rum/browser/instrument-browser-apps.rst b/gdi/get-data-in/rum/browser/instrument-browser-apps.rst index 1883080c3..ac14a4f70 100644 --- a/gdi/get-data-in/rum/browser/instrument-browser-apps.rst +++ b/gdi/get-data-in/rum/browser/instrument-browser-apps.rst @@ -1,7 +1,7 @@ -.. _instrument-browser-apps: +.. _add-browser-js-symbolication: ********************************************************************* -Instrument browser applications +Add browser JavaScript symbolication ********************************************************************* .. meta:: From d6abcd2392f31b06d6fad70625667ff20ed04c85 Mon Sep 17 00:00:00 2001 From: ada Date: Fri, 14 Mar 2025 11:20:50 -0700 Subject: [PATCH 004/100] Updated --- .../rum/browser/instrument-browser-apps.rst | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/gdi/get-data-in/rum/browser/instrument-browser-apps.rst b/gdi/get-data-in/rum/browser/instrument-browser-apps.rst index ac14a4f70..e2232341a 100644 --- a/gdi/get-data-in/rum/browser/instrument-browser-apps.rst +++ b/gdi/get-data-in/rum/browser/instrument-browser-apps.rst @@ -8,11 +8,23 @@ Add browser JavaScript symbolication :description: PLACEHOLDER. +This page explains how to upload JavaScript sourcemap files using a CLI or Webpack build plugin that you can integrate into your CI pipeline during the building of your web application. + + +Use the CLI +===================================================================== + PLACEHOLDER + +Use the Webpack build plugin +===================================================================== + +PLACEHOLDER + + See also ===================================================================== -* :ref:`built-in-variables` -* :ref:`global-variables` +PLACEHOLDER From 3c89536a2c088e75e051b04f6a974d7aad220030 Mon Sep 17 00:00:00 2001 From: ada Date: Fri, 14 Mar 2025 11:42:09 -0700 Subject: [PATCH 005/100] Renamed the new file --- ...strument-browser-apps.rst => add-browser-js-symbolication.rst} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename gdi/get-data-in/rum/browser/{instrument-browser-apps.rst => add-browser-js-symbolication.rst} (100%) diff --git a/gdi/get-data-in/rum/browser/instrument-browser-apps.rst b/gdi/get-data-in/rum/browser/add-browser-js-symbolication.rst similarity index 100% rename from gdi/get-data-in/rum/browser/instrument-browser-apps.rst rename to gdi/get-data-in/rum/browser/add-browser-js-symbolication.rst From c1a6819cb7e9f466e5039d7448b8b12a555f0c15 Mon Sep 17 00:00:00 2001 From: ada Date: Wed, 26 Mar 2025 21:10:51 -0700 Subject: [PATCH 006/100] Updated the title and filename --- .../browser/add-browser-js-symbolication.rst | 42 ++++++++++++++++--- .../rum/browser/get-browser-data-in.rst | 2 +- 2 files changed, 38 insertions(+), 6 deletions(-) diff --git a/gdi/get-data-in/rum/browser/add-browser-js-symbolication.rst b/gdi/get-data-in/rum/browser/add-browser-js-symbolication.rst index e2232341a..76f823989 100644 --- a/gdi/get-data-in/rum/browser/add-browser-js-symbolication.rst +++ b/gdi/get-data-in/rum/browser/add-browser-js-symbolication.rst @@ -1,30 +1,62 @@ -.. _add-browser-js-symbolication: +.. _set-up-javascript-source-mapping: ********************************************************************* -Add browser JavaScript symbolication +Set up JavaScript source mapping ********************************************************************* + .. meta:: :description: PLACEHOLDER. -This page explains how to upload JavaScript sourcemap files using a CLI or Webpack build plugin that you can integrate into your CI pipeline during the building of your web application. +This page explains how to upload JavaScript source mapping using a CLI or Webpack build plugin that you can integrate into your CI pipeline during the building of your web application. + + +(Optional) Add the sourcesContent property to your sourcemap file +===================================================================== + +PLACEHOLDER -Use the CLI +Use the splunk-rum CLI ===================================================================== PLACEHOLDER +Installation +--------------------------------------------------------------------- + +PLACEHOLDER + + +CLI usage for iOS apps +--------------------------------------------------------------------- + +PLACEHOLDER + + +CLI usage for Android apps +--------------------------------------------------------------------- + +PLACEHOLDER + + +CLI usage for browser apps +--------------------------------------------------------------------- + +PLACEHOLDER + + Use the Webpack build plugin ===================================================================== PLACEHOLDER -See also +Deploy minified files to production ===================================================================== PLACEHOLDER + diff --git a/gdi/get-data-in/rum/browser/get-browser-data-in.rst b/gdi/get-data-in/rum/browser/get-browser-data-in.rst index 9f1b36aa6..49df2302f 100644 --- a/gdi/get-data-in/rum/browser/get-browser-data-in.rst +++ b/gdi/get-data-in/rum/browser/get-browser-data-in.rst @@ -14,7 +14,7 @@ Instrument browser-based web applications for Splunk RUM Configuration Manual instrumentation Migrate manual instrumentation - Add browser JavaScript symbolication + Set up JavaScript source mapping Data collected Instrumentation-specific data Errors collected From d48bc6ffaf9a1dc7f74bd33dedeee4ffa2ed91e3 Mon Sep 17 00:00:00 2001 From: ada Date: Wed, 26 Mar 2025 21:40:35 -0700 Subject: [PATCH 007/100] Updated the title and filename --- ...-js-symbolication.rst => set-up-javascript-source-mapping.rst} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename gdi/get-data-in/rum/browser/{add-browser-js-symbolication.rst => set-up-javascript-source-mapping.rst} (100%) diff --git a/gdi/get-data-in/rum/browser/add-browser-js-symbolication.rst b/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst similarity index 100% rename from gdi/get-data-in/rum/browser/add-browser-js-symbolication.rst rename to gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst From 4950a0aba915bf4afd89d059f9f80ecde71e1e04 Mon Sep 17 00:00:00 2001 From: ada Date: Thu, 27 Mar 2025 19:46:12 -0700 Subject: [PATCH 008/100] Updated the headings --- .../rum/browser/get-browser-data-in.rst | 2 +- .../set-up-javascript-source-mapping.rst | 22 +++++++++---------- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/gdi/get-data-in/rum/browser/get-browser-data-in.rst b/gdi/get-data-in/rum/browser/get-browser-data-in.rst index 49df2302f..6fb55047f 100644 --- a/gdi/get-data-in/rum/browser/get-browser-data-in.rst +++ b/gdi/get-data-in/rum/browser/get-browser-data-in.rst @@ -14,7 +14,7 @@ Instrument browser-based web applications for Splunk RUM Configuration Manual instrumentation Migrate manual instrumentation - Set up JavaScript source mapping + Set up application source mapping Data collected Instrumentation-specific data Errors collected diff --git a/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst b/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst index 76f823989..001503222 100644 --- a/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst +++ b/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst @@ -1,7 +1,7 @@ -.. _set-up-javascript-source-mapping: +.. _set-up-application-source-mapping: ********************************************************************* -Set up JavaScript source mapping +Set up application source mapping ********************************************************************* @@ -12,49 +12,47 @@ Set up JavaScript source mapping This page explains how to upload JavaScript source mapping using a CLI or Webpack build plugin that you can integrate into your CI pipeline during the building of your web application. -(Optional) Add the sourcesContent property to your sourcemap file +Install the splunk-rum CLI ===================================================================== PLACEHOLDER -Use the splunk-rum CLI +Set up JavaScript source mapping for browser-based web applications ===================================================================== -PLACEHOLDER - -Installation +Option 1: Use the splunk-rum CLI --------------------------------------------------------------------- PLACEHOLDER -CLI usage for iOS apps +Option 2: Use the Webpack build plugin --------------------------------------------------------------------- PLACEHOLDER -CLI usage for Android apps +(Optional) Add the sourcesContent property to your sourcemap file --------------------------------------------------------------------- PLACEHOLDER -CLI usage for browser apps +Deploy minified files to production --------------------------------------------------------------------- PLACEHOLDER -Use the Webpack build plugin +Set up crash symbolication for iOS applications ===================================================================== PLACEHOLDER -Deploy minified files to production +Set up crash de-obfuscation for Android applications ===================================================================== PLACEHOLDER From 42ab24190e04e91ff3c9d2320b907fc2649ff19c Mon Sep 17 00:00:00 2001 From: ada Date: Thu, 27 Mar 2025 20:33:54 -0700 Subject: [PATCH 009/100] Updated the filename --- ...t-source-mapping.rst => set-up-application-source-mapping.rst} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename gdi/get-data-in/rum/browser/{set-up-javascript-source-mapping.rst => set-up-application-source-mapping.rst} (100%) diff --git a/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst b/gdi/get-data-in/rum/browser/set-up-application-source-mapping.rst similarity index 100% rename from gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst rename to gdi/get-data-in/rum/browser/set-up-application-source-mapping.rst From 03d23317372bf47f42aa21f24f5a26e439c11c71 Mon Sep 17 00:00:00 2001 From: ada Date: Thu, 27 Mar 2025 21:11:38 -0700 Subject: [PATCH 010/100] Added placeholders --- .../rum/android/get-android-data-in.rst | 1 + .../android/set-up-crash-deobfuscation.rst | 14 +++++ .../rum/browser/get-browser-data-in.rst | 2 +- .../set-up-application-source-mapping.rst | 60 ------------------- .../set-up-javascript-source-mapping.rst | 39 ++++++++++++ gdi/get-data-in/rum/ios/get-ios-data-in.rst | 1 + .../rum/ios/set-up-crash-symbolication.rst | 14 +++++ gdi/get-data-in/rum/rum-instrumentation.rst | 9 +++ 8 files changed, 79 insertions(+), 61 deletions(-) create mode 100644 gdi/get-data-in/rum/android/set-up-crash-deobfuscation.rst delete mode 100644 gdi/get-data-in/rum/browser/set-up-application-source-mapping.rst create mode 100644 gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst create mode 100644 gdi/get-data-in/rum/ios/set-up-crash-symbolication.rst diff --git a/gdi/get-data-in/rum/android/get-android-data-in.rst b/gdi/get-data-in/rum/android/get-android-data-in.rst index acdfa3462..50f84a084 100644 --- a/gdi/get-data-in/rum/android/get-android-data-in.rst +++ b/gdi/get-data-in/rum/android/get-android-data-in.rst @@ -14,6 +14,7 @@ Instrument Android applications for Splunk RUM Configure the instrumentation Manually instrument applications Android RUM data model + Set up crash de-obfuscation Troubleshooting Instrument your Android applications to get Real User Monitoring (RUM) data into Splunk Observability Cloud. With Splunk RUM for Mobile, you can gain insight about the performance and health of your mobile apps. diff --git a/gdi/get-data-in/rum/android/set-up-crash-deobfuscation.rst b/gdi/get-data-in/rum/android/set-up-crash-deobfuscation.rst new file mode 100644 index 000000000..e0cb958a5 --- /dev/null +++ b/gdi/get-data-in/rum/android/set-up-crash-deobfuscation.rst @@ -0,0 +1,14 @@ +.. _set-up-crash-deobfuscation: + +********************************************************************* +Set up crash de-obfuscation for Android applications +********************************************************************* + + +.. meta:: + :description: PLACEHOLDER. + + + +PLACEHOLDER + diff --git a/gdi/get-data-in/rum/browser/get-browser-data-in.rst b/gdi/get-data-in/rum/browser/get-browser-data-in.rst index 6fb55047f..e937d6f57 100644 --- a/gdi/get-data-in/rum/browser/get-browser-data-in.rst +++ b/gdi/get-data-in/rum/browser/get-browser-data-in.rst @@ -14,9 +14,9 @@ Instrument browser-based web applications for Splunk RUM Configuration Manual instrumentation Migrate manual instrumentation - Set up application source mapping Data collected Instrumentation-specific data + Set up JavaScript source mapping Errors collected API reference Troubleshooting diff --git a/gdi/get-data-in/rum/browser/set-up-application-source-mapping.rst b/gdi/get-data-in/rum/browser/set-up-application-source-mapping.rst deleted file mode 100644 index 001503222..000000000 --- a/gdi/get-data-in/rum/browser/set-up-application-source-mapping.rst +++ /dev/null @@ -1,60 +0,0 @@ -.. _set-up-application-source-mapping: - -********************************************************************* -Set up application source mapping -********************************************************************* - - -.. meta:: - :description: PLACEHOLDER. - - -This page explains how to upload JavaScript source mapping using a CLI or Webpack build plugin that you can integrate into your CI pipeline during the building of your web application. - - -Install the splunk-rum CLI -===================================================================== - -PLACEHOLDER - - -Set up JavaScript source mapping for browser-based web applications -===================================================================== - - -Option 1: Use the splunk-rum CLI ---------------------------------------------------------------------- - -PLACEHOLDER - - -Option 2: Use the Webpack build plugin ---------------------------------------------------------------------- - -PLACEHOLDER - - -(Optional) Add the sourcesContent property to your sourcemap file ---------------------------------------------------------------------- - -PLACEHOLDER - - -Deploy minified files to production ---------------------------------------------------------------------- - -PLACEHOLDER - - -Set up crash symbolication for iOS applications -===================================================================== - -PLACEHOLDER - - -Set up crash de-obfuscation for Android applications -===================================================================== - -PLACEHOLDER - - diff --git a/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst b/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst new file mode 100644 index 000000000..77aebaa9a --- /dev/null +++ b/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst @@ -0,0 +1,39 @@ +.. _set-up-javascript-source-mapping: + +********************************************************************* +Set up JavaScript source mapping +********************************************************************* + + +.. meta:: + :description: PLACEHOLDER. + + +This page explains how to set up JavaScript source mapping, which allows Splunk RUM to convert stack frames from JavaScript app errors back into a human-readable form so that you can see the exact line of source code related to an error. This conversion is available for JavaScript errors, but not for crashes. + + + +Option 1: Use the splunk-rum CLI +===================================================================== + +PLACEHOLDER + + +Option 2: Use the Webpack build plugin +===================================================================== + +PLACEHOLDER + + +(Optional) Add the sourcesContent property to your sourcemap file +===================================================================== + +PLACEHOLDER + + +Deploy minified files to production +===================================================================== + +PLACEHOLDER + + diff --git a/gdi/get-data-in/rum/ios/get-ios-data-in.rst b/gdi/get-data-in/rum/ios/get-ios-data-in.rst index bf0a96483..489c69fb2 100644 --- a/gdi/get-data-in/rum/ios/get-ios-data-in.rst +++ b/gdi/get-data-in/rum/ios/get-ios-data-in.rst @@ -14,6 +14,7 @@ Instrument iOS applications for Splunk RUM Configure the instrumentation Manually instrument applications iOS RUM data model + Set up crash symbolication Troubleshooting Instrument your iOS applications to get Real User Monitoring (RUM) data into Splunk Observability Cloud. With Splunk RUM for Mobile, you can gain insight about the performance and health of your mobile apps. diff --git a/gdi/get-data-in/rum/ios/set-up-crash-symbolication.rst b/gdi/get-data-in/rum/ios/set-up-crash-symbolication.rst new file mode 100644 index 000000000..dd523e2ae --- /dev/null +++ b/gdi/get-data-in/rum/ios/set-up-crash-symbolication.rst @@ -0,0 +1,14 @@ +.. _set-up-crash-symbolication: + +********************************************************************* +Set up crash symbolication for iOS applications +********************************************************************* + + +.. meta:: + :description: PLACEHOLDER. + + + +PLACEHOLDER + diff --git a/gdi/get-data-in/rum/rum-instrumentation.rst b/gdi/get-data-in/rum/rum-instrumentation.rst index 46d82c4b1..c6b727026 100644 --- a/gdi/get-data-in/rum/rum-instrumentation.rst +++ b/gdi/get-data-in/rum/rum-instrumentation.rst @@ -53,3 +53,12 @@ You can instrument the following types of application: - :ref:`iOS applications ` - :ref:`Android applications ` - :ref:`React Native applications ` + + +.. _rum-gdi-install-cli: + +Install the ``splunk-rum`` CLI +===================================================================== + +PLACEHOLDER + From a3ae4c4ed8df8c9bf9f6ac012fcbcc144d27de53 Mon Sep 17 00:00:00 2001 From: ada Date: Sun, 30 Mar 2025 23:34:23 -0700 Subject: [PATCH 011/100] Added placeholders --- .../add-mapping-files.rst} | 4 +- .../rum/android/get-android-data-in.rst | 2 +- .../android/set-up-crash-deobfuscation.rst | 14 --- gdi/get-data-in/rum/ios/add-dsym-files.rst | 15 ++++ gdi/get-data-in/rum/ios/get-ios-data-in.rst | 2 +- rum/error-aggregates.rst | 90 +++++++++++++++++-- 6 files changed, 102 insertions(+), 25 deletions(-) rename gdi/get-data-in/rum/{ios/set-up-crash-symbolication.rst => android/add-mapping-files.rst} (71%) delete mode 100644 gdi/get-data-in/rum/android/set-up-crash-deobfuscation.rst create mode 100644 gdi/get-data-in/rum/ios/add-dsym-files.rst diff --git a/gdi/get-data-in/rum/ios/set-up-crash-symbolication.rst b/gdi/get-data-in/rum/android/add-mapping-files.rst similarity index 71% rename from gdi/get-data-in/rum/ios/set-up-crash-symbolication.rst rename to gdi/get-data-in/rum/android/add-mapping-files.rst index dd523e2ae..0cfea9a29 100644 --- a/gdi/get-data-in/rum/ios/set-up-crash-symbolication.rst +++ b/gdi/get-data-in/rum/android/add-mapping-files.rst @@ -1,7 +1,7 @@ -.. _set-up-crash-symbolication: +.. _add-mapping-files: ********************************************************************* -Set up crash symbolication for iOS applications +Add mapping files ********************************************************************* diff --git a/gdi/get-data-in/rum/android/get-android-data-in.rst b/gdi/get-data-in/rum/android/get-android-data-in.rst index 50f84a084..c50b8fe9c 100644 --- a/gdi/get-data-in/rum/android/get-android-data-in.rst +++ b/gdi/get-data-in/rum/android/get-android-data-in.rst @@ -14,7 +14,7 @@ Instrument Android applications for Splunk RUM Configure the instrumentation Manually instrument applications Android RUM data model - Set up crash de-obfuscation + Add mapping files Troubleshooting Instrument your Android applications to get Real User Monitoring (RUM) data into Splunk Observability Cloud. With Splunk RUM for Mobile, you can gain insight about the performance and health of your mobile apps. diff --git a/gdi/get-data-in/rum/android/set-up-crash-deobfuscation.rst b/gdi/get-data-in/rum/android/set-up-crash-deobfuscation.rst deleted file mode 100644 index e0cb958a5..000000000 --- a/gdi/get-data-in/rum/android/set-up-crash-deobfuscation.rst +++ /dev/null @@ -1,14 +0,0 @@ -.. _set-up-crash-deobfuscation: - -********************************************************************* -Set up crash de-obfuscation for Android applications -********************************************************************* - - -.. meta:: - :description: PLACEHOLDER. - - - -PLACEHOLDER - diff --git a/gdi/get-data-in/rum/ios/add-dsym-files.rst b/gdi/get-data-in/rum/ios/add-dsym-files.rst new file mode 100644 index 000000000..977288d56 --- /dev/null +++ b/gdi/get-data-in/rum/ios/add-dsym-files.rst @@ -0,0 +1,15 @@ +.. _add-dsym-files: + +********************************************************************* +Add dSYM files +********************************************************************* + + +.. meta:: + :description: PLACEHOLDER. + + + +This page explains how to upload your dSYMs, which allow Splunk RUM to convert memory addresses in backtraces from JavaScript app errors back into a human-readable form so that you can see the exact line of source code related to an error. This conversion is called symbolication. + +To upload dSYMs use the splunk-rum CLI. You can upload dSYMs from your main application code and from third-party frameworks, but not from system libraries. This means that all iOS backtraces will only be partially symbolicated. \ No newline at end of file diff --git a/gdi/get-data-in/rum/ios/get-ios-data-in.rst b/gdi/get-data-in/rum/ios/get-ios-data-in.rst index 489c69fb2..19268506e 100644 --- a/gdi/get-data-in/rum/ios/get-ios-data-in.rst +++ b/gdi/get-data-in/rum/ios/get-ios-data-in.rst @@ -14,7 +14,7 @@ Instrument iOS applications for Splunk RUM Configure the instrumentation Manually instrument applications iOS RUM data model - Set up crash symbolication + Add dSYM files Troubleshooting Instrument your iOS applications to get Real User Monitoring (RUM) data into Splunk Observability Cloud. With Splunk RUM for Mobile, you can gain insight about the performance and health of your mobile apps. diff --git a/rum/error-aggregates.rst b/rum/error-aggregates.rst index d63de8b90..2f03e0d5e 100644 --- a/rum/error-aggregates.rst +++ b/rum/error-aggregates.rst @@ -4,6 +4,7 @@ Error monitoring and crash aggregation in Tag spotlight ****************************************************************************************** + .. meta:: :description: Group errors together in Splunk RUM and use the Tag spotlight to understand application crashes and drill into errors to see associated stack traces and error messages. @@ -28,14 +29,17 @@ The error ID can represent: * hash ID of a message * hash ID of the error type + + Mobile crash aggregation -============================ +========================================================================================== A crash happens when a user encounters an error and has to exit the app. App errors are all other types of errors that occur but don't result in the user having to exit the app. For example, ANR (application not responding). Explore top crashes across in Tag Spotlight ------------------------------------------------------------- +------------------------------------------------------------------------------------------ + From the Splunk RUM overview dashboard, select :guilabel:`See all` on the Crashes and App Errors chart to open Tag Spotlight. In Tag Spotlight you can explore application based errors, metrics, and events. .. image:: /_images/rum/crashes_app_errors.png @@ -49,13 +53,50 @@ To learn more about Tag Spotlight, see: +.. _mobile-error-summary: + +Error summary +------------------------------------------------------------------------------------------ + +``PLACEHOLDER`` + + +.. _mobile-error-groups: + +Error groups side panel +------------------------------------------------------------------------------------------ + +``PLACEHOLDER`` + + +.. _mobile-session-details: + +Session details +------------------------------------------------------------------------------------------ + +``PLACEHOLDER`` + + +.. _mobile-connect-source-files: + +Connect source files: +------------------------------------------------------------------------------------------ + +* To upload Proguard mappping, see ``PLACEHOLDER`` +* To upload mapping, see ``PLACEHOLDER`` + + + + + JavaScript error aggregation -=============================== +========================================================================================== + The JavaScript Errors metric in RUM show the JavaScript errors (by error ID) which occur most often in your applications. The error ID is created by hashing the associated stack trace, error message, and error type. When you drill into an error, you can see the error type, the error message, associated stack trace, and the trend of the error frequency. Find the top JavaScript errors across your applications in Tag Spotlight ------------------------------------------------------------------------- +------------------------------------------------------------------------------------------ In Splunk RUM, the JavaScript errors view shows the JavaScript errors sorted by page, whereas the metric :strong:`JavaScript Errors (by error ID)` shows the top ten JavaScript errors across your entire application. In the metric :strong:`Frontend Errors by ErrorID` the information is displayed by error type, error ID, then error message. @@ -66,13 +107,48 @@ In Splunk RUM, the JavaScript errors view shows the JavaScript errors sorted by * For example, select :strong:`See all` in the metric :strong:`JavaScript errors(by error ID)` to explore all of the JavaScript errors in Tag Spotlight. -JS Errors without stacktrace, type, or message ------------------------------------------------ +.. _browser-error-summary: + +Error summary +------------------------------------------------------------------------------------------ + +``PLACEHOLDER`` + + +.. _browser-error-groups: + +Error groups side panel +------------------------------------------------------------------------------------------ + +``PLACEHOLDER`` + + +.. _browser-session-details: + +Session details +------------------------------------------------------------------------------------------ + +``PLACEHOLDER`` + + +.. _browser-connect-source-files: + +Connect source files: +------------------------------------------------------------------------------------------ + +* To upload Proguard mappping, see ``PLACEHOLDER`` +* To upload mapping, see ``PLACEHOLDER`` + + + +JavaScript errors without stacktrace, type, or message +------------------------------------------------------------------------------------------ + Sometimes, you might see a message in the UI that says ``JavaScript error without a stacktrace, type, or message``. This might happen because the error didn't have any information about the stack trace before it was ingested by Splunk RUM. To troubleshoot, try narrowing in on a specific time range which shows the JS error only, and explore the related User sessions. Learn more -=========================================================== +========================================================================================== * For more examples on how you can use Tag Spotlight, see :ref:`troubleshoot-tag-spotlight`. * To learn more about monitoring errors in Splunk RUM for browser, see the scenario :ref:`rum-identify-span-problems`. From 352cba01bf89036800ab2da91432953e2e9d5c20 Mon Sep 17 00:00:00 2001 From: ada Date: Mon, 31 Mar 2025 00:45:40 -0700 Subject: [PATCH 012/100] Added placeholders --- rum/error-aggregates.rst | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/rum/error-aggregates.rst b/rum/error-aggregates.rst index 2f03e0d5e..9e857e204 100644 --- a/rum/error-aggregates.rst +++ b/rum/error-aggregates.rst @@ -79,7 +79,7 @@ Session details .. _mobile-connect-source-files: -Connect source files: +Connect source files ------------------------------------------------------------------------------------------ * To upload Proguard mappping, see ``PLACEHOLDER`` @@ -133,11 +133,11 @@ Session details .. _browser-connect-source-files: -Connect source files: +Connect source files ------------------------------------------------------------------------------------------ -* To upload Proguard mappping, see ``PLACEHOLDER`` -* To upload mapping, see ``PLACEHOLDER`` +* To upload dSYMs for iOS apps, see ``PLACEHOLDER`` +* To upload source maps for Android apps, see ``PLACEHOLDER`` From b1a6c6c041bfd1386cbd6c26a56f7dbfbf5fa6ac Mon Sep 17 00:00:00 2001 From: ada Date: Mon, 31 Mar 2025 01:03:25 -0700 Subject: [PATCH 013/100] Removed the note that Symbolication is not supported. --- gdi/get-data-in/rum/ios/install-rum-ios.rst | 1 - 1 file changed, 1 deletion(-) diff --git a/gdi/get-data-in/rum/ios/install-rum-ios.rst b/gdi/get-data-in/rum/ios/install-rum-ios.rst index 45cb9cb89..89e5458e8 100644 --- a/gdi/get-data-in/rum/ios/install-rum-ios.rst +++ b/gdi/get-data-in/rum/ios/install-rum-ios.rst @@ -206,7 +206,6 @@ Initialize the crash reporting module with your configuration parameters: * To generate a RUM access token, see :ref:`rum-access-token`. -.. note:: Symbolication is not supported. .. _xcframeork-ios-rum: From 63bd53388c29c468c5783f1b622aa2c7672b8caa Mon Sep 17 00:00:00 2001 From: ada Date: Mon, 31 Mar 2025 01:35:26 -0700 Subject: [PATCH 014/100] Updated the RUM Android data model. --- gdi/get-data-in/rum/android/rum-android-data-model.rst | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/gdi/get-data-in/rum/android/rum-android-data-model.rst b/gdi/get-data-in/rum/android/rum-android-data-model.rst index bd8310a93..43cbbc4cf 100644 --- a/gdi/get-data-in/rum/android/rum-android-data-model.rst +++ b/gdi/get-data-in/rum/android/rum-android-data-model.rst @@ -231,6 +231,16 @@ The Android RUM agent adds the following crash reporting attributes to spans tha * - ``status`` - String - Always ``Error``. + * - ``service.application_id`` + - String + - Application ID of the app - refer to definition of ``applicationId`` in the :ref:`Android Studio developer documentation `. + * - ``service.version_code`` + - String + - Version code of the application - refer to definition of ``versionCode`` in the :ref:`Android Studio developer documentation `. + * - ``splunk.build_id`` + - String + - This is an optional attribute. This is added when minification is enabled for pre-production builds where version code is not updated across app builds, in which case this attribute is used to uniquely identify each build. + Network monitoring ---------------------------------------------------- From 514e82d21195a4e73be6ed2152bb5c52ec05c42e Mon Sep 17 00:00:00 2001 From: ada Date: Mon, 31 Mar 2025 01:43:40 -0700 Subject: [PATCH 015/100] Updated the RUM iOS data model. --- .../rum/ios/rum-ios-data-model.rst | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/gdi/get-data-in/rum/ios/rum-ios-data-model.rst b/gdi/get-data-in/rum/ios/rum-ios-data-model.rst index c95c35172..66eceb004 100644 --- a/gdi/get-data-in/rum/ios/rum-ios-data-model.rst +++ b/gdi/get-data-in/rum/ios/rum-ios-data-model.rst @@ -239,6 +239,12 @@ The iOS RUM library adds the following crash reporting attributes to spans that * - ``exception.stacktrace`` - String - The stack trace for the exception. + * - ``exception.threads`` + - + - + * - ``exception.images`` + - + - * - ``component`` - String - Always ``crash``. @@ -248,9 +254,28 @@ The iOS RUM library adds the following crash reporting attributes to spans that * - ``crash.timestamp`` - NSDate - Date and time when the crash report is generated. + * - ``crash.observedTimestamp`` + - NSDate + - Date and time when the crash report is sent. + * - ``crash.isNative`` + - Boolean + - * - ``crash.address`` - Integer - Address of the faulty instruction. + * - ``crash.processPath`` + - String + - + * - ``crash.batteryLevel`` + - + - + * - ``crash.app.version`` + - + - + * - ``crash.os.version`` + - + - + Network monitoring ---------------------------------------------------- From b8380df90e11cae765080c11989706a6b6da7e22 Mon Sep 17 00:00:00 2001 From: ada Date: Mon, 31 Mar 2025 01:52:24 -0700 Subject: [PATCH 016/100] Fixed syntax error. --- gdi/get-data-in/rum/android/rum-android-data-model.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gdi/get-data-in/rum/android/rum-android-data-model.rst b/gdi/get-data-in/rum/android/rum-android-data-model.rst index 43cbbc4cf..32e091601 100644 --- a/gdi/get-data-in/rum/android/rum-android-data-model.rst +++ b/gdi/get-data-in/rum/android/rum-android-data-model.rst @@ -233,10 +233,10 @@ The Android RUM agent adds the following crash reporting attributes to spans tha - Always ``Error``. * - ``service.application_id`` - String - - Application ID of the app - refer to definition of ``applicationId`` in the :ref:`Android Studio developer documentation `. + - Application ID of the app - refer to definition of ``applicationId`` in the :new-page:`Android Studio developer documentation `. * - ``service.version_code`` - String - - Version code of the application - refer to definition of ``versionCode`` in the :ref:`Android Studio developer documentation `. + - Version code of the application - refer to definition of ``versionCode`` in the :new-page:`Android Studio developer documentation `. * - ``splunk.build_id`` - String - This is an optional attribute. This is added when minification is enabled for pre-production builds where version code is not updated across app builds, in which case this attribute is used to uniquely identify each build. From 27fbcff37217c1b1a2357622e5594ab320c93e9d Mon Sep 17 00:00:00 2001 From: ada Date: Fri, 4 Apr 2025 15:09:38 -0700 Subject: [PATCH 017/100] Updated to match doc input. --- .../rum/ios/rum-ios-data-model.rst | 49 +++++++++++-------- 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/gdi/get-data-in/rum/ios/rum-ios-data-model.rst b/gdi/get-data-in/rum/ios/rum-ios-data-model.rst index 66eceb004..9c0971e47 100644 --- a/gdi/get-data-in/rum/ios/rum-ios-data-model.rst +++ b/gdi/get-data-in/rum/ios/rum-ios-data-model.rst @@ -30,7 +30,8 @@ Common data types .. _rum-ios-metrics: Metrics -============================================= +============================================== + The following tables list all of the metrics available in Splunk RUM for iOS. .. list-table:: @@ -73,8 +74,9 @@ The following tables list all of the metrics available in Splunk RUM for iOS. .. _ios-rum-basic-properties: + Basic properties -=================== +============================================== The following properties are common to all applications instrumented for Splunk RUM: @@ -145,8 +147,10 @@ The following table describes each value of ``SpanKind``: * - ``Consumer`` - Indicates that the span describes consumer receiving a message from a broker. + + Default attributes -=================== +============================================== By default, the iOS RUM library adds the following attributes to all spans: @@ -174,6 +178,7 @@ By default, the iOS RUM library adds the following attributes to all spans: - String - Connection type used by the device. Possible values include ``wifi``, ``cell``, ``unavailable``, and ``unknown``. + Resource attributes ============================================== @@ -206,11 +211,13 @@ By default, the iOS RUM library adds the following resource attributes to all sp - String - Name of the thread. ``SplunkRum.initialize`` only applies to the main thread. + Instrumentation attributes ============================================== The iOS RUM library collects the following data using its instrumentations. To activate or deactivate specific instrumentations, see :ref:`ios-rum-instrumentation-settings`. + Crash reporting ---------------------------------------------------- @@ -227,24 +234,18 @@ The iOS RUM library adds the following crash reporting attributes to spans that * - ``thread.id`` - Integer - ID of the current managed thread, as opposed to the operating system thread ID. - * - ``thread.name`` - - String - - Name of the thread. * - ``exception.message`` - String - The message of the exception. * - ``exception.type`` - String - The type of the exception. - * - ``exception.stacktrace`` - - String - - The stack trace for the exception. * - ``exception.threads`` - - - - + - Array + - An array of elements containing data about one thread in the process, including a ``stackFrame`` array. * - ``exception.images`` - - - - + - Array + - An array of elements containing data about the code image. There is one element for each image referenced in ``exception.threads``. * - ``component`` - String - Always ``crash``. @@ -259,22 +260,28 @@ The iOS RUM library adds the following crash reporting attributes to spans that - Date and time when the crash report is sent. * - ``crash.isNative`` - Boolean - - + - If ``false``, code is being executed in an emulator such as Rosetta. * - ``crash.address`` - Integer - Address of the faulty instruction. * - ``crash.processPath`` - String - - + - The full path to the crashed app on the device. * - ``crash.batteryLevel`` - - - - + - String + - Formatted battery level. For example, ``"87.3%"``. + * - ``crash.freeMemory`` + - String + - Formatted free memory available. For example, ``"31.88 GB"``. + * - ``crash.freeDiskSpace`` + - String + - Formatted free disk space available. For example, ``"691.96 GB"``. * - ``crash.app.version`` - - - - + - String + - Full version of the crashed application. For example, ``"1.0"``. * - ``crash.os.version`` - - - - + - String + - Version of iOS in use. For example, ``"16.4"``. Network monitoring From 741c2d10ec5f9284ce964646f3004fb08f191742 Mon Sep 17 00:00:00 2001 From: ada Date: Mon, 14 Apr 2025 15:31:15 -0700 Subject: [PATCH 018/100] Updated the compatibility requirements for Splunk RUM for Mobile --- _includes/requirements/ios.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_includes/requirements/ios.rst b/_includes/requirements/ios.rst index 7f603c621..77974b004 100644 --- a/_includes/requirements/ios.rst +++ b/_includes/requirements/ios.rst @@ -1,6 +1,6 @@ Splunk RUM for Mobile supports the following versions: * iOS 15 and higher -* iPadOS 13 and higher +* iPadOS 15 and higher Splunk RUM supports Apple Silicon. \ No newline at end of file From abf95f584c1a23121916bdddbf680c46d1086a0e Mon Sep 17 00:00:00 2001 From: ada Date: Mon, 14 Apr 2025 17:13:42 -0700 Subject: [PATCH 019/100] Migrated content from Confluence --- ...mapping-files.rst => add-mapping-file.rst} | 4 +- .../rum/android/get-android-data-in.rst | 2 +- .../ios/{add-dsym-files.rst => add-dsyms.rst} | 4 +- gdi/get-data-in/rum/ios/get-ios-data-in.rst | 2 +- gdi/get-data-in/rum/rum-instrumentation.rst | 41 ++++++++++++++++++- 5 files changed, 46 insertions(+), 7 deletions(-) rename gdi/get-data-in/rum/android/{add-mapping-files.rst => add-mapping-file.rst} (82%) rename gdi/get-data-in/rum/ios/{add-dsym-files.rst => add-dsyms.rst} (95%) diff --git a/gdi/get-data-in/rum/android/add-mapping-files.rst b/gdi/get-data-in/rum/android/add-mapping-file.rst similarity index 82% rename from gdi/get-data-in/rum/android/add-mapping-files.rst rename to gdi/get-data-in/rum/android/add-mapping-file.rst index 0cfea9a29..eab7e7fa1 100644 --- a/gdi/get-data-in/rum/android/add-mapping-files.rst +++ b/gdi/get-data-in/rum/android/add-mapping-file.rst @@ -1,7 +1,7 @@ -.. _add-mapping-files: +.. _add-mapping-file: ********************************************************************* -Add mapping files +Add a mapping file ********************************************************************* diff --git a/gdi/get-data-in/rum/android/get-android-data-in.rst b/gdi/get-data-in/rum/android/get-android-data-in.rst index c50b8fe9c..9c53d3c36 100644 --- a/gdi/get-data-in/rum/android/get-android-data-in.rst +++ b/gdi/get-data-in/rum/android/get-android-data-in.rst @@ -14,7 +14,7 @@ Instrument Android applications for Splunk RUM Configure the instrumentation Manually instrument applications Android RUM data model - Add mapping files + Add a mapping file Troubleshooting Instrument your Android applications to get Real User Monitoring (RUM) data into Splunk Observability Cloud. With Splunk RUM for Mobile, you can gain insight about the performance and health of your mobile apps. diff --git a/gdi/get-data-in/rum/ios/add-dsym-files.rst b/gdi/get-data-in/rum/ios/add-dsyms.rst similarity index 95% rename from gdi/get-data-in/rum/ios/add-dsym-files.rst rename to gdi/get-data-in/rum/ios/add-dsyms.rst index 977288d56..eee8b82ac 100644 --- a/gdi/get-data-in/rum/ios/add-dsym-files.rst +++ b/gdi/get-data-in/rum/ios/add-dsyms.rst @@ -1,7 +1,7 @@ -.. _add-dsym-files: +.. _add-dsyms: ********************************************************************* -Add dSYM files +Add dSYMs ********************************************************************* diff --git a/gdi/get-data-in/rum/ios/get-ios-data-in.rst b/gdi/get-data-in/rum/ios/get-ios-data-in.rst index 19268506e..1bf82ca32 100644 --- a/gdi/get-data-in/rum/ios/get-ios-data-in.rst +++ b/gdi/get-data-in/rum/ios/get-ios-data-in.rst @@ -14,7 +14,7 @@ Instrument iOS applications for Splunk RUM Configure the instrumentation Manually instrument applications iOS RUM data model - Add dSYM files + Add dSYMs Troubleshooting Instrument your iOS applications to get Real User Monitoring (RUM) data into Splunk Observability Cloud. With Splunk RUM for Mobile, you can gain insight about the performance and health of your mobile apps. diff --git a/gdi/get-data-in/rum/rum-instrumentation.rst b/gdi/get-data-in/rum/rum-instrumentation.rst index c6b727026..2aa6965e9 100644 --- a/gdi/get-data-in/rum/rum-instrumentation.rst +++ b/gdi/get-data-in/rum/rum-instrumentation.rst @@ -60,5 +60,44 @@ You can instrument the following types of application: Install the ``splunk-rum`` CLI ===================================================================== -PLACEHOLDER +The ``splunk-rum`` CLI is a tool for enabling automatic source mapping of your browser, iOS, and Android applications at instrumentation time. Although you can prepare and upload source mapping information "on demand" manually through the UI, the best practice is to integrate the use of this CLI into the CI pipeline of your application. By integrating ``splunk-rum`` commands into your CI pipeline, you automate the steps you need to take to enable Splunk RUM to convert stack traces from your browser and mobile applications into human-readable form, and you ensure that this source mapping information always matches your production binaries. + + +Prerequisites +--------------------------------------------------------------------- + +* Install Node v18+ on your build machine. +* Get an organization access token with an authorization scope of API token (not RUM token) and with the power role. You will save this token in an environment variable named SPLUNK_ACCESS_TOKEN. + + +Installation +--------------------------------------------------------------------- + +#. Download ``splunk-rum`` from :rew-page:`https://github.com/signalfx/splunk-rum-cli`. This CLI is published to npm as package name ``@splunk/rum-cli``. +#. Install ``splunk-rum`` in your Linux-based build environment either as: + * A dependency of your build process, and add ``splunk-rum`` to your ``PATH``: + + .. code-block:: shell + npm install @splunk/rum-cli --global + + * A dependency to your existing package.json file. Note: This option is for browser applications only, not mobile applications: + + .. code-block:: shell + npm install @splunk/rum-cli --save-dev + + +#. Set these environment variables: + .. code-block:: shell + export SPLUNK_ACCESS_TOKEN= + export SPLUNK_REALM= + + +Next steps +--------------------------------------------------------------------- + +To use ``splunk-rum`` to upload your application's mapping files to Splunk RUM, follow the steps corresponding to your application's platform: + +* For browser applications, see :ref:`set-up-javascript-source-mapping`. +* For iOS applications, see :ref:`add-dsyms`. +* For Android applications, see :ref:`add-mapping-file`. From 4877b697960449951eae54c0725918a93f2a8491 Mon Sep 17 00:00:00 2001 From: ada Date: Mon, 14 Apr 2025 18:02:44 -0700 Subject: [PATCH 020/100] Migrated content from Confluence --- .../rum/browser/browser-rum-errors.rst | 15 +++++- .../set-up-javascript-source-mapping.rst | 46 ++++++++++++++----- gdi/get-data-in/rum/rum-instrumentation.rst | 4 +- 3 files changed, 50 insertions(+), 15 deletions(-) diff --git a/gdi/get-data-in/rum/browser/browser-rum-errors.rst b/gdi/get-data-in/rum/browser/browser-rum-errors.rst index 2bbf4fbcd..19182c56b 100644 --- a/gdi/get-data-in/rum/browser/browser-rum-errors.rst +++ b/gdi/get-data-in/rum/browser/browser-rum-errors.rst @@ -4,6 +4,7 @@ Errors collected by the Browser RUM agent ******************************************************** + .. meta:: :description: Understand which errors are collected by the Browser RUM agent for Splunk Observability Cloud real user monitoring / RUM. @@ -19,8 +20,20 @@ By default, the instrumentations collect errors from the following sources: To collect JavaScript errors from single-page application (SPA) frameworks, see :ref:`rum-browser-spa-errors`. + +Additions to the RUM browser model by splunk-rum +======================================================== +If you're using the ``splunk-rum`` CLI or the Webpack build plugin to upload your source map, those tools will add a new attribute named ``error.sourceMapIds`` to your RUM browser data model. This attribute contains a mapping of file URL and ``sourceMapId`` pairs, where: + +* You must have already injected the ``sourceMapId`` attribute into your source map (using the ``splunk-rum`` CLI or the Webpack build plugin). See :ref:`set-up-javascript-source-mapping`. +* Only files mentioned in the error's ``error.stack`` appear in ``error.sourceMapIds``. + +This attribute is only in your RUM browser data model if you're using the ``splunk-rum`` CLI or the Webpack build plugin. + + + Uncaught or unhandled errors -============================================= +======================================================== The Browser RUM agent registers each uncaught or unhandled error as a span with name ``onerror``. Here are some typical examples of uncaught or unhandled errors: diff --git a/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst b/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst index 77aebaa9a..3519c6d45 100644 --- a/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst +++ b/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst @@ -6,34 +6,56 @@ Set up JavaScript source mapping .. meta:: - :description: PLACEHOLDER. + :description: Your uploaded mapping file enables Splunk RUM to convert stack traces back into a human-readable form. -This page explains how to set up JavaScript source mapping, which allows Splunk RUM to convert stack frames from JavaScript app errors back into a human-readable form so that you can see the exact line of source code related to an error. This conversion is available for JavaScript errors, but not for crashes. +This page explains how to set up JavaScript source mapping, which allows Splunk RUM to convert stack frames from browser application errors back into a human-readable form so that you can see the exact line of source code related to an error. +Setting up JavaScript source mapping involves these steps: +* (Optional) Adding the sourcesContent property to the source maps that are generated by your build tool. +* Injecting a code snippet into your minified files using either the splunk-rum CLI or the Splunk Webpack build plugin. +* Uploading your source maps to Splunk RUM. +* Deploying your minified files to your production environment. -Option 1: Use the splunk-rum CLI + +Prerequisites ===================================================================== -PLACEHOLDER +* Update your browser RUM agent to v0.19.2 or later. Otherwise, Splunk RUM can't symbolicate stack traces from browser apps. +* :ref:`Install the splunk-rum CLI`. -Option 2: Use the Webpack build plugin +Option 1: Use the splunk-rum CLI ===================================================================== -PLACEHOLDER +#. Set up your build environment: + #. Verify that your production build tool is configured to generate source maps. + #. Run the production build for your project. + #. Verify that your production bundles and source maps were emitted to the same output directory. -(Optional) Add the sourcesContent property to your sourcemap file -===================================================================== +#. Find all source map/minified file pairs in the directory you specify, compute a source map ID for each pair, and inject that source map ID into each minified file as a code snippet: -PLACEHOLDER + .. code-block:: bash + splunk-rum sourcemaps inject --path +#. Upload the source maps in the directory you specify to Splunk RUM. In this command, use the same values for application name () and application version () that you used in Configure the Splunk Browser RUM instrumentation — Splunk Observability Cloud documentation. + + .. code-block:: bash + splunk-rum sourcemaps upload \ + --app-name --app-version \ + --path + + +Syntax +--------------------------------------------------------------------- + +.. code-block:: bash + splunk-rum [command] [parameters] -Deploy minified files to production -===================================================================== -PLACEHOLDER +Command descriptions +--------------------------------------------------------------------- diff --git a/gdi/get-data-in/rum/rum-instrumentation.rst b/gdi/get-data-in/rum/rum-instrumentation.rst index 2aa6965e9..f9f4c8743 100644 --- a/gdi/get-data-in/rum/rum-instrumentation.rst +++ b/gdi/get-data-in/rum/rum-instrumentation.rst @@ -77,12 +77,12 @@ Installation #. Install ``splunk-rum`` in your Linux-based build environment either as: * A dependency of your build process, and add ``splunk-rum`` to your ``PATH``: - .. code-block:: shell + .. code-block:: bash npm install @splunk/rum-cli --global * A dependency to your existing package.json file. Note: This option is for browser applications only, not mobile applications: - .. code-block:: shell + .. code-block:: bash npm install @splunk/rum-cli --save-dev From 98141137eb97da90a0e8ddf9e129e1ab9ba1e639 Mon Sep 17 00:00:00 2001 From: ada Date: Mon, 14 Apr 2025 18:13:21 -0700 Subject: [PATCH 021/100] Migrated content from Confluence --- .../browser/set-up-javascript-source-mapping.rst | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst b/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst index 3519c6d45..d1cb2d9e6 100644 --- a/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst +++ b/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst @@ -58,4 +58,20 @@ Syntax Command descriptions --------------------------------------------------------------------- +.. list-table:: + :header-rows: 1 + :widths: 20, 80 + + * - :strong:`Command` + - :strong:`Description` + + * - ``sourcemaps inject --path [optional-parameters]`` + - + * PLACEHOLDER + * PLACEHOLDER + + * - ``sourcemaps upload --path --realm --token [optional-parameters]`` + - + * PLACEHOLDER + * PLACEHOLDER From d2b71166bfb7a02d91b75d07c34947fc82787225 Mon Sep 17 00:00:00 2001 From: ada Date: Mon, 14 Apr 2025 18:26:16 -0700 Subject: [PATCH 022/100] Migrated content from Confluence --- .../rum/android/add-mapping-file.rst | 39 +++++++++++++- .../set-up-javascript-source-mapping.rst | 53 ++++++++++++++++--- gdi/get-data-in/rum/ios/add-dsyms.rst | 39 +++++++++++++- 3 files changed, 123 insertions(+), 8 deletions(-) diff --git a/gdi/get-data-in/rum/android/add-mapping-file.rst b/gdi/get-data-in/rum/android/add-mapping-file.rst index eab7e7fa1..54c2dbf1a 100644 --- a/gdi/get-data-in/rum/android/add-mapping-file.rst +++ b/gdi/get-data-in/rum/android/add-mapping-file.rst @@ -10,5 +10,42 @@ Add a mapping file -PLACEHOLDER + + + + +Command descriptions +--------------------------------------------------------------------- + +.. list-table:: + :header-rows: 1 + :widths: 20, 80 + + * - :strong:`Command` + - :strong:`Description` + + * - ``sourcemaps inject --path [optional-parameters]`` + - Search ```` for source map/minified file pairs and compute a source map ID for each pair. Then, inject that source map ID into each minified file as a code snippet. + + Parameters: + + * PLACEHOLDER + * PLACEHOLDER + * PLACEHOLDER + * PLACEHOLDER + * PLACEHOLDER + * PLACEHOLDER + + + * - ``sourcemaps upload --path --realm --token [optional-parameters]`` + - + * PLACEHOLDER + * PLACEHOLDER + * PLACEHOLDER + * PLACEHOLDER + * PLACEHOLDER + * PLACEHOLDER + * PLACEHOLDER + * PLACEHOLDER + diff --git a/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst b/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst index d1cb2d9e6..1d58e7bf2 100644 --- a/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst +++ b/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst @@ -66,12 +66,53 @@ Command descriptions - :strong:`Description` * - ``sourcemaps inject --path [optional-parameters]`` - - - * PLACEHOLDER - * PLACEHOLDER + - Search ```` for source map/minified file pairs and compute a source map ID for each pair. Then, inject that source map ID into each minified file as a code snippet. + + Parameters: + + * ``--path `` Path to the directory containing your production JavaScript files (``.js``, ``.cjs``, ``.mjs``) and source maps (``.js.map``, ``.cjs.map``, ``.mjs.map``). The command recursively searches this directory and when it detects that a JavaScript file (such as ``main.min.js``) has a source map (such as ``main.min.js.map``), it injects a code snippet into that JavaScript file. This code snippet contains a property named ``sourceMapId`` that is needed to successfully perform automatic source mapping. + + * ``--include `` A space-separated list of glob file patterns for selecting specific JavaScript files to inject. + + * ``--exclude `` A space-separated list of glob file patterns for selecting specific JavaScript files to not inject. + + * ``--debug`` Enable debug logs. + + * ``--dry-run=[true|false]`` Preview the files that will be injected for the given options. Default: false. + + * ``-h, --help`` Display help for this command. + * - ``sourcemaps upload --path --realm --token [optional-parameters]`` - - - * PLACEHOLDER - * PLACEHOLDER + - Recursively search `` ``for source maps (``.js.map``, ``.cjs.map``, ``.mjs.map``) and upload them to Splunk RUM. + + Run this command after you run the ``sourcemaps inject`` command. + + Parameters: + + * --path Path to the directory containing source maps for your production JavaScript bundles. + + * --realm Realm for your organization. For example, us0. You can omit this parameter and set the environment variable SPLUNK_REALM instead. + + * --token API access token. You can omit this parameter and set the environment variable SPLUNK_ACCESS_TOKEN instead. + + * --app-name Optional. The application name used in your agent configuration. This value is attached to each uploaded source map as metadata to help you to identify the source map on the Splunk RUM user interface. + + * --app-version Optional. The application version used in your agent configuration. This value is attached to each uploaded source map as metadata to help you to identify the source map on the Splunk RUM user interface. + + * --include A space-separated list of glob file patterns for selecting specific source map files to upload. + + * --exclude A space-separated list of glob file patterns for selecting specific source map files to not upload. + + * --dry-run Preview the files that will be uploaded for the given options. + + * --debug Enable debug logs. + + * -h, --help Display help for this command. + + + +Option 2: Use the Webpack build plugin +===================================================================== +PLACEHOLDER diff --git a/gdi/get-data-in/rum/ios/add-dsyms.rst b/gdi/get-data-in/rum/ios/add-dsyms.rst index eee8b82ac..ce77d7747 100644 --- a/gdi/get-data-in/rum/ios/add-dsyms.rst +++ b/gdi/get-data-in/rum/ios/add-dsyms.rst @@ -12,4 +12,41 @@ Add dSYMs This page explains how to upload your dSYMs, which allow Splunk RUM to convert memory addresses in backtraces from JavaScript app errors back into a human-readable form so that you can see the exact line of source code related to an error. This conversion is called symbolication. -To upload dSYMs use the splunk-rum CLI. You can upload dSYMs from your main application code and from third-party frameworks, but not from system libraries. This means that all iOS backtraces will only be partially symbolicated. \ No newline at end of file +To upload dSYMs use the splunk-rum CLI. You can upload dSYMs from your main application code and from third-party frameworks, but not from system libraries. This means that all iOS backtraces will only be partially symbolicated. + + + + +Command descriptions +--------------------------------------------------------------------- + +.. list-table:: + :header-rows: 1 + :widths: 20, 80 + + * - :strong:`Command` + - :strong:`Description` + + * - ``sourcemaps inject --path [optional-parameters]`` + - Search ```` for source map/minified file pairs and compute a source map ID for each pair. Then, inject that source map ID into each minified file as a code snippet. + + Parameters: + + * PLACEHOLDER + * PLACEHOLDER + * PLACEHOLDER + * PLACEHOLDER + * PLACEHOLDER + * PLACEHOLDER + + + * - ``sourcemaps upload --path --realm --token [optional-parameters]`` + - + * PLACEHOLDER + * PLACEHOLDER + * PLACEHOLDER + * PLACEHOLDER + * PLACEHOLDER + * PLACEHOLDER + * PLACEHOLDER + * PLACEHOLDER From 4e67598fe0072977d9303fb39a443635d027502b Mon Sep 17 00:00:00 2001 From: ada Date: Mon, 14 Apr 2025 18:42:11 -0700 Subject: [PATCH 023/100] Migrated content from Confluence --- .../rum/browser/get-browser-data-in.rst | 2 +- .../set-up-javascript-source-mapping.rst | 76 ++++++++++++++++--- 2 files changed, 66 insertions(+), 12 deletions(-) diff --git a/gdi/get-data-in/rum/browser/get-browser-data-in.rst b/gdi/get-data-in/rum/browser/get-browser-data-in.rst index e937d6f57..6d6e1900e 100644 --- a/gdi/get-data-in/rum/browser/get-browser-data-in.rst +++ b/gdi/get-data-in/rum/browser/get-browser-data-in.rst @@ -11,7 +11,7 @@ Instrument browser-based web applications for Splunk RUM :hidden: Installation - Configuration + Configuration Manual instrumentation Migrate manual instrumentation Data collected diff --git a/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst b/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst index 1d58e7bf2..13cc9525b 100644 --- a/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst +++ b/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst @@ -90,29 +90,83 @@ Command descriptions Parameters: - * --path Path to the directory containing source maps for your production JavaScript bundles. + * ``--path `` Path to the directory containing source maps for your production JavaScript bundles. - * --realm Realm for your organization. For example, us0. You can omit this parameter and set the environment variable SPLUNK_REALM instead. + * ``--realm `` Realm for your organization. For example, ``us0``. You can omit this parameter and set the environment variable ``SPLUNK_REALM`` instead. - * --token API access token. You can omit this parameter and set the environment variable SPLUNK_ACCESS_TOKEN instead. + * ``--token `` API access token. You can omit this parameter and set the environment variable ``SPLUNK_ACCESS_TOKEN`` instead. - * --app-name Optional. The application name used in your agent configuration. This value is attached to each uploaded source map as metadata to help you to identify the source map on the Splunk RUM user interface. + * ``--app-name `` Optional. The application name used in your agent configuration. This value is attached to each uploaded source map as metadata to help you to identify the source map on the Splunk RUM user interface. - * --app-version Optional. The application version used in your agent configuration. This value is attached to each uploaded source map as metadata to help you to identify the source map on the Splunk RUM user interface. + * ``--app-version `` Optional. The application version used in your agent configuration. This value is attached to each uploaded source map as metadata to help you to identify the source map on the Splunk RUM user interface. - * --include A space-separated list of glob file patterns for selecting specific source map files to upload. + * ``--include `` A space-separated list of glob file patterns for selecting specific source map files to upload. - * --exclude A space-separated list of glob file patterns for selecting specific source map files to not upload. + * ``--exclude `` A space-separated list of glob file patterns for selecting specific source map files to not upload. - * --dry-run Preview the files that will be uploaded for the given options. + * ``--dry-run`` Preview the files that will be uploaded for the given options. - * --debug Enable debug logs. + * ``--debug`` Enable debug logs. - * -h, --help Display help for this command. + * ``-h, --help`` Display help for this command. Option 2: Use the Webpack build plugin ===================================================================== -PLACEHOLDER +If your project uses Webpack 5 as its bundling tool, you can add the Splunk RUM Webpack build plugin to your project to make it easier to support source mapping. This plugin is a separate npm artifact in the :new-page:`splunk-otel-js-web` repository. + +If your project uses a different bunding tool or a different version of Webpack, use the ``splunk-rum`` CLI instead. + +#. Add the Splunk RUM Webpack plugin to your package.json as a dev dependency: + .. code-block:: bash + npm install @splunk/rum-build-plugins --save-dev + +#. Configure your ``webpack.config.js`` to generate source maps. See :new-page:`Devtool | webpack`. + +#. Add the Splunk RUM Webpack plugin to your list of plugins by adding the following lines to your ``webpack.config.js``, where ```` and ```` are the same values that you used in :ref:`configure-browser-instrumentation`. + + If you don't want source maps to be uploaded while you're doing local builds for your own local development, set disableUpload to true. + + .. code-block:: json + const { SplunkRumWebpackPlugin } = require('@splunk/rum-build-plugins') + module.exports = { + ... + plugins: [ + ..., + new SplunkRumWebpackPlugin({ + applicationName: '', + appVersion: '', + sourceMaps: { + token: '', + realm: '', + // Optional: conditionally set 'disabledUpload' so that file uploads + // are only performed during your production builds on your CI pipeline + disableUpload: + } + }), + ] + } + + +#. Verify that whenever you build your application, its minified files are automatically injected with the ``sourceMapId`` property, and that its source maps are automatically uploaded to Splunk RUM. + + + +(Optional) Add the ``sourcesContent`` property to your source map +===================================================================== + +You can add the ``sourcesContent`` property to your source map files so that Splunk RUM can pull and display the code snippet that contributed to each JavaScript error. To add this property, configure your bundler tool to generate source maps that have this property. Alternatively, if you don't want Splunk RUM to have your source code, configure your bundler tool to generate source maps that omit this property. + + + +Deploy the injected JavaScript files to your production environment +===================================================================== + +Once you've uploaded your application's source maps and deployed its injected minified files to your production environment, Splunk RUM automatically converts this application's stack traces into human-readable form. + +.. note:: + Make sure that the source maps that you upload to Splunk RUM match the minified files you deploy to production. To ensure this, the best practice is to integrate the splunk-rum commands into your build pipeline so that whenever you build an application, you also re-upload its source maps. + + From 7bab03d39304ee185b00916a70068a7b59d7fba7 Mon Sep 17 00:00:00 2001 From: ada Date: Mon, 14 Apr 2025 18:53:33 -0700 Subject: [PATCH 024/100] Migrated content from Confluence --- gdi/get-data-in/rum/rum-instrumentation.rst | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/gdi/get-data-in/rum/rum-instrumentation.rst b/gdi/get-data-in/rum/rum-instrumentation.rst index f9f4c8743..d7200f35c 100644 --- a/gdi/get-data-in/rum/rum-instrumentation.rst +++ b/gdi/get-data-in/rum/rum-instrumentation.rst @@ -57,7 +57,7 @@ You can instrument the following types of application: .. _rum-gdi-install-cli: -Install the ``splunk-rum`` CLI +Install the splunk-rum CLI ===================================================================== The ``splunk-rum`` CLI is a tool for enabling automatic source mapping of your browser, iOS, and Android applications at instrumentation time. Although you can prepare and upload source mapping information "on demand" manually through the UI, the best practice is to integrate the use of this CLI into the CI pipeline of your application. By integrating ``splunk-rum`` commands into your CI pipeline, you automate the steps you need to take to enable Splunk RUM to convert stack traces from your browser and mobile applications into human-readable form, and you ensure that this source mapping information always matches your production binaries. @@ -67,27 +67,32 @@ Prerequisites --------------------------------------------------------------------- * Install Node v18+ on your build machine. -* Get an organization access token with an authorization scope of API token (not RUM token) and with the power role. You will save this token in an environment variable named SPLUNK_ACCESS_TOKEN. +* Get an organization access token with an authorization scope of API token (not RUM token) and with the power role. You will save this token in an environment variable named ``SPLUNK_ACCESS_TOKEN``. Installation --------------------------------------------------------------------- -#. Download ``splunk-rum`` from :rew-page:`https://github.com/signalfx/splunk-rum-cli`. This CLI is published to npm as package name ``@splunk/rum-cli``. +#. Download ``splunk-rum`` from :rew-page:`the splunk-rum-cli repo`. This CLI is published to npm as package name ``@splunk/rum-cli``. #. Install ``splunk-rum`` in your Linux-based build environment either as: + * A dependency of your build process, and add ``splunk-rum`` to your ``PATH``: - .. code-block:: bash - npm install @splunk/rum-cli --global + .. code-block:: bash + + npm install @splunk/rum-cli --global * A dependency to your existing package.json file. Note: This option is for browser applications only, not mobile applications: .. code-block:: bash + npm install @splunk/rum-cli --save-dev #. Set these environment variables: - .. code-block:: shell + + .. code-block:: bash + export SPLUNK_ACCESS_TOKEN= export SPLUNK_REALM= From 4df7a59fc125cb18c2714d323368335113ac356f Mon Sep 17 00:00:00 2001 From: ada Date: Mon, 14 Apr 2025 19:10:15 -0700 Subject: [PATCH 025/100] Migrated content from Confluence --- .../set-up-javascript-source-mapping.rst | 2 +- gdi/get-data-in/rum/ios/add-dsyms.rst | 58 ++++++++++++++++++- 2 files changed, 56 insertions(+), 4 deletions(-) diff --git a/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst b/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst index 13cc9525b..fd47c9183 100644 --- a/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst +++ b/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst @@ -40,7 +40,7 @@ Option 1: Use the splunk-rum CLI .. code-block:: bash splunk-rum sourcemaps inject --path -#. Upload the source maps in the directory you specify to Splunk RUM. In this command, use the same values for application name () and application version () that you used in Configure the Splunk Browser RUM instrumentation — Splunk Observability Cloud documentation. +#. Upload the source maps in the directory you specify to Splunk RUM. In this command, use the same values for application name (````) and application version (````) that you used in :ref:`configure-browser-instrumentation`. .. code-block:: bash splunk-rum sourcemaps upload \ diff --git a/gdi/get-data-in/rum/ios/add-dsyms.rst b/gdi/get-data-in/rum/ios/add-dsyms.rst index ce77d7747..001778478 100644 --- a/gdi/get-data-in/rum/ios/add-dsyms.rst +++ b/gdi/get-data-in/rum/ios/add-dsyms.rst @@ -6,14 +6,66 @@ Add dSYMs .. meta:: - :description: PLACEHOLDER. + :description: Your uploaded dSYMs enable Splunk RUM to convert stack traces back into a human-readable form. -This page explains how to upload your dSYMs, which allow Splunk RUM to convert memory addresses in backtraces from JavaScript app errors back into a human-readable form so that you can see the exact line of source code related to an error. This conversion is called symbolication. +When you build your iOS application in release mode, your build process generates one or more debug symbol archives, commonly referred to simply as dSYMs. A dSYM stores debug symbols and exact offsets for a particular build of your application and its modules. With this detailed information, Splunk RUM can convert crash data for that specific build of your application version into readable reports labeled with function names and line numbers, showing what code was run, in what order, and where the crash happened. This conversion is called symbolication in iOS terminology. Different dSYMs symbolicate your applications's main application code, third-party frameworks, and system libraries. -To upload dSYMs use the splunk-rum CLI. You can upload dSYMs from your main application code and from third-party frameworks, but not from system libraries. This means that all iOS backtraces will only be partially symbolicated. +The ``splunk-rum`` CLI compresses dSYM directories into .zip files for you and uploads them. When you upload a zipped dSYM to Splunk RUM, you enable Splunk RUM to symbolicate the debug symbols contained within that dSYM. This in turn enables you to view stack traces with the names of functions and offsets into those functions to help you identify the line of code that was executing when the application crashed. +You can upload dSYMs from your main application code and from third-party frameworks, but not from system libraries. This means that Splunk RUM does not yet support the symbolication of stack frames for system libraries. + + +Prerequisites +===================================================================== + +Upgrade the following Splunk components: + +SplunkOtelCrashReporting : v0.7.0 + +SplunkOtel : v0.13.0 + +Install the splunk-rum CLI. + + +Find dSYMs +===================================================================== + +To locate the dSYMs directory for a specific release build: + +Open Xcode Organizer (Xcode → Window → Organizer) and right-click (Command-click) on the version number of the archive for your release. + +Select Show in Finder. + +In the Finder window that opens, right-click on the listed entry for your release, and select Show Package Contents. +The window now shows the dSYMs/ directory, and you can drag that directory entry into a Terminal window to copy its path there for use with the splunk-rum command. If the path has spaces in it, you may need to enclose it in double quotes when invoking the command. For example, splunk-rum ios upload --path "" + + +Upload dSYMs +===================================================================== + +To upload dSYMs use the splunk-rum CLI as follows. + +Splunk recommends that you upload dSYMs to Splunk RUM before you distribute corresponding binaries. To ensure this, the best practice is to integrate the splunk-rum CLI into your CI pipeline so that whenever you archive your iOS application, your pipeline uploads the corresponding dSYMs to Splunk RUM. + +Upload your application's dSYMs: + + + +splunk-rum ios upload --path +(Optional) Verify that your uploads succeeded: + + + +splunk-rum ios list + + +Syntax +--------------------------------------------------------------------- + +splunk-rum ios [command] [parameters] +Command descriptions From 675adedd38ac8e9817527ab854f131ea7d2de0a6 Mon Sep 17 00:00:00 2001 From: ada Date: Mon, 14 Apr 2025 19:56:45 -0700 Subject: [PATCH 026/100] Migrated content from Confluence --- .../set-up-javascript-source-mapping.rst | 4 +- gdi/get-data-in/rum/ios/add-dsyms.rst | 91 +++++++++++-------- 2 files changed, 53 insertions(+), 42 deletions(-) diff --git a/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst b/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst index fd47c9183..02056ecc9 100644 --- a/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst +++ b/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst @@ -78,7 +78,7 @@ Command descriptions * ``--debug`` Enable debug logs. - * ``--dry-run=[true|false]`` Preview the files that will be injected for the given options. Default: false. + * ``--dry-run=[true|false]`` Preview the files that will be injected for the given options. Default: ``false``. * ``-h, --help`` Display help for this command. @@ -104,7 +104,7 @@ Command descriptions * ``--exclude `` A space-separated list of glob file patterns for selecting specific source map files to not upload. - * ``--dry-run`` Preview the files that will be uploaded for the given options. + * ``--dry-run=[true|false]`` Preview the files that will be uploaded for the given options. Default: ``false``. * ``--debug`` Enable debug logs. diff --git a/gdi/get-data-in/rum/ios/add-dsyms.rst b/gdi/get-data-in/rum/ios/add-dsyms.rst index 001778478..26a96d78f 100644 --- a/gdi/get-data-in/rum/ios/add-dsyms.rst +++ b/gdi/get-data-in/rum/ios/add-dsyms.rst @@ -20,13 +20,12 @@ You can upload dSYMs from your main application code and from third-party framew Prerequisites ===================================================================== -Upgrade the following Splunk components: +* Upgrade the following Splunk components: -SplunkOtelCrashReporting : v0.7.0 + * SplunkOtelCrashReporting : v0.7.0 + * SplunkOtel : v0.13.0 -SplunkOtel : v0.13.0 - -Install the splunk-rum CLI. +* :ref:`Install the splunk-rum CLI`. Find dSYMs @@ -34,39 +33,40 @@ Find dSYMs To locate the dSYMs directory for a specific release build: -Open Xcode Organizer (Xcode → Window → Organizer) and right-click (Command-click) on the version number of the archive for your release. - -Select Show in Finder. - -In the Finder window that opens, right-click on the listed entry for your release, and select Show Package Contents. -The window now shows the dSYMs/ directory, and you can drag that directory entry into a Terminal window to copy its path there for use with the splunk-rum command. If the path has spaces in it, you may need to enclose it in double quotes when invoking the command. For example, splunk-rum ios upload --path "" +#. Open Xcode Organizer (Xcode → Window → Organizer) and right-click (Command-click) on the version number of the archive for your release. +#. Select :guilabel:`Show in Finder`. +#. In the Finder window that opens, right-click on the listed entry for your release, and select :guilabel:`Show Package Contents`. + The window now shows the dSYMs/ directory, and you can drag that directory entry into a Terminal window to copy its path there for use with the splunk-rum command. If the path has spaces in it, you may need to enclose it in double quotes when invoking the command. For example, ``splunk-rum ios upload --path ""`` Upload dSYMs ===================================================================== -To upload dSYMs use the splunk-rum CLI as follows. +To upload dSYMs use the ``splunk-rum`` CLI as follows. -Splunk recommends that you upload dSYMs to Splunk RUM before you distribute corresponding binaries. To ensure this, the best practice is to integrate the splunk-rum CLI into your CI pipeline so that whenever you archive your iOS application, your pipeline uploads the corresponding dSYMs to Splunk RUM. +.. note:: + Splunk recommends that you upload dSYMs to Splunk RUM before you distribute corresponding binaries. To ensure this, the best practice is to integrate the ``splunk-rum`` CLI into your CI pipeline so that whenever you archive your iOS application, your pipeline uploads the corresponding dSYMs to Splunk RUM. -Upload your application's dSYMs: +#. Upload your application's dSYMs: + .. code-block:: bash + + splunk-rum ios upload --path -splunk-rum ios upload --path -(Optional) Verify that your uploads succeeded: +#. (Optional) Verify that your uploads succeeded: - - -splunk-rum ios list + .. code-block:: bash + + splunk-rum ios list Syntax --------------------------------------------------------------------- -splunk-rum ios [command] [parameters] -Command descriptions - +.. code-block:: bash + + splunk-rum ios [command] [parameters] Command descriptions @@ -79,26 +79,37 @@ Command descriptions * - :strong:`Command` - :strong:`Description` - * - ``sourcemaps inject --path [optional-parameters]`` - - Search ```` for source map/minified file pairs and compute a source map ID for each pair. Then, inject that source map ID into each minified file as a code snippet. + * - ``upload --path [optional-parameters]`` + - Upload dSYMs within the directory you specify. The directory may contain a single dSYM .zip file or multiple dSYMs, in which case this command will compress and upload all of them. Parameters: - * PLACEHOLDER - * PLACEHOLDER - * PLACEHOLDER - * PLACEHOLDER - * PLACEHOLDER - * PLACEHOLDER + * ``--path `` Path to the directory containing dSYMs or a single dSYM.zip file. + + * ``--realm `` Realm for your organization. For example, us0. You can omit this parameter and set the environment variable ``SPLUNK_REALM`` instead. + + * ``--token `` API access token. You can omit this parameter and set the environment variable ``SPLUNK_ACCESS_TOKEN`` instead. + + * ``--debug`` Enable debug logs. + + * ``--dry-run=[true|false]`` Perform a trial run with no changes made. Default: ``false``. + + * ``-h, --help`` Display help for this command. - * - ``sourcemaps upload --path --realm --token [optional-parameters]`` - - - * PLACEHOLDER - * PLACEHOLDER - * PLACEHOLDER - * PLACEHOLDER - * PLACEHOLDER - * PLACEHOLDER - * PLACEHOLDER - * PLACEHOLDER + * - ``list [optional-parameters]`` + - List the 100 most recently uploaded dSYMs, sorted in reverse chronological order based on the upload timestamp. + + Parameters: + + * ``--realm `` Realm for your organization. For example, ``us0``. You can omit this parameter and set the environment variable ``SPLUNK_REALM`` instead. + + * ``--token `` API access token. You can omit this parameter and set the environment variable ``SPLUNK_ACCESS_TOKEN`` instead. + + * ``--debug`` Enable debug logs. + + * ``--dry-run=[true|false]`` Perform a trial run with no changes made. Default: ``false``. + + * ``-h, --help`` Display help for this command. + + From baaaa701e0818688450c4bfd012fce5471bbdb2d Mon Sep 17 00:00:00 2001 From: ada Date: Mon, 14 Apr 2025 20:26:06 -0700 Subject: [PATCH 027/100] Migrated content from Confluence --- .../rum/android/add-mapping-file.rst | 144 +++++++++++++++++- .../set-up-javascript-source-mapping.rst | 2 +- gdi/get-data-in/rum/ios/add-dsyms.rst | 4 +- 3 files changed, 142 insertions(+), 8 deletions(-) diff --git a/gdi/get-data-in/rum/android/add-mapping-file.rst b/gdi/get-data-in/rum/android/add-mapping-file.rst index 54c2dbf1a..bddc194c1 100644 --- a/gdi/get-data-in/rum/android/add-mapping-file.rst +++ b/gdi/get-data-in/rum/android/add-mapping-file.rst @@ -6,11 +6,142 @@ Add a mapping file .. meta:: - :description: PLACEHOLDER. + :description: Your uploaded mapping file enables Splunk RUM to convert stack traces back into a human-readable form. +When you set the ``minifyEnabled`` property to true in your Android application source code, your build process minifies, optimizes, and obfuscates the code and generates a single mapping file, ``mapping.txt``. This mapping file contains the information Splunk RUM needs to convert stack traces containing obfuscated classes and filenames back into a human readable form. This conversion is called de-obfuscation in Android. +.. note:: + De-obfuscation is available for Android application crashes only. + + + .. note:: + Make sure that the mapping file you upload to Splunk RUM matches the binary you deploy to production. To ensure this, the best practice is to integrate the splunk-rum usage into your CI pipeline so that whenever you re-build your Android application, you also re-upload its mapping file. + + +In order to associate a specific mapping file with a specific application build, Splunk RUM compares the ``applicationId`` and ``versionCode`` of the application to the parameters that you specify along with the mapping file. To specify these properties for the mapping file, you can include them as parameters in the ``splunk-rum android upload`` command. Alternatively, you can include your application's merged or packaged manifest (``AndroidManifest.xml``), where these properties are stored by default, in the ``splunk-rum android upload-with-manifest`` command. + + +Prerequisites +===================================================================== + +* Upgrade the following Splunk components: + + * :new-page:`SplunkOtelCrashReporting` : v0.7.0 + * :new-page:`SplunkOtel` : v0.13.0 + +* :ref:`Install the splunk-rum CLI`. + + +Uploads for production builds +===================================================================== + +#. Upload your application's mapping file and specify its ``applicationID`` and ``versionCode`` properties. + + You can do this in either of these ways: + + * Run the ``upload`` command with the ``--app-id`` and ``--version-code`` parameters: + + .. code-block:: bash + + splunk-rum android upload \ + --app-id= --version-code= \ + --path= \ + [optional-parameters] + + * Run the ``upload-with-manifest`` command with the path to the application's merged or packaged ``AndroidManifest.xml`` file, along with path to the mapping file. Be sure to include the correct manifest, which is the one that's created when your application is built, and is located in the build output directory: + + .. code-block:: bash + + splunk-rum android upload-with-manifest \ + --manifest \ + --path \ + [optional-parameters] + + + +#. (Optional) Verify that your upload succeeded: + + .. code-block:: bash + + splunk-rum android list --app-id= + + + +Uploads for pre-production builds +===================================================================== + + If you're instrumenting pre-production builds where versionCode isn't updated for each build, add a unique identifier as metadata to the AndroidManifest.xml file in your source directory before building the application binary. This identifier must be named splunk.build_id. To add this identifier, follow the steps below: + +Add this snippet to the block of the AndroidManifest.XML file in your source directory: + + + + +Add the following code to the android {} block of the Gradle build script of your application. This code generates a new UUID for every application variant and adds it to the merged manifest file after the variant is assembled, where the Splunk RUM agent will retrieve it: + +If you use Kotlin add this tobuild.gradle.kts: + + + +applicationVariants.configureEach { + val uniqueBuildId = UUID.randomUUID().toString() + this.mergedFlavor.manifestPlaceholders["splunkBuildId"] = uniqueBuildId + logger.lifecycle("Splunk: Variant $name assigned build ID: $uniqueBuildId") + val capitalizedVariantName = name.replaceFirstChar { it.uppercase() } + tasks.named("process${capitalizedVariantName}Manifest").configure { + outputs.upToDateWhen { false } + } +} +If you use Groovy add this to build.gradle: + + + +applicationVariants.configureEach { variant -> + def uniqueBuildId = UUID.randomUUID().toString() + variant.mergedFlavor.manifestPlaceholders.put("splunkBuildId", uniqueBuildId) + project.logger.lifecycle("Splunk: Variant ${variant.name} assigned build ID: ${uniqueBuildId}") + def capitalizedVariantName = variant.name.capitalize() + tasks.named("process${capitalizedVariantName}Manifest").configure { + outputs.upToDateWhen { false } + } +} +Upload your application's mapping file and specify its applicationID , versionCode, and splunk.build_id properties. You can do this in either of these ways: + +Run the upload command with the --app-id , --version-code and --splunk-build-id parameters. This option only works if you added splunk.build_id to your Gradle build script (in step 1). Get the build ID from the Gradle build output or from the merged manifest: + + + +splunk-rum android upload \ +--app-id= --version-code= \ +--splunk-build-id \ +--path= \ +[optional-parameters] +Run the upload-with-manifest command with the path to the application's merged or packaged AndroidManifest.XML file, along with path to the mapping file. Be sure to include the correct manifest, which is the one that's created when your application is built, and is located in the build output directory: + + + +splunk-rum android upload-with-manifest \ +--manifest \ +--path \ +[optional-parameters] +(Optional) Verify that your upload succeeded: + + + +splunk-rum android list --app-id= + + + + +Syntax +--------------------------------------------------------------------- + + +splunk-rum android [command] [parameters] @@ -24,8 +155,8 @@ Command descriptions * - :strong:`Command` - :strong:`Description` - * - ``sourcemaps inject --path [optional-parameters]`` - - Search ```` for source map/minified file pairs and compute a source map ID for each pair. Then, inject that source map ID into each minified file as a code snippet. + * - ``upload --path --app-id --version-code [optional-parameters]`` + - Upload the mapping file ``mapping.txt`` with the application ID and version code that you specify. Parameters: @@ -37,8 +168,11 @@ Command descriptions * PLACEHOLDER - * - ``sourcemaps upload --path --realm --token [optional-parameters]`` - - + * - ``upload-with-manifest --manifest --path [optional-parameters]`` + - Upload the Android mapping.txt file with required metadata extracted from the AndroidManifest.xml file. + + Parameters: + * PLACEHOLDER * PLACEHOLDER * PLACEHOLDER diff --git a/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst b/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst index 02056ecc9..575818926 100644 --- a/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst +++ b/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst @@ -6,7 +6,7 @@ Set up JavaScript source mapping .. meta:: - :description: Your uploaded mapping file enables Splunk RUM to convert stack traces back into a human-readable form. + :description: Your uploaded source map enables Splunk RUM to convert stack traces back into a human-readable form. This page explains how to set up JavaScript source mapping, which allows Splunk RUM to convert stack frames from browser application errors back into a human-readable form so that you can see the exact line of source code related to an error. diff --git a/gdi/get-data-in/rum/ios/add-dsyms.rst b/gdi/get-data-in/rum/ios/add-dsyms.rst index 26a96d78f..b3be842ce 100644 --- a/gdi/get-data-in/rum/ios/add-dsyms.rst +++ b/gdi/get-data-in/rum/ios/add-dsyms.rst @@ -22,8 +22,8 @@ Prerequisites * Upgrade the following Splunk components: - * SplunkOtelCrashReporting : v0.7.0 - * SplunkOtel : v0.13.0 + * :new-page:`SplunkOtelCrashReporting` : v0.7.0 + * :new-page:`SplunkOtel` : v0.13.0 * :ref:`Install the splunk-rum CLI`. From fc1dc69c00e09d5a76d7aa3a59dff4e8e7656d03 Mon Sep 17 00:00:00 2001 From: ada Date: Mon, 14 Apr 2025 21:26:58 -0700 Subject: [PATCH 028/100] Migrated content from Confluence --- .../rum/android/add-mapping-file.rst | 161 ++++++++++++------ 1 file changed, 105 insertions(+), 56 deletions(-) diff --git a/gdi/get-data-in/rum/android/add-mapping-file.rst b/gdi/get-data-in/rum/android/add-mapping-file.rst index bddc194c1..485901a10 100644 --- a/gdi/get-data-in/rum/android/add-mapping-file.rst +++ b/gdi/get-data-in/rum/android/add-mapping-file.rst @@ -72,76 +72,91 @@ Uploads for production builds Uploads for pre-production builds ===================================================================== - If you're instrumenting pre-production builds where versionCode isn't updated for each build, add a unique identifier as metadata to the AndroidManifest.xml file in your source directory before building the application binary. This identifier must be named splunk.build_id. To add this identifier, follow the steps below: + If you're instrumenting pre-production builds where ``versionCode`` isn't updated for each build, add a unique identifier as metadata to the ``AndroidManifest.xml`` file in your source directory before building the application binary. This identifier must be named ``splunk.build_id``. To add this identifier, follow the steps below: -Add this snippet to the block of the AndroidManifest.XML file in your source directory: +#. Add this snippet to the ```` block of the ``AndroidManifest.xml`` file in your source directory: + .. code-block:: xml - -Add the following code to the android {} block of the Gradle build script of your application. This code generates a new UUID for every application variant and adds it to the merged manifest file after the variant is assembled, where the Splunk RUM agent will retrieve it: -If you use Kotlin add this tobuild.gradle.kts: +#. Add the following code to the ``android {}`` block of the Gradle build script of your application. This code generates a new UUID for every application variant and adds it to the merged manifest file after the variant is assembled, where the Splunk RUM agent will retrieve it: + * If you use Kotlin add this to ``build.gradle.kts``: -applicationVariants.configureEach { - val uniqueBuildId = UUID.randomUUID().toString() - this.mergedFlavor.manifestPlaceholders["splunkBuildId"] = uniqueBuildId - logger.lifecycle("Splunk: Variant $name assigned build ID: $uniqueBuildId") - val capitalizedVariantName = name.replaceFirstChar { it.uppercase() } - tasks.named("process${capitalizedVariantName}Manifest").configure { - outputs.upToDateWhen { false } - } -} -If you use Groovy add this to build.gradle: + .. code-block:: + applicationVariants.configureEach { + val uniqueBuildId = UUID.randomUUID().toString() + this.mergedFlavor.manifestPlaceholders["splunkBuildId"] = uniqueBuildId + logger.lifecycle("Splunk: Variant $name assigned build ID: $uniqueBuildId") -applicationVariants.configureEach { variant -> - def uniqueBuildId = UUID.randomUUID().toString() - variant.mergedFlavor.manifestPlaceholders.put("splunkBuildId", uniqueBuildId) - project.logger.lifecycle("Splunk: Variant ${variant.name} assigned build ID: ${uniqueBuildId}") - def capitalizedVariantName = variant.name.capitalize() - tasks.named("process${capitalizedVariantName}Manifest").configure { - outputs.upToDateWhen { false } - } -} -Upload your application's mapping file and specify its applicationID , versionCode, and splunk.build_id properties. You can do this in either of these ways: + val capitalizedVariantName = name.replaceFirstChar { it.uppercase() } + tasks.named("process${capitalizedVariantName}Manifest").configure { + outputs.upToDateWhen { false } + } + } -Run the upload command with the --app-id , --version-code and --splunk-build-id parameters. This option only works if you added splunk.build_id to your Gradle build script (in step 1). Get the build ID from the Gradle build output or from the merged manifest: + * If you use Groovy add this to ``build.gradle``: + .. code-block:: -splunk-rum android upload \ ---app-id= --version-code= \ ---splunk-build-id \ ---path= \ -[optional-parameters] -Run the upload-with-manifest command with the path to the application's merged or packaged AndroidManifest.XML file, along with path to the mapping file. Be sure to include the correct manifest, which is the one that's created when your application is built, and is located in the build output directory: + applicationVariants.configureEach { variant -> + def uniqueBuildId = UUID.randomUUID().toString() + variant.mergedFlavor.manifestPlaceholders.put("splunkBuildId", uniqueBuildId) + project.logger.lifecycle("Splunk: Variant ${variant.name} assigned build ID: ${uniqueBuildId}") + def capitalizedVariantName = variant.name.capitalize() + tasks.named("process${capitalizedVariantName}Manifest").configure { + outputs.upToDateWhen { false } + } + } -splunk-rum android upload-with-manifest \ ---manifest \ ---path \ -[optional-parameters] -(Optional) Verify that your upload succeeded: +#. Upload your application's mapping file and specify its ``applicationID`` , ``versionCode``, and ``splunk.build_id`` properties. You can do this in either of these ways: + * Run the upload command with the ``--app-id``, ``--version-code``, and ``--splunk-build-id`` parameters. This option only works if you added ``splunk.build_id`` to your Gradle build script (in step 1). Get the build ID from the Gradle build output or from the merged manifest: -splunk-rum android list --app-id= - + .. code-block:: bash + + splunk-rum android upload \ + --app-id= --version-code= \ + --splunk-build-id \ + --path= \ + [optional-parameters] + + + * Run the ``upload-with-manifest`` command with the path to the application's merged or packaged ``AndroidManifest.xml`` file, along with path to the mapping file. Be sure to include the correct manifest, which is the one that's created when your application is built, and is located in the build output directory: + + .. code-block:: bash + + splunk-rum android upload-with-manifest \ + --manifest \ + --path \ + [optional-parameters] + + +#. (Optional) Verify that your upload succeeded: + + .. code-block:: bash + splunk-rum android list --app-id= + Syntax --------------------------------------------------------------------- +.. code-block:: bash -splunk-rum android [command] [parameters] + splunk-rum android [command] [parameters] @@ -160,26 +175,60 @@ Command descriptions Parameters: - * PLACEHOLDER - * PLACEHOLDER - * PLACEHOLDER - * PLACEHOLDER - * PLACEHOLDER - * PLACEHOLDER - + * ``--path `` Required. Path to the ``mapping.txt`` file. + + * ``--app-id `` Required. The ``applicationId`` property in your application's ``build.gradle.kts`` file. + + * ``--version-code `` Required. The ``versionCode`` property of your application. + + * ``--splunk-build-id `` Optional. Splunk build ID for the upload. + + * ``--realm `` Optional. Realm for your organization. For example, ``us0``. You can omit this parameter and set the environment variable ``SPLUNK_REALM`` instead. + + * ``--token `` Optional. API access token. You can omit this parameter and set the environment variable ``SPLUNK_ACCESS_TOKEN`` instead. + + * ``--debug`` Enable debug logs. + + * ``--dry-run=[true|false]`` Perform a trial run with no changes made. Default: ``false``. + + * ``-h, --help`` Display help for this command. + * - ``upload-with-manifest --manifest --path [optional-parameters]`` - - Upload the Android mapping.txt file with required metadata extracted from the AndroidManifest.xml file. + - Upload the Android ``mapping.txt`` file with required metadata extracted from the ``AndroidManifest.xml`` file. + + Parameters: + + * ``--manifest `` Path to the merged or the packaged ``AndroidManifest.xml`` file that is generated when the application is built. + + * ``--path `` Path to the ``mapping.txt`` file. + + * ``--realm `` Realm for your organization. For example, ``us0``. You can omit this parameter and set the environment variable ``SPLUNK_REALM`` instead. + + * ``--token `` API access token. You can omit this parameter and set the environment variable ``SPLUNK_ACCESS_TOKEN`` instead. + + * ``--dry-run=[true|false]`` Preview the file that will be uploaded and the parameters that will be extracted from ``AndroidManifest.xml``. + + * ``--debug`` Enable debug logs. + + * ``-h, --help`` Display help for command. + + + * - ``list --app-id [optional-parameters]`` + - List the 100 most recently uploaded mapping files for the given application ID, sorted in reverse chronological order based on the upload timestamp. Parameters: - * PLACEHOLDER - * PLACEHOLDER - * PLACEHOLDER - * PLACEHOLDER - * PLACEHOLDER - * PLACEHOLDER - * PLACEHOLDER - * PLACEHOLDER + * ``--app-id `` The ``applicationId`` property in your app's ``build.gradle.kts`` file. + + * ``--realm `` Realm for your organization. For example, ``us0``. You can omit this parameter and set the environment variable ``SPLUNK_REALM`` instead. + + * ``--token `` API access token. You can omit this parameter and set the environment variable ``SPLUNK_ACCESS_TOKEN`` instead. + + * ``--dry-run=[true|false]`` Perform a trial run with no changes made. Default: ``false``. + + * ``--debug`` Enable debug logs. + + * ``-h, --help`` Display help for this subcommand. From 7cd6e1edb2e04817215cb14b7a1e94bb908b7fdf Mon Sep 17 00:00:00 2001 From: ada Date: Mon, 14 Apr 2025 22:41:35 -0700 Subject: [PATCH 029/100] Migrated content from Confluence --- rum/error-aggregates.rst | 82 +++++++++++++++------------------------- 1 file changed, 30 insertions(+), 52 deletions(-) diff --git a/rum/error-aggregates.rst b/rum/error-aggregates.rst index 9e857e204..eec91ea6e 100644 --- a/rum/error-aggregates.rst +++ b/rum/error-aggregates.rst @@ -53,28 +53,6 @@ To learn more about Tag Spotlight, see: -.. _mobile-error-summary: - -Error summary ------------------------------------------------------------------------------------------- - -``PLACEHOLDER`` - - -.. _mobile-error-groups: - -Error groups side panel ------------------------------------------------------------------------------------------- - -``PLACEHOLDER`` - - -.. _mobile-session-details: - -Session details ------------------------------------------------------------------------------------------- - -``PLACEHOLDER`` .. _mobile-connect-source-files: @@ -92,59 +70,63 @@ Connect source files JavaScript error aggregation ========================================================================================== -The JavaScript Errors metric in RUM show the JavaScript errors (by error ID) which occur most often in your applications. The error ID is created by hashing the associated stack trace, error message, and error type. When you drill into an error, you can see the error type, the error message, associated stack trace, and the trend of the error frequency. +Splunk RUM's :guilabel:`APPLICATION SUMMARY DASHBOARD` groups errors by platform: +* Browser applications each have their own section. +* Android applications are grouped by error ID. +* iOS apps are grouped by error ID. -Find the top JavaScript errors across your applications in Tag Spotlight ------------------------------------------------------------------------------------------- - -In Splunk RUM, the JavaScript errors view shows the JavaScript errors sorted by page, whereas the metric :strong:`JavaScript Errors (by error ID)` shows the top ten JavaScript errors across your entire application. In the metric :strong:`Frontend Errors by ErrorID` the information is displayed by error type, error ID, then error message. +Each error group has a unique error ID. The JavaScript Errors metric in RUM displays JavaScript errors (grouped by error ID) which occur most often in your applications. The error ID is created by hashing the associated stack trace, error message, and error type. When you drill into an error, you can see the error type, the error message, associated stack trace, and the trend of the error frequency. For more information about the error ID, see :ref:`about-error-id`. -1. Open RUM. From the left navigation panel, select :strong:`RUM` and :strong:`Browser` as the source and the application you wan to monitor. +To see errors from a specific browser application: -2. To open Tag Spotlight from either the Application Summary Dashboard, or Overview pages click on any metric. +#. Scroll down to the application name and expand its section. The expanded section displays a :guilabel:`JavaScript Errors` pane on the right. +#. To see details about a specific error, select it. +#. If Splunk RUM has source mapping for this application, it displays the error's stack trace in readable form. Otherwise, it displays a message indicating that it didn't detect any source mapping that corresponds to this error. -* For example, select :strong:`See all` in the metric :strong:`JavaScript errors(by error ID)` to explore all of the JavaScript errors in Tag Spotlight. -.. _browser-error-summary: +.. _browser-connect-source-files: -Error summary +Upload source maps for readable stack traces ------------------------------------------------------------------------------------------ -``PLACEHOLDER`` +The information in most raw stack traces is not fully human readable. To make your raw stack traces easier for you to read, you need to provide source maps that correspond to this browser application. Source maps enable Splunk RUM to translate raw stack traces back into a human-readable form. You can either upload source maps now ("on-demand”) or at the time that you instrument your browser application: +* To upload source maps now, select Upload on this dashboard. +* To upload source maps at instrumentation time, see :ref:`set-up-javascript-source-mapping`. -.. _browser-error-groups: -Error groups side panel +Find the top JavaScript errors across your applications in Tag Spotlight ------------------------------------------------------------------------------------------ -``PLACEHOLDER`` +In Splunk RUM, the JavaScript errors view shows the JavaScript errors sorted by page, whereas the metric :strong:`JavaScript Errors (by error ID)` shows the top ten JavaScript errors across your entire application. In the metric :strong:`Frontend Errors by ErrorID` the information is displayed by error type, error ID, then error message. +1. Open RUM. From the left navigation panel, select :strong:`RUM` and :strong:`Browser` as the source and the application you wan to monitor. -.. _browser-session-details: +2. To open Tag Spotlight from either the Application Summary Dashboard, or Overview pages click on any metric. -Session details ------------------------------------------------------------------------------------------- +* For example, select :strong:`See all` in the metric :strong:`JavaScript errors(by error ID)` to explore all of the JavaScript errors in Tag Spotlight. -``PLACEHOLDER`` +JavaScript errors without stacktrace, type, or message +------------------------------------------------------------------------------------------ -.. _browser-connect-source-files: +Sometimes, you might see a message in the UI that says :guilabel:`JavaScript error without a stacktrace, type, or message`. This might happen because the error didn't have any information about the stack trace before it was ingested by Splunk RUM. To troubleshoot, try narrowing in on a specific time range which shows the JS error only, and explore the related User sessions. -Connect source files ------------------------------------------------------------------------------------------- -* To upload dSYMs for iOS apps, see ``PLACEHOLDER`` -* To upload source maps for Android apps, see ``PLACEHOLDER`` +.. _about-error-id: +About the error ID +========================================================================================== + +Splunk RUM groups errors based on an error ID (labeled :guilabel:`ErrorID`) that it computes for each error. Its computation is based on a hash of the error's stack trace, the error's message, and the error's type. It computes each error ID only once. The stack trace component of the hash is different depending on whether the stack trace is symbolicated or not. Therefore, the computed error ID, and hence the grouping of errors, is different depending on when you upload source maps: -JavaScript errors without stacktrace, type, or message ------------------------------------------------------------------------------------------- +* If you never upload source maps, the error IDs are based on the unreadable stack traces. +* If you upload source maps at instrumentation time, the error IDs are based on the readable stack traces. +* If you upload source maps "on-demand" (in other words, after Splunk RUM has already ingested some errors) through the UI, the error IDs of existing errors are unchanged (still based on unreadable stack traces) but the error IDs, and hence error groupings, of future errors will be different (based on readable stack traces). If you're looking at a large enough time range to include errors ingested before and after you uploaded your source map, you will see that your application's errors are grouped differently, and the :guilabel:`Error summary` displays a message to alert you to this fact. The message varies depending on the application's platform, but is something like :guilabel:`..older instances of this crash remain in their original groupings, but newer instances are grouped based on the de-obfuscation now available`. -Sometimes, you might see a message in the UI that says ``JavaScript error without a stacktrace, type, or message``. This might happen because the error didn't have any information about the stack trace before it was ingested by Splunk RUM. To troubleshoot, try narrowing in on a specific time range which shows the JS error only, and explore the related User sessions. Learn more @@ -154,7 +136,3 @@ Learn more * To learn more about monitoring errors in Splunk RUM for browser, see the scenario :ref:`rum-identify-span-problems`. * For examples on working with tags, see :ref:`rum-tag-search` - - - - From e47643538645c7b12c08128a916e5f552cb06b7b Mon Sep 17 00:00:00 2001 From: ada Date: Mon, 14 Apr 2025 22:58:13 -0700 Subject: [PATCH 030/100] Migrated content from Confluence --- rum/error-aggregates.rst | 69 ++++++++++++++++++++++++++++------------ 1 file changed, 49 insertions(+), 20 deletions(-) diff --git a/rum/error-aggregates.rst b/rum/error-aggregates.rst index eec91ea6e..45a1eedcb 100644 --- a/rum/error-aggregates.rst +++ b/rum/error-aggregates.rst @@ -30,6 +30,18 @@ The error ID can represent: * hash ID of the error type +.. _about-error-id: + +About the error ID +========================================================================================== + +Splunk RUM groups errors based on an error ID (labeled :guilabel:`ErrorID`) that it computes for each error. Its computation is based on a hash of the error's stack trace, the error's message, and the error's type. It computes each error ID only once. The stack trace component of the hash is different depending on whether the stack trace is symbolicated or not. Therefore, the computed error ID, and hence the grouping of errors, is different depending on when you upload source maps: + +* If you never upload source maps, the error IDs are based on the unreadable stack traces. +* If you upload source maps at instrumentation time, the error IDs are based on the readable stack traces. +* If you upload source maps "on-demand" (in other words, after Splunk RUM has already ingested some errors) through the UI, the error IDs of existing errors are unchanged (still based on unreadable stack traces) but the error IDs, and hence error groupings, of future errors will be different (based on readable stack traces). If you're looking at a large enough time range to include errors ingested before and after you uploaded your source map, you will see that your application's errors are grouped differently, and the :guilabel:`Error summary` displays a message to alert you to this fact. The message varies depending on the application's platform, but is something like :guilabel:`..older instances of this crash remain in their original groupings, but newer instances are grouped based on the de-obfuscation now available`. + + Mobile crash aggregation ========================================================================================== @@ -37,6 +49,37 @@ Mobile crash aggregation A crash happens when a user encounters an error and has to exit the app. App errors are all other types of errors that occur but don't result in the user having to exit the app. For example, ANR (application not responding). +Splunk RUM's :guilabel:`APPLICATION SUMMARY DASHBOARD` groups errors by platform: + +* Browser applications each have their own section. +* Android applications are grouped by error ID. +* iOS apps are grouped by error ID. + + +Each error group has a unique error ID. For more information about the error ID, see :ref:`about-error-id`. + +To see crashes from a specific mobile application: + +#. Scroll down to the :guilabel:`Android Symbolication` or :guilabel:`iOS Symbolication` section and expand it. +#. In the expanded section, select the :guilabel:`Crashes`, :guilabel:`App Errors`, or :guilabel:`All` tab in the pane on the right. These tabs display aggregated data with a count of the number of crashes or errors in each aggregation. +#. To see details about a specific crash or error, select it. This opens the :guilabel:`Error groups` side panel on the right. +#. In the panel on the right, Splunk RUM displays the stack trace for this crash or error. If Splunk RUM has a mapping file (Android) or dSYM (iOS) for the application that this crash or error originated from, it displays the stack trace in readable form. Otherwise, it displays the message :guilabel:`No mapping file detected` (Android) or :guilabel:`No dSYM detected` (iOS). + + +View session details +------------------------------------------------------------------------------------------ + +The session details pane lists every session ID (span) that belongs to the user session you select. It also displays the entire timeline of the user session so that you have more insight into the events leading up to a crash. For example, you can see which views were loaded, and what requests were made. + +To see session details for a specific crash: + +#. Select that crash. This opens the :guilabel:`Error groups` side panel on the right. +#. In the :guilabel:`Error groups` side panel, select the :guilabel:`User Sessions` tab. This opens the list of user sessions associated with the crash you selected. +#. Select a specific session ID. This opens the :guilabel:`Crash` side panel with session details. +#. If you've uploaded source mapping for your application, you can also see a human-readable stack trace: expand :guilabel:`Stack Trace`. + + + Explore top crashes across in Tag Spotlight ------------------------------------------------------------------------------------------ @@ -53,16 +96,15 @@ To learn more about Tag Spotlight, see: - - .. _mobile-connect-source-files: Connect source files ------------------------------------------------------------------------------------------ -* To upload Proguard mappping, see ``PLACEHOLDER`` -* To upload mapping, see ``PLACEHOLDER`` +The information in most raw crash stack traces is not fully human-readable. To make a stack trace readable, you must provide platform-specific mapping information that translates that stack trace into human-readable form: +* To upload mappping files at instrumentation time, see :ref:`add-dsyms` for iOS applications or :ref:`add-mapping-file` for Android applications. +* To upload mappping files using the widget on this dashboard, select :guilabel:`Add dSYMs` for iOS applications or :guilabel:`Add a mapping file` for Android applications. @@ -100,13 +142,13 @@ The information in most raw stack traces is not fully human readable. To make yo Find the top JavaScript errors across your applications in Tag Spotlight ------------------------------------------------------------------------------------------ -In Splunk RUM, the JavaScript errors view shows the JavaScript errors sorted by page, whereas the metric :strong:`JavaScript Errors (by error ID)` shows the top ten JavaScript errors across your entire application. In the metric :strong:`Frontend Errors by ErrorID` the information is displayed by error type, error ID, then error message. +In Splunk RUM, the JavaScript errors view shows the JavaScript errors sorted by page, whereas the metric :guilabel:`JavaScript Errors (by error ID)` shows the top ten JavaScript errors across your entire application. In the metric :guilabel:`Frontend Errors by ErrorID` the information is displayed by error type, error ID, then error message. -1. Open RUM. From the left navigation panel, select :strong:`RUM` and :strong:`Browser` as the source and the application you wan to monitor. +1. Open RUM. From the left navigation panel, select :guilabel:`RUM` and :guilabel:`Browser` as the source and the application you wan to monitor. 2. To open Tag Spotlight from either the Application Summary Dashboard, or Overview pages click on any metric. -* For example, select :strong:`See all` in the metric :strong:`JavaScript errors(by error ID)` to explore all of the JavaScript errors in Tag Spotlight. +* For example, select :guilabel:`See all` in the metric :guilabel:`JavaScript errors(by error ID)` to explore all of the JavaScript errors in Tag Spotlight. JavaScript errors without stacktrace, type, or message @@ -116,19 +158,6 @@ Sometimes, you might see a message in the UI that says :guilabel:`JavaScript err -.. _about-error-id: - -About the error ID -========================================================================================== - -Splunk RUM groups errors based on an error ID (labeled :guilabel:`ErrorID`) that it computes for each error. Its computation is based on a hash of the error's stack trace, the error's message, and the error's type. It computes each error ID only once. The stack trace component of the hash is different depending on whether the stack trace is symbolicated or not. Therefore, the computed error ID, and hence the grouping of errors, is different depending on when you upload source maps: - -* If you never upload source maps, the error IDs are based on the unreadable stack traces. -* If you upload source maps at instrumentation time, the error IDs are based on the readable stack traces. -* If you upload source maps "on-demand" (in other words, after Splunk RUM has already ingested some errors) through the UI, the error IDs of existing errors are unchanged (still based on unreadable stack traces) but the error IDs, and hence error groupings, of future errors will be different (based on readable stack traces). If you're looking at a large enough time range to include errors ingested before and after you uploaded your source map, you will see that your application's errors are grouped differently, and the :guilabel:`Error summary` displays a message to alert you to this fact. The message varies depending on the application's platform, but is something like :guilabel:`..older instances of this crash remain in their original groupings, but newer instances are grouped based on the de-obfuscation now available`. - - - Learn more ========================================================================================== From d0a1205406c5394b01f336838b5f98fe164fa29e Mon Sep 17 00:00:00 2001 From: ada Date: Mon, 14 Apr 2025 23:21:39 -0700 Subject: [PATCH 031/100] Migrated content from Confluence --- .../browser/set-up-javascript-source-mapping.rst | 15 +++++++++------ gdi/get-data-in/rum/rum-instrumentation.rst | 6 +++--- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst b/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst index 575818926..b0e3a8e20 100644 --- a/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst +++ b/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst @@ -13,8 +13,8 @@ This page explains how to set up JavaScript source mapping, which allows Splunk Setting up JavaScript source mapping involves these steps: -* (Optional) Adding the sourcesContent property to the source maps that are generated by your build tool. -* Injecting a code snippet into your minified files using either the splunk-rum CLI or the Splunk Webpack build plugin. +* (Optional) Adding the ``sourcesContent`` property to the source maps that are generated by your build tool. +* Injecting a code snippet into your minified files using either the ``splunk-rum`` CLI or the Splunk Webpack build plugin. * Uploading your source maps to Splunk RUM. * Deploying your minified files to your production environment. @@ -38,20 +38,23 @@ Option 1: Use the splunk-rum CLI #. Find all source map/minified file pairs in the directory you specify, compute a source map ID for each pair, and inject that source map ID into each minified file as a code snippet: .. code-block:: bash - splunk-rum sourcemaps inject --path + + splunk-rum sourcemaps inject --path #. Upload the source maps in the directory you specify to Splunk RUM. In this command, use the same values for application name (````) and application version (````) that you used in :ref:`configure-browser-instrumentation`. .. code-block:: bash - splunk-rum sourcemaps upload \ - --app-name --app-version \ - --path + + splunk-rum sourcemaps upload \ + --app-name --app-version \ + --path Syntax --------------------------------------------------------------------- .. code-block:: bash + splunk-rum [command] [parameters] diff --git a/gdi/get-data-in/rum/rum-instrumentation.rst b/gdi/get-data-in/rum/rum-instrumentation.rst index d7200f35c..f242bbce0 100644 --- a/gdi/get-data-in/rum/rum-instrumentation.rst +++ b/gdi/get-data-in/rum/rum-instrumentation.rst @@ -73,7 +73,7 @@ Prerequisites Installation --------------------------------------------------------------------- -#. Download ``splunk-rum`` from :rew-page:`the splunk-rum-cli repo`. This CLI is published to npm as package name ``@splunk/rum-cli``. +#. Download ``splunk-rum`` from :new-page:`the splunk-rum-cli repo`. This CLI is published to npm as package name ``@splunk/rum-cli``. #. Install ``splunk-rum`` in your Linux-based build environment either as: * A dependency of your build process, and add ``splunk-rum`` to your ``PATH``: @@ -84,9 +84,9 @@ Installation * A dependency to your existing package.json file. Note: This option is for browser applications only, not mobile applications: - .. code-block:: bash + .. code-block:: bash - npm install @splunk/rum-cli --save-dev + npm install @splunk/rum-cli --save-dev #. Set these environment variables: From 4bfbd3e54b48af3db2b1443de8341a78b82a4313 Mon Sep 17 00:00:00 2001 From: ada Date: Mon, 14 Apr 2025 23:36:22 -0700 Subject: [PATCH 032/100] Migrated content from Confluence --- .../set-up-javascript-source-mapping.rst | 45 ++++++++++--------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst b/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst index b0e3a8e20..ef70acfed 100644 --- a/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst +++ b/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst @@ -122,9 +122,11 @@ If your project uses Webpack 5 as its bundling tool, you can add the Splunk RUM If your project uses a different bunding tool or a different version of Webpack, use the ``splunk-rum`` CLI instead. -#. Add the Splunk RUM Webpack plugin to your package.json as a dev dependency: +#. Add the Splunk RUM Webpack plugin to your ``package.json`` as a dev dependency: + .. code-block:: bash - npm install @splunk/rum-build-plugins --save-dev + + npm install @splunk/rum-build-plugins --save-dev #. Configure your ``webpack.config.js`` to generate source maps. See :new-page:`Devtool | webpack`. @@ -133,24 +135,25 @@ If your project uses a different bunding tool or a different version of Webpack, If you don't want source maps to be uploaded while you're doing local builds for your own local development, set disableUpload to true. .. code-block:: json - const { SplunkRumWebpackPlugin } = require('@splunk/rum-build-plugins') - module.exports = { - ... - plugins: [ - ..., - new SplunkRumWebpackPlugin({ - applicationName: '', - appVersion: '', - sourceMaps: { - token: '', - realm: '', - // Optional: conditionally set 'disabledUpload' so that file uploads - // are only performed during your production builds on your CI pipeline - disableUpload: - } - }), - ] - } + + const { SplunkRumWebpackPlugin } = require('@splunk/rum-build-plugins') + module.exports = { + ... + plugins: [ + ..., + new SplunkRumWebpackPlugin({ + applicationName: '', + appVersion: '', + sourceMaps: { + token: '', + realm: '', + // Optional: conditionally set 'disabledUpload' so that file uploads + // are only performed during your production builds on your CI pipeline + disableUpload: + } + }), + ] + } #. Verify that whenever you build your application, its minified files are automatically injected with the ``sourceMapId`` property, and that its source maps are automatically uploaded to Splunk RUM. @@ -170,6 +173,6 @@ Deploy the injected JavaScript files to your production environment Once you've uploaded your application's source maps and deployed its injected minified files to your production environment, Splunk RUM automatically converts this application's stack traces into human-readable form. .. note:: - Make sure that the source maps that you upload to Splunk RUM match the minified files you deploy to production. To ensure this, the best practice is to integrate the splunk-rum commands into your build pipeline so that whenever you build an application, you also re-upload its source maps. + Make sure that the source maps that you upload to Splunk RUM match the minified files you deploy to production. To ensure this, the best practice is to integrate the ``splunk-rum`` commands into your build pipeline so that whenever you build an application, you also re-upload its source maps. From 1d4434d104770f08b8a09c646fd8faccfd6349b4 Mon Sep 17 00:00:00 2001 From: ada Date: Tue, 15 Apr 2025 09:12:06 -0700 Subject: [PATCH 033/100] Migrated content from Confluence --- .../rum/browser/browser-rum-errors.rst | 15 +-------------- .../rum/browser/rum-browser-data-model.rst | 11 +++++++++++ .../browser/set-up-javascript-source-mapping.rst | 5 +++-- 3 files changed, 15 insertions(+), 16 deletions(-) diff --git a/gdi/get-data-in/rum/browser/browser-rum-errors.rst b/gdi/get-data-in/rum/browser/browser-rum-errors.rst index 19182c56b..2bbf4fbcd 100644 --- a/gdi/get-data-in/rum/browser/browser-rum-errors.rst +++ b/gdi/get-data-in/rum/browser/browser-rum-errors.rst @@ -4,7 +4,6 @@ Errors collected by the Browser RUM agent ******************************************************** - .. meta:: :description: Understand which errors are collected by the Browser RUM agent for Splunk Observability Cloud real user monitoring / RUM. @@ -20,20 +19,8 @@ By default, the instrumentations collect errors from the following sources: To collect JavaScript errors from single-page application (SPA) frameworks, see :ref:`rum-browser-spa-errors`. - -Additions to the RUM browser model by splunk-rum -======================================================== -If you're using the ``splunk-rum`` CLI or the Webpack build plugin to upload your source map, those tools will add a new attribute named ``error.sourceMapIds`` to your RUM browser data model. This attribute contains a mapping of file URL and ``sourceMapId`` pairs, where: - -* You must have already injected the ``sourceMapId`` attribute into your source map (using the ``splunk-rum`` CLI or the Webpack build plugin). See :ref:`set-up-javascript-source-mapping`. -* Only files mentioned in the error's ``error.stack`` appear in ``error.sourceMapIds``. - -This attribute is only in your RUM browser data model if you're using the ``splunk-rum`` CLI or the Webpack build plugin. - - - Uncaught or unhandled errors -======================================================== +============================================= The Browser RUM agent registers each uncaught or unhandled error as a span with name ``onerror``. Here are some typical examples of uncaught or unhandled errors: diff --git a/gdi/get-data-in/rum/browser/rum-browser-data-model.rst b/gdi/get-data-in/rum/browser/rum-browser-data-model.rst index 0103670be..438ca78c4 100644 --- a/gdi/get-data-in/rum/browser/rum-browser-data-model.rst +++ b/gdi/get-data-in/rum/browser/rum-browser-data-model.rst @@ -229,6 +229,17 @@ The browser agent sends the IP addresses of all beacon connections to Splunk Obs .. note:: Splunk Observability Cloud calculates only geographical metadata from the IPs, and drops IP addresses within 6 hours. + +Additions to the RUM browser model by splunk-rum +======================================================== +If you're using the ``splunk-rum`` CLI or the Webpack build plugin to upload your source map, those tools will add a new attribute named ``error.sourceMapIds`` to your RUM browser data model. This attribute contains a mapping of file URL and ``sourceMapId`` pairs, where: + +* You must have already injected the ``sourceMapId`` attribute into your source map (using the ``splunk-rum`` CLI or the Webpack build plugin). See :ref:`set-up-javascript-source-mapping`. +* Only files mentioned in the error's ``error.stack`` appear in ``error.sourceMapIds``. + +This attribute is only in your RUM browser data model if you're using the ``splunk-rum`` CLI or the Webpack build plugin. + + Instrumentation-specific data ============================================== diff --git a/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst b/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst index ef70acfed..7cb288b3d 100644 --- a/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst +++ b/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst @@ -46,7 +46,8 @@ Option 1: Use the splunk-rum CLI .. code-block:: bash splunk-rum sourcemaps upload \ - --app-name --app-version \ + --app-name \ + --app-version \ --path @@ -87,7 +88,7 @@ Command descriptions * - ``sourcemaps upload --path --realm --token [optional-parameters]`` - - Recursively search `` ``for source maps (``.js.map``, ``.cjs.map``, ``.mjs.map``) and upload them to Splunk RUM. + - Recursively search ```` for source maps (``.js.map``, ``.cjs.map``, ``.mjs.map``) and upload them to Splunk RUM. Run this command after you run the ``sourcemaps inject`` command. From f1af57032426a7b88d24a31b10940fae2d0aed68 Mon Sep 17 00:00:00 2001 From: ada Date: Tue, 15 Apr 2025 09:34:38 -0700 Subject: [PATCH 034/100] Migrated content from Confluence --- gdi/get-data-in/rum/ios/add-dsyms.rst | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/gdi/get-data-in/rum/ios/add-dsyms.rst b/gdi/get-data-in/rum/ios/add-dsyms.rst index b3be842ce..65f8e3122 100644 --- a/gdi/get-data-in/rum/ios/add-dsyms.rst +++ b/gdi/get-data-in/rum/ios/add-dsyms.rst @@ -36,7 +36,7 @@ To locate the dSYMs directory for a specific release build: #. Open Xcode Organizer (Xcode → Window → Organizer) and right-click (Command-click) on the version number of the archive for your release. #. Select :guilabel:`Show in Finder`. #. In the Finder window that opens, right-click on the listed entry for your release, and select :guilabel:`Show Package Contents`. - The window now shows the dSYMs/ directory, and you can drag that directory entry into a Terminal window to copy its path there for use with the splunk-rum command. If the path has spaces in it, you may need to enclose it in double quotes when invoking the command. For example, ``splunk-rum ios upload --path ""`` + The window now shows the dSYMs/ directory, and you can drag that directory entry into a Terminal window to copy its path there for use with the ``splunk-rum`` command. Upload dSYMs @@ -52,7 +52,7 @@ To upload dSYMs use the ``splunk-rum`` CLI as follows. .. code-block:: bash - splunk-rum ios upload --path + splunk-rum ios upload --path #. (Optional) Verify that your uploads succeeded: @@ -79,12 +79,12 @@ Command descriptions * - :strong:`Command` - :strong:`Description` - * - ``upload --path [optional-parameters]`` + * - ``upload --path [optional-parameters]`` - Upload dSYMs within the directory you specify. The directory may contain a single dSYM .zip file or multiple dSYMs, in which case this command will compress and upload all of them. Parameters: - * ``--path `` Path to the directory containing dSYMs or a single dSYM.zip file. + * ``--path `` Path to the directory containing dSYMs or a single ``dSYM.zip`` file. If the path has spaces in it, enclose it in double quotes. For example, ``--path ""``. * ``--realm `` Realm for your organization. For example, us0. You can omit this parameter and set the environment variable ``SPLUNK_REALM`` instead. From 8bf17f7322305fd31e9029a76c156ecc738e7bba Mon Sep 17 00:00:00 2001 From: ada Date: Tue, 15 Apr 2025 10:24:28 -0700 Subject: [PATCH 035/100] Reverted fix for configure-browser-instrumentation vs configure-rum-browser-instrumentation --- gdi/get-data-in/rum/android/add-mapping-file.rst | 6 ++---- gdi/get-data-in/rum/browser/get-browser-data-in.rst | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/gdi/get-data-in/rum/android/add-mapping-file.rst b/gdi/get-data-in/rum/android/add-mapping-file.rst index 485901a10..367d29838 100644 --- a/gdi/get-data-in/rum/android/add-mapping-file.rst +++ b/gdi/get-data-in/rum/android/add-mapping-file.rst @@ -11,13 +11,11 @@ Add a mapping file When you set the ``minifyEnabled`` property to true in your Android application source code, your build process minifies, optimizes, and obfuscates the code and generates a single mapping file, ``mapping.txt``. This mapping file contains the information Splunk RUM needs to convert stack traces containing obfuscated classes and filenames back into a human readable form. This conversion is called de-obfuscation in Android. - -.. note:: - De-obfuscation is available for Android application crashes only. +De-obfuscation is available for Android application crashes only. .. note:: - Make sure that the mapping file you upload to Splunk RUM matches the binary you deploy to production. To ensure this, the best practice is to integrate the splunk-rum usage into your CI pipeline so that whenever you re-build your Android application, you also re-upload its mapping file. + Make sure that the mapping file you upload to Splunk RUM matches the binary you deploy to production. To ensure this, the best practice is to integrate the ``splunk-rum`` usage into your CI pipeline so that whenever you re-build your Android application, you also re-upload its mapping file. In order to associate a specific mapping file with a specific application build, Splunk RUM compares the ``applicationId`` and ``versionCode`` of the application to the parameters that you specify along with the mapping file. To specify these properties for the mapping file, you can include them as parameters in the ``splunk-rum android upload`` command. Alternatively, you can include your application's merged or packaged manifest (``AndroidManifest.xml``), where these properties are stored by default, in the ``splunk-rum android upload-with-manifest`` command. diff --git a/gdi/get-data-in/rum/browser/get-browser-data-in.rst b/gdi/get-data-in/rum/browser/get-browser-data-in.rst index 6d6e1900e..e937d6f57 100644 --- a/gdi/get-data-in/rum/browser/get-browser-data-in.rst +++ b/gdi/get-data-in/rum/browser/get-browser-data-in.rst @@ -11,7 +11,7 @@ Instrument browser-based web applications for Splunk RUM :hidden: Installation - Configuration + Configuration Manual instrumentation Migrate manual instrumentation Data collected From dc6332bf06f61ec16c8277bdbf19d33dbda90d26 Mon Sep 17 00:00:00 2001 From: ada Date: Tue, 15 Apr 2025 11:32:42 -0700 Subject: [PATCH 036/100] Experiment with vs for codeblock syntax highlighting --- .../rum/android/add-mapping-file.rst | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/gdi/get-data-in/rum/android/add-mapping-file.rst b/gdi/get-data-in/rum/android/add-mapping-file.rst index 367d29838..2c41568a3 100644 --- a/gdi/get-data-in/rum/android/add-mapping-file.rst +++ b/gdi/get-data-in/rum/android/add-mapping-file.rst @@ -18,7 +18,7 @@ De-obfuscation is available for Android application crashes only. Make sure that the mapping file you upload to Splunk RUM matches the binary you deploy to production. To ensure this, the best practice is to integrate the ``splunk-rum`` usage into your CI pipeline so that whenever you re-build your Android application, you also re-upload its mapping file. -In order to associate a specific mapping file with a specific application build, Splunk RUM compares the ``applicationId`` and ``versionCode`` of the application to the parameters that you specify along with the mapping file. To specify these properties for the mapping file, you can include them as parameters in the ``splunk-rum android upload`` command. Alternatively, you can include your application's merged or packaged manifest (``AndroidManifest.xml``), where these properties are stored by default, in the ``splunk-rum android upload-with-manifest`` command. +In order to associate a specific mapping file with a specific application build, Splunk RUM compares the ``applicationId`` and ``versionCode`` properties of the application to the parameters that you specify for the mapping file upload. You specify these parameters either as ``--app-id`` and ``--version-code`` in the ``splunk-rum android upload`` command or by including your application's merged or packaged manifest (``AndroidManifest.xml``), which includes these properties by default, in the ``splunk-rum android upload-with-manifest`` command. Prerequisites @@ -41,7 +41,7 @@ Uploads for production builds * Run the ``upload`` command with the ``--app-id`` and ``--version-code`` parameters: - .. code-block:: bash + .. code-block:: shell splunk-rum android upload \ --app-id= --version-code= \ @@ -50,7 +50,7 @@ Uploads for production builds * Run the ``upload-with-manifest`` command with the path to the application's merged or packaged ``AndroidManifest.xml`` file, along with path to the mapping file. Be sure to include the correct manifest, which is the one that's created when your application is built, and is located in the build output directory: - .. code-block:: bash + .. code-block:: shell splunk-rum android upload-with-manifest \ --manifest \ @@ -61,7 +61,7 @@ Uploads for production builds #. (Optional) Verify that your upload succeeded: - .. code-block:: bash + .. code-block:: shell splunk-rum android list --app-id= @@ -77,9 +77,9 @@ Uploads for pre-production builds .. code-block:: xml - + #. Add the following code to the ``android {}`` block of the Gradle build script of your application. This code generates a new UUID for every application variant and adds it to the merged manifest file after the variant is assembled, where the Splunk RUM agent will retrieve it: @@ -122,7 +122,7 @@ Uploads for pre-production builds * Run the upload command with the ``--app-id``, ``--version-code``, and ``--splunk-build-id`` parameters. This option only works if you added ``splunk.build_id`` to your Gradle build script (in step 1). Get the build ID from the Gradle build output or from the merged manifest: - .. code-block:: bash + .. code-block:: shell splunk-rum android upload \ --app-id= --version-code= \ @@ -133,7 +133,7 @@ Uploads for pre-production builds * Run the ``upload-with-manifest`` command with the path to the application's merged or packaged ``AndroidManifest.xml`` file, along with path to the mapping file. Be sure to include the correct manifest, which is the one that's created when your application is built, and is located in the build output directory: - .. code-block:: bash + .. code-block:: shell splunk-rum android upload-with-manifest \ --manifest \ @@ -143,7 +143,7 @@ Uploads for pre-production builds #. (Optional) Verify that your upload succeeded: - .. code-block:: bash + .. code-block:: shell splunk-rum android list --app-id= @@ -152,7 +152,7 @@ Uploads for pre-production builds Syntax --------------------------------------------------------------------- -.. code-block:: bash +.. code-block:: shell splunk-rum android [command] [parameters] From d0bb159cde9c62d4355ab9f42709b8ba97f20944 Mon Sep 17 00:00:00 2001 From: adasplunk Date: Tue, 15 Apr 2025 16:46:39 -0700 Subject: [PATCH 037/100] Update gdi/get-data-in/rum/android/add-mapping-file.rst Co-authored-by: jcatera-splunk --- gdi/get-data-in/rum/android/add-mapping-file.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gdi/get-data-in/rum/android/add-mapping-file.rst b/gdi/get-data-in/rum/android/add-mapping-file.rst index 2c41568a3..fcf3c3508 100644 --- a/gdi/get-data-in/rum/android/add-mapping-file.rst +++ b/gdi/get-data-in/rum/android/add-mapping-file.rst @@ -15,7 +15,7 @@ De-obfuscation is available for Android application crashes only. .. note:: - Make sure that the mapping file you upload to Splunk RUM matches the binary you deploy to production. To ensure this, the best practice is to integrate the ``splunk-rum`` usage into your CI pipeline so that whenever you re-build your Android application, you also re-upload its mapping file. + Make sure that the mapping file you upload to Splunk RUM matches the binary you deploy to production. To ensure this, the best practice is to integrate the ``splunk-rum`` usage into your CI pipeline so that whenever you re-build your Android application, you also re-upload its mapping file. In order to associate a specific mapping file with a specific application build, Splunk RUM compares the ``applicationId`` and ``versionCode`` properties of the application to the parameters that you specify for the mapping file upload. You specify these parameters either as ``--app-id`` and ``--version-code`` in the ``splunk-rum android upload`` command or by including your application's merged or packaged manifest (``AndroidManifest.xml``), which includes these properties by default, in the ``splunk-rum android upload-with-manifest`` command. From 7db416f3311b375bf982468caecd509152ee5218 Mon Sep 17 00:00:00 2001 From: adasplunk Date: Tue, 15 Apr 2025 16:47:31 -0700 Subject: [PATCH 038/100] Update gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst Co-authored-by: jcatera-splunk --- .../rum/browser/set-up-javascript-source-mapping.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst b/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst index 7cb288b3d..9aab7f833 100644 --- a/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst +++ b/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst @@ -33,7 +33,7 @@ Option 1: Use the splunk-rum CLI #. Verify that your production build tool is configured to generate source maps. #. Run the production build for your project. - #. Verify that your production bundles and source maps were emitted to the same output directory. + #. Verify that your production bundles and source maps were written to the same output directory. #. Find all source map/minified file pairs in the directory you specify, compute a source map ID for each pair, and inject that source map ID into each minified file as a code snippet: From 1138eb378984f43325f48396595bde2172fc5582 Mon Sep 17 00:00:00 2001 From: adasplunk Date: Tue, 15 Apr 2025 16:47:53 -0700 Subject: [PATCH 039/100] Update gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst Co-authored-by: jcatera-splunk --- .../rum/browser/set-up-javascript-source-mapping.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst b/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst index 9aab7f833..856fa165c 100644 --- a/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst +++ b/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst @@ -133,7 +133,7 @@ If your project uses a different bunding tool or a different version of Webpack, #. Add the Splunk RUM Webpack plugin to your list of plugins by adding the following lines to your ``webpack.config.js``, where ```` and ```` are the same values that you used in :ref:`configure-browser-instrumentation`. - If you don't want source maps to be uploaded while you're doing local builds for your own local development, set disableUpload to true. + If you don't want source maps to be uploaded while you're doing local builds for your own local development, set ``disableUpload`` to true. .. code-block:: json From ec83570c2b344d181371b8a577ec927be0b4d886 Mon Sep 17 00:00:00 2001 From: adasplunk Date: Tue, 15 Apr 2025 16:48:15 -0700 Subject: [PATCH 040/100] Update gdi/get-data-in/rum/ios/add-dsyms.rst Co-authored-by: jcatera-splunk --- gdi/get-data-in/rum/ios/add-dsyms.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gdi/get-data-in/rum/ios/add-dsyms.rst b/gdi/get-data-in/rum/ios/add-dsyms.rst index 65f8e3122..420402776 100644 --- a/gdi/get-data-in/rum/ios/add-dsyms.rst +++ b/gdi/get-data-in/rum/ios/add-dsyms.rst @@ -14,7 +14,7 @@ When you build your iOS application in release mode, your build process generate The ``splunk-rum`` CLI compresses dSYM directories into .zip files for you and uploads them. When you upload a zipped dSYM to Splunk RUM, you enable Splunk RUM to symbolicate the debug symbols contained within that dSYM. This in turn enables you to view stack traces with the names of functions and offsets into those functions to help you identify the line of code that was executing when the application crashed. -You can upload dSYMs from your main application code and from third-party frameworks, but not from system libraries. This means that Splunk RUM does not yet support the symbolication of stack frames for system libraries. +You can upload dSYMs from your main application code and from third-party frameworks, but not from system libraries. Splunk RUM does not yet support the symbolication of stack frames for system libraries. Prerequisites From d1fd8b54dc8dc1cbb107b45dd83a35796d02d36b Mon Sep 17 00:00:00 2001 From: adasplunk Date: Tue, 15 Apr 2025 16:48:34 -0700 Subject: [PATCH 041/100] Update gdi/get-data-in/rum/ios/add-dsyms.rst Co-authored-by: jcatera-splunk --- gdi/get-data-in/rum/ios/add-dsyms.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gdi/get-data-in/rum/ios/add-dsyms.rst b/gdi/get-data-in/rum/ios/add-dsyms.rst index 420402776..5f46ca016 100644 --- a/gdi/get-data-in/rum/ios/add-dsyms.rst +++ b/gdi/get-data-in/rum/ios/add-dsyms.rst @@ -36,7 +36,7 @@ To locate the dSYMs directory for a specific release build: #. Open Xcode Organizer (Xcode → Window → Organizer) and right-click (Command-click) on the version number of the archive for your release. #. Select :guilabel:`Show in Finder`. #. In the Finder window that opens, right-click on the listed entry for your release, and select :guilabel:`Show Package Contents`. - The window now shows the dSYMs/ directory, and you can drag that directory entry into a Terminal window to copy its path there for use with the ``splunk-rum`` command. + The window now shows the ``dSYMs/`` directory, and you can drag that directory entry into a Terminal window to copy its path there for use with the ``splunk-rum`` command. Upload dSYMs From a361ddc7f38637be7b4850efe7d5156ca050229f Mon Sep 17 00:00:00 2001 From: adasplunk Date: Tue, 15 Apr 2025 16:48:49 -0700 Subject: [PATCH 042/100] Update gdi/get-data-in/rum/ios/add-dsyms.rst Co-authored-by: jcatera-splunk --- gdi/get-data-in/rum/ios/add-dsyms.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gdi/get-data-in/rum/ios/add-dsyms.rst b/gdi/get-data-in/rum/ios/add-dsyms.rst index 5f46ca016..4a20a0727 100644 --- a/gdi/get-data-in/rum/ios/add-dsyms.rst +++ b/gdi/get-data-in/rum/ios/add-dsyms.rst @@ -86,7 +86,7 @@ Command descriptions * ``--path `` Path to the directory containing dSYMs or a single ``dSYM.zip`` file. If the path has spaces in it, enclose it in double quotes. For example, ``--path ""``. - * ``--realm `` Realm for your organization. For example, us0. You can omit this parameter and set the environment variable ``SPLUNK_REALM`` instead. + * ``--realm `` Realm for your organization. For example, ``us0``. You can omit this parameter and set the environment variable ``SPLUNK_REALM`` instead. * ``--token `` API access token. You can omit this parameter and set the environment variable ``SPLUNK_ACCESS_TOKEN`` instead. From d76dc023132de9d5795299aefa052df11ad83acb Mon Sep 17 00:00:00 2001 From: adasplunk Date: Tue, 15 Apr 2025 16:49:06 -0700 Subject: [PATCH 043/100] Update rum/error-aggregates.rst Co-authored-by: jcatera-splunk --- rum/error-aggregates.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rum/error-aggregates.rst b/rum/error-aggregates.rst index 45a1eedcb..45c359566 100644 --- a/rum/error-aggregates.rst +++ b/rum/error-aggregates.rst @@ -76,7 +76,7 @@ To see session details for a specific crash: #. Select that crash. This opens the :guilabel:`Error groups` side panel on the right. #. In the :guilabel:`Error groups` side panel, select the :guilabel:`User Sessions` tab. This opens the list of user sessions associated with the crash you selected. #. Select a specific session ID. This opens the :guilabel:`Crash` side panel with session details. -#. If you've uploaded source mapping for your application, you can also see a human-readable stack trace: expand :guilabel:`Stack Trace`. +#. If you've uploaded source mapping for your application, you can also see a human-readable stack trace: expand :guilabel:`Stack Trace`. From 98df4a3877e9fbd93bc65b94f3eaeebc914df297 Mon Sep 17 00:00:00 2001 From: adasplunk Date: Tue, 15 Apr 2025 16:51:05 -0700 Subject: [PATCH 044/100] Update rum/error-aggregates.rst Co-authored-by: jcatera-splunk --- rum/error-aggregates.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rum/error-aggregates.rst b/rum/error-aggregates.rst index 45c359566..ffad5a443 100644 --- a/rum/error-aggregates.rst +++ b/rum/error-aggregates.rst @@ -104,7 +104,7 @@ Connect source files The information in most raw crash stack traces is not fully human-readable. To make a stack trace readable, you must provide platform-specific mapping information that translates that stack trace into human-readable form: * To upload mappping files at instrumentation time, see :ref:`add-dsyms` for iOS applications or :ref:`add-mapping-file` for Android applications. -* To upload mappping files using the widget on this dashboard, select :guilabel:`Add dSYMs` for iOS applications or :guilabel:`Add a mapping file` for Android applications. +* To upload mapping files using the widget on this dashboard, select :guilabel:`Add dSYMs` for iOS applications or :guilabel:`Add a mapping file` for Android applications. From ef8eb11b9127892a7113d80cd16f74ca3b38aebd Mon Sep 17 00:00:00 2001 From: adasplunk Date: Tue, 15 Apr 2025 16:51:23 -0700 Subject: [PATCH 045/100] Update rum/error-aggregates.rst Co-authored-by: jcatera-splunk --- rum/error-aggregates.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rum/error-aggregates.rst b/rum/error-aggregates.rst index ffad5a443..e39c56fa8 100644 --- a/rum/error-aggregates.rst +++ b/rum/error-aggregates.rst @@ -144,7 +144,7 @@ Find the top JavaScript errors across your applications in Tag Spotlight In Splunk RUM, the JavaScript errors view shows the JavaScript errors sorted by page, whereas the metric :guilabel:`JavaScript Errors (by error ID)` shows the top ten JavaScript errors across your entire application. In the metric :guilabel:`Frontend Errors by ErrorID` the information is displayed by error type, error ID, then error message. -1. Open RUM. From the left navigation panel, select :guilabel:`RUM` and :guilabel:`Browser` as the source and the application you wan to monitor. +1. Open RUM. From the left navigation panel, select :guilabel:`RUM` and :guilabel:`Browser` as the source and the application you want to monitor. 2. To open Tag Spotlight from either the Application Summary Dashboard, or Overview pages click on any metric. From 5ffef5cc253a5e24d74bc10359198ac26aa77669 Mon Sep 17 00:00:00 2001 From: adasplunk Date: Tue, 15 Apr 2025 16:52:01 -0700 Subject: [PATCH 046/100] Update rum/error-aggregates.rst Co-authored-by: jcatera-splunk --- rum/error-aggregates.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rum/error-aggregates.rst b/rum/error-aggregates.rst index e39c56fa8..9cb09b473 100644 --- a/rum/error-aggregates.rst +++ b/rum/error-aggregates.rst @@ -154,7 +154,7 @@ In Splunk RUM, the JavaScript errors view shows the JavaScript errors sorted by JavaScript errors without stacktrace, type, or message ------------------------------------------------------------------------------------------ -Sometimes, you might see a message in the UI that says :guilabel:`JavaScript error without a stacktrace, type, or message`. This might happen because the error didn't have any information about the stack trace before it was ingested by Splunk RUM. To troubleshoot, try narrowing in on a specific time range which shows the JS error only, and explore the related User sessions. +Sometimes, you might see a message in the UI that says :guilabel:`JavaScript error without a stacktrace, type, or message`. This might happen because the error didn't have any information about the stack trace before it was ingested by Splunk RUM. To troubleshoot, try narrowing in on a specific time range that shows the JS error only and explore the related User sessions. From a63c5afc97b4599fd1b3274e5953fae665bc4768 Mon Sep 17 00:00:00 2001 From: adasplunk Date: Tue, 15 Apr 2025 16:52:24 -0700 Subject: [PATCH 047/100] Update rum/error-aggregates.rst Co-authored-by: jcatera-splunk --- rum/error-aggregates.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rum/error-aggregates.rst b/rum/error-aggregates.rst index 9cb09b473..4124790e4 100644 --- a/rum/error-aggregates.rst +++ b/rum/error-aggregates.rst @@ -135,7 +135,7 @@ Upload source maps for readable stack traces The information in most raw stack traces is not fully human readable. To make your raw stack traces easier for you to read, you need to provide source maps that correspond to this browser application. Source maps enable Splunk RUM to translate raw stack traces back into a human-readable form. You can either upload source maps now ("on-demand”) or at the time that you instrument your browser application: -* To upload source maps now, select Upload on this dashboard. +* To upload source maps now, select :guilabel:`Upload` on this dashboard. * To upload source maps at instrumentation time, see :ref:`set-up-javascript-source-mapping`. From 0dfff9c0bc1c365b24de4b02f9deddd628da1cdb Mon Sep 17 00:00:00 2001 From: adasplunk Date: Tue, 15 Apr 2025 16:52:41 -0700 Subject: [PATCH 048/100] Update rum/error-aggregates.rst Co-authored-by: jcatera-splunk --- rum/error-aggregates.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rum/error-aggregates.rst b/rum/error-aggregates.rst index 4124790e4..eeb5c4beb 100644 --- a/rum/error-aggregates.rst +++ b/rum/error-aggregates.rst @@ -103,7 +103,7 @@ Connect source files The information in most raw crash stack traces is not fully human-readable. To make a stack trace readable, you must provide platform-specific mapping information that translates that stack trace into human-readable form: -* To upload mappping files at instrumentation time, see :ref:`add-dsyms` for iOS applications or :ref:`add-mapping-file` for Android applications. +* To upload mapping files at instrumentation time, see :ref:`add-dsyms` for iOS applications or :ref:`add-mapping-file` for Android applications. * To upload mapping files using the widget on this dashboard, select :guilabel:`Add dSYMs` for iOS applications or :guilabel:`Add a mapping file` for Android applications. From 58c8eb5ad4383d89e1d7e1400077e03dea165a6e Mon Sep 17 00:00:00 2001 From: adasplunk Date: Tue, 15 Apr 2025 17:21:01 -0700 Subject: [PATCH 049/100] Update rum/error-aggregates.rst Co-authored-by: jcatera-splunk --- rum/error-aggregates.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rum/error-aggregates.rst b/rum/error-aggregates.rst index eeb5c4beb..718ef8b34 100644 --- a/rum/error-aggregates.rst +++ b/rum/error-aggregates.rst @@ -69,7 +69,7 @@ To see crashes from a specific mobile application: View session details ------------------------------------------------------------------------------------------ -The session details pane lists every session ID (span) that belongs to the user session you select. It also displays the entire timeline of the user session so that you have more insight into the events leading up to a crash. For example, you can see which views were loaded, and what requests were made. +The session details pane lists every session ID (span) that belongs to the user session you select. It also displays the entire timeline of the user session so that you have more insight into the events leading up to a crash. For example, you can see which views were loaded and what requests were made. To see session details for a specific crash: From a082fec722870780235fb85c729ffbe35bfac6a1 Mon Sep 17 00:00:00 2001 From: ada Date: Tue, 15 Apr 2025 18:49:56 -0700 Subject: [PATCH 050/100] Incorporated changes from IX review. --- .../rum/android/add-mapping-file.rst | 22 +++++++++---------- .../rum/android/rum-android-data-model.rst | 4 ++-- .../set-up-javascript-source-mapping.rst | 22 +++++++++---------- gdi/get-data-in/rum/ios/add-dsyms.rst | 21 +++++++++--------- gdi/get-data-in/rum/rum-instrumentation.rst | 4 ++-- rum/error-aggregates.rst | 2 +- 6 files changed, 38 insertions(+), 37 deletions(-) diff --git a/gdi/get-data-in/rum/android/add-mapping-file.rst b/gdi/get-data-in/rum/android/add-mapping-file.rst index fcf3c3508..4fa2765b0 100644 --- a/gdi/get-data-in/rum/android/add-mapping-file.rst +++ b/gdi/get-data-in/rum/android/add-mapping-file.rst @@ -9,9 +9,9 @@ Add a mapping file :description: Your uploaded mapping file enables Splunk RUM to convert stack traces back into a human-readable form. -When you set the ``minifyEnabled`` property to true in your Android application source code, your build process minifies, optimizes, and obfuscates the code and generates a single mapping file, ``mapping.txt``. This mapping file contains the information Splunk RUM needs to convert stack traces containing obfuscated classes and filenames back into a human readable form. This conversion is called de-obfuscation in Android. +When you set the ``minifyEnabled`` property to true in your Android application source code, your build process minifies, optimizes, and obfuscates the code and generates a single mapping file, ``mapping.txt``. This mapping file contains the information Splunk RUM needs to convert stack traces containing obfuscated classes and filenames back into a human readable form. This conversion is called deobfuscation in Android. -De-obfuscation is available for Android application crashes only. +Deobfuscation is available for Android application crashes only. .. note:: @@ -185,10 +185,10 @@ Command descriptions * ``--token `` Optional. API access token. You can omit this parameter and set the environment variable ``SPLUNK_ACCESS_TOKEN`` instead. - * ``--debug`` Enable debug logs. - * ``--dry-run=[true|false]`` Perform a trial run with no changes made. Default: ``false``. + * ``--debug`` Enable debug logs. + * ``-h, --help`` Display help for this command. @@ -197,13 +197,13 @@ Command descriptions Parameters: - * ``--manifest `` Path to the merged or the packaged ``AndroidManifest.xml`` file that is generated when the application is built. + * ``--manifest `` Required. Path to the merged or the packaged ``AndroidManifest.xml`` file that is generated when the application is built. - * ``--path `` Path to the ``mapping.txt`` file. + * ``--path `` Required. Path to the ``mapping.txt`` file. - * ``--realm `` Realm for your organization. For example, ``us0``. You can omit this parameter and set the environment variable ``SPLUNK_REALM`` instead. + * ``--realm `` Optional. Realm for your organization. For example, ``us0``. You can omit this parameter and set the environment variable ``SPLUNK_REALM`` instead. - * ``--token `` API access token. You can omit this parameter and set the environment variable ``SPLUNK_ACCESS_TOKEN`` instead. + * ``--token `` Optional. API access token. You can omit this parameter and set the environment variable ``SPLUNK_ACCESS_TOKEN`` instead. * ``--dry-run=[true|false]`` Preview the file that will be uploaded and the parameters that will be extracted from ``AndroidManifest.xml``. @@ -217,11 +217,11 @@ Command descriptions Parameters: - * ``--app-id `` The ``applicationId`` property in your app's ``build.gradle.kts`` file. + * ``--app-id `` Required. The ``applicationId`` property in your app's ``build.gradle.kts`` file. - * ``--realm `` Realm for your organization. For example, ``us0``. You can omit this parameter and set the environment variable ``SPLUNK_REALM`` instead. + * ``--realm `` Optional. Realm for your organization. For example, ``us0``. You can omit this parameter and set the environment variable ``SPLUNK_REALM`` instead. - * ``--token `` API access token. You can omit this parameter and set the environment variable ``SPLUNK_ACCESS_TOKEN`` instead. + * ``--token `` Optional. API access token. You can omit this parameter and set the environment variable ``SPLUNK_ACCESS_TOKEN`` instead. * ``--dry-run=[true|false]`` Perform a trial run with no changes made. Default: ``false``. diff --git a/gdi/get-data-in/rum/android/rum-android-data-model.rst b/gdi/get-data-in/rum/android/rum-android-data-model.rst index 32e091601..77e426947 100644 --- a/gdi/get-data-in/rum/android/rum-android-data-model.rst +++ b/gdi/get-data-in/rum/android/rum-android-data-model.rst @@ -233,10 +233,10 @@ The Android RUM agent adds the following crash reporting attributes to spans tha - Always ``Error``. * - ``service.application_id`` - String - - Application ID of the app - refer to definition of ``applicationId`` in the :new-page:`Android Studio developer documentation `. + - Application ID of the app: Refer to definition of ``applicationId`` in the :new-page:`Android Studio developer documentation `. * - ``service.version_code`` - String - - Version code of the application - refer to definition of ``versionCode`` in the :new-page:`Android Studio developer documentation `. + - Version code of the application: Refer to definition of ``versionCode`` in the :new-page:`Android Studio developer documentation `. * - ``splunk.build_id`` - String - This is an optional attribute. This is added when minification is enabled for pre-production builds where version code is not updated across app builds, in which case this attribute is used to uniquely identify each build. diff --git a/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst b/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst index 856fa165c..110170963 100644 --- a/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst +++ b/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst @@ -74,15 +74,15 @@ Command descriptions Parameters: - * ``--path `` Path to the directory containing your production JavaScript files (``.js``, ``.cjs``, ``.mjs``) and source maps (``.js.map``, ``.cjs.map``, ``.mjs.map``). The command recursively searches this directory and when it detects that a JavaScript file (such as ``main.min.js``) has a source map (such as ``main.min.js.map``), it injects a code snippet into that JavaScript file. This code snippet contains a property named ``sourceMapId`` that is needed to successfully perform automatic source mapping. + * ``--path `` Required. Path to the directory containing your production JavaScript files (``.js``, ``.cjs``, ``.mjs``) and source maps (``.js.map``, ``.cjs.map``, ``.mjs.map``). The command recursively searches this directory and when it detects that a JavaScript file (such as ``main.min.js``) has a source map (such as ``main.min.js.map``), it injects a code snippet into that JavaScript file. This code snippet contains a property named ``sourceMapId`` that is needed to successfully perform automatic source mapping. - * ``--include `` A space-separated list of glob file patterns for selecting specific JavaScript files to inject. + * ``--include `` Optional. A space-separated list of glob file patterns for selecting specific JavaScript files to inject. - * ``--exclude `` A space-separated list of glob file patterns for selecting specific JavaScript files to not inject. + * ``--exclude `` Optional. A space-separated list of glob file patterns for selecting specific JavaScript files to not inject. - * ``--debug`` Enable debug logs. - * ``--dry-run=[true|false]`` Preview the files that will be injected for the given options. Default: ``false``. + + * ``--debug`` Enable debug logs. * ``-h, --help`` Display help for this command. @@ -94,19 +94,19 @@ Command descriptions Parameters: - * ``--path `` Path to the directory containing source maps for your production JavaScript bundles. + * ``--path `` Required. Path to the directory containing source maps for your production JavaScript bundles. - * ``--realm `` Realm for your organization. For example, ``us0``. You can omit this parameter and set the environment variable ``SPLUNK_REALM`` instead. + * ``--realm `` Optional. Realm for your organization. For example, ``us0``. You can omit this parameter and set the environment variable ``SPLUNK_REALM`` instead. - * ``--token `` API access token. You can omit this parameter and set the environment variable ``SPLUNK_ACCESS_TOKEN`` instead. + * ``--token `` Optional. API access token. You can omit this parameter and set the environment variable ``SPLUNK_ACCESS_TOKEN`` instead. * ``--app-name `` Optional. The application name used in your agent configuration. This value is attached to each uploaded source map as metadata to help you to identify the source map on the Splunk RUM user interface. * ``--app-version `` Optional. The application version used in your agent configuration. This value is attached to each uploaded source map as metadata to help you to identify the source map on the Splunk RUM user interface. - * ``--include `` A space-separated list of glob file patterns for selecting specific source map files to upload. + * ``--include `` Optional. A space-separated list of glob file patterns for selecting specific source map files to upload. - * ``--exclude `` A space-separated list of glob file patterns for selecting specific source map files to not upload. + * ``--exclude `` Optional. A space-separated list of glob file patterns for selecting specific source map files to not upload. * ``--dry-run=[true|false]`` Preview the files that will be uploaded for the given options. Default: ``false``. @@ -135,7 +135,7 @@ If your project uses a different bunding tool or a different version of Webpack, If you don't want source maps to be uploaded while you're doing local builds for your own local development, set ``disableUpload`` to true. - .. code-block:: json + .. code-block:: const { SplunkRumWebpackPlugin } = require('@splunk/rum-build-plugins') module.exports = { diff --git a/gdi/get-data-in/rum/ios/add-dsyms.rst b/gdi/get-data-in/rum/ios/add-dsyms.rst index 4a20a0727..d90f27413 100644 --- a/gdi/get-data-in/rum/ios/add-dsyms.rst +++ b/gdi/get-data-in/rum/ios/add-dsyms.rst @@ -33,7 +33,8 @@ Find dSYMs To locate the dSYMs directory for a specific release build: -#. Open Xcode Organizer (Xcode → Window → Organizer) and right-click (Command-click) on the version number of the archive for your release. +#. Open Xcode Organizer (in Xcode, select :guilabel:`Window` and then select :guilabel:`Organizer`). +#. Right-click (command-click) the version number of the archive for your release. #. Select :guilabel:`Show in Finder`. #. In the Finder window that opens, right-click on the listed entry for your release, and select :guilabel:`Show Package Contents`. The window now shows the ``dSYMs/`` directory, and you can drag that directory entry into a Terminal window to copy its path there for use with the ``splunk-rum`` command. @@ -84,15 +85,15 @@ Command descriptions Parameters: - * ``--path `` Path to the directory containing dSYMs or a single ``dSYM.zip`` file. If the path has spaces in it, enclose it in double quotes. For example, ``--path ""``. + * ``--path `` Required. Path to the directory containing dSYMs or a single ``dSYM.zip`` file. If the path has spaces in it, enclose it in double quotes. For example, ``--path ""``. - * ``--realm `` Realm for your organization. For example, ``us0``. You can omit this parameter and set the environment variable ``SPLUNK_REALM`` instead. + * ``--realm `` Optional. Realm for your organization. For example, ``us0``. You can omit this parameter and set the environment variable ``SPLUNK_REALM`` instead. - * ``--token `` API access token. You can omit this parameter and set the environment variable ``SPLUNK_ACCESS_TOKEN`` instead. - - * ``--debug`` Enable debug logs. + * ``--token `` Optional. API access token. You can omit this parameter and set the environment variable ``SPLUNK_ACCESS_TOKEN`` instead. * ``--dry-run=[true|false]`` Perform a trial run with no changes made. Default: ``false``. + + * ``--debug`` Enable debug logs. * ``-h, --help`` Display help for this command. @@ -102,14 +103,14 @@ Command descriptions Parameters: - * ``--realm `` Realm for your organization. For example, ``us0``. You can omit this parameter and set the environment variable ``SPLUNK_REALM`` instead. + * ``--realm `` Optional. Realm for your organization. For example, ``us0``. You can omit this parameter and set the environment variable ``SPLUNK_REALM`` instead. - * ``--token `` API access token. You can omit this parameter and set the environment variable ``SPLUNK_ACCESS_TOKEN`` instead. + * ``--token `` Optional. API access token. You can omit this parameter and set the environment variable ``SPLUNK_ACCESS_TOKEN`` instead. - * ``--debug`` Enable debug logs. - * ``--dry-run=[true|false]`` Perform a trial run with no changes made. Default: ``false``. + * ``--debug`` Enable debug logs. + * ``-h, --help`` Display help for this command. diff --git a/gdi/get-data-in/rum/rum-instrumentation.rst b/gdi/get-data-in/rum/rum-instrumentation.rst index f242bbce0..efbf9f6b7 100644 --- a/gdi/get-data-in/rum/rum-instrumentation.rst +++ b/gdi/get-data-in/rum/rum-instrumentation.rst @@ -67,7 +67,7 @@ Prerequisites --------------------------------------------------------------------- * Install Node v18+ on your build machine. -* Get an organization access token with an authorization scope of API token (not RUM token) and with the power role. You will save this token in an environment variable named ``SPLUNK_ACCESS_TOKEN``. +* Get an organization access token with an authorization scope of ``API token`` (not ``RUM token``) and with the ``power`` role. You will save this token in an environment variable named ``SPLUNK_ACCESS_TOKEN``. Installation @@ -82,7 +82,7 @@ Installation npm install @splunk/rum-cli --global - * A dependency to your existing package.json file. Note: This option is for browser applications only, not mobile applications: + * A dependency to your existing ``package.json`` file. Note: This option is for browser applications only, not mobile applications: .. code-block:: bash diff --git a/rum/error-aggregates.rst b/rum/error-aggregates.rst index 718ef8b34..814d62e89 100644 --- a/rum/error-aggregates.rst +++ b/rum/error-aggregates.rst @@ -39,7 +39,7 @@ Splunk RUM groups errors based on an error ID (labeled :guilabel:`ErrorID`) that * If you never upload source maps, the error IDs are based on the unreadable stack traces. * If you upload source maps at instrumentation time, the error IDs are based on the readable stack traces. -* If you upload source maps "on-demand" (in other words, after Splunk RUM has already ingested some errors) through the UI, the error IDs of existing errors are unchanged (still based on unreadable stack traces) but the error IDs, and hence error groupings, of future errors will be different (based on readable stack traces). If you're looking at a large enough time range to include errors ingested before and after you uploaded your source map, you will see that your application's errors are grouped differently, and the :guilabel:`Error summary` displays a message to alert you to this fact. The message varies depending on the application's platform, but is something like :guilabel:`..older instances of this crash remain in their original groupings, but newer instances are grouped based on the de-obfuscation now available`. +* If you upload source maps "on-demand" (in other words, after Splunk RUM has already ingested some errors) through the UI, the error IDs of existing errors are unchanged (still based on unreadable stack traces) but the error IDs, and hence error groupings, of future errors will be different (based on readable stack traces). If you're looking at a large enough time range to include errors ingested before and after you uploaded your source map, you will see that your application's errors are grouped differently, and the :guilabel:`Error summary` displays a message to alert you to this fact. The message varies depending on the application's platform, but is something like :guilabel:`..older instances of this crash remain in their original groupings, but newer instances are grouped based on the deobfuscation now available`. From 56b1372b7614ecd771aaf6b9e74f83ec0ac5bc04 Mon Sep 17 00:00:00 2001 From: ada Date: Tue, 15 Apr 2025 19:10:18 -0700 Subject: [PATCH 051/100] Incorporated changes from IX review. --- rum/error-aggregates.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rum/error-aggregates.rst b/rum/error-aggregates.rst index 814d62e89..309feb7db 100644 --- a/rum/error-aggregates.rst +++ b/rum/error-aggregates.rst @@ -83,7 +83,7 @@ To see session details for a specific crash: Explore top crashes across in Tag Spotlight ------------------------------------------------------------------------------------------ -From the Splunk RUM overview dashboard, select :guilabel:`See all` on the Crashes and App Errors chart to open Tag Spotlight. In Tag Spotlight you can explore application based errors, metrics, and events. +To open Tag Spotlight from Splunk RUM's :guilabel:`APPLICATION SUMMARY DASHBOARD`, select the :guilabel:`All` tab and then select the crash or error you're interested in. In Tag Spotlight you can explore application based errors, metrics, and events. .. image:: /_images/rum/crashes_app_errors.png :width: 60% @@ -146,7 +146,7 @@ In Splunk RUM, the JavaScript errors view shows the JavaScript errors sorted by 1. Open RUM. From the left navigation panel, select :guilabel:`RUM` and :guilabel:`Browser` as the source and the application you want to monitor. -2. To open Tag Spotlight from either the Application Summary Dashboard, or Overview pages click on any metric. +2. To open Tag Spotlight from either the :guilabel:`APPLICATION SUMMARY DASHBOARD` or :guilabel:`Overview`, click any metric. * For example, select :guilabel:`See all` in the metric :guilabel:`JavaScript errors(by error ID)` to explore all of the JavaScript errors in Tag Spotlight. From cf71768346028bf5cefea45ef8b63d25b71c3dde Mon Sep 17 00:00:00 2001 From: ada Date: Tue, 15 Apr 2025 19:18:25 -0700 Subject: [PATCH 052/100] Promoted a couple headings where it didn't make sense to nest them. --- gdi/get-data-in/rum/android/add-mapping-file.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gdi/get-data-in/rum/android/add-mapping-file.rst b/gdi/get-data-in/rum/android/add-mapping-file.rst index 4fa2765b0..856818fd0 100644 --- a/gdi/get-data-in/rum/android/add-mapping-file.rst +++ b/gdi/get-data-in/rum/android/add-mapping-file.rst @@ -150,7 +150,7 @@ Uploads for pre-production builds Syntax ---------------------------------------------------------------------- +===================================================================== .. code-block:: shell @@ -159,7 +159,7 @@ Syntax Command descriptions ---------------------------------------------------------------------- +===================================================================== .. list-table:: :header-rows: 1 From 60b2ce53ba84530fd6b9f8252fb5cf9710ce624b Mon Sep 17 00:00:00 2001 From: ada Date: Tue, 15 Apr 2025 19:29:28 -0700 Subject: [PATCH 053/100] Reworded a sentence. --- gdi/get-data-in/rum/ios/add-dsyms.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gdi/get-data-in/rum/ios/add-dsyms.rst b/gdi/get-data-in/rum/ios/add-dsyms.rst index d90f27413..db6355246 100644 --- a/gdi/get-data-in/rum/ios/add-dsyms.rst +++ b/gdi/get-data-in/rum/ios/add-dsyms.rst @@ -10,7 +10,7 @@ Add dSYMs -When you build your iOS application in release mode, your build process generates one or more debug symbol archives, commonly referred to simply as dSYMs. A dSYM stores debug symbols and exact offsets for a particular build of your application and its modules. With this detailed information, Splunk RUM can convert crash data for that specific build of your application version into readable reports labeled with function names and line numbers, showing what code was run, in what order, and where the crash happened. This conversion is called symbolication in iOS terminology. Different dSYMs symbolicate your applications's main application code, third-party frameworks, and system libraries. +When you build your iOS application in release mode, your build process generates one or more debug symbol archives, commonly referred to simply as dSYMs. A dSYM stores debug symbols and exact offsets for a particular build of your application and its modules. With this detailed information, Splunk RUM can convert crash data for that specific build into readable reports labeled with function names and line numbers, showing what code was run, in what order, and where the crash happened. This conversion is called symbolication in iOS terminology. Different dSYMs symbolicate your applications's main application code, third-party frameworks, and system libraries. The ``splunk-rum`` CLI compresses dSYM directories into .zip files for you and uploads them. When you upload a zipped dSYM to Splunk RUM, you enable Splunk RUM to symbolicate the debug symbols contained within that dSYM. This in turn enables you to view stack traces with the names of functions and offsets into those functions to help you identify the line of code that was executing when the application crashed. From 521765ab684ec13116712909cafa2c0b97a279ef Mon Sep 17 00:00:00 2001 From: ada Date: Wed, 16 Apr 2025 10:10:18 -0700 Subject: [PATCH 054/100] Removed an attribute from the Android and iOS RUM data models per Aditi. --- gdi/get-data-in/rum/android/rum-android-data-model.rst | 3 --- gdi/get-data-in/rum/ios/rum-ios-data-model.rst | 3 --- 2 files changed, 6 deletions(-) diff --git a/gdi/get-data-in/rum/android/rum-android-data-model.rst b/gdi/get-data-in/rum/android/rum-android-data-model.rst index 77e426947..7084bf21d 100644 --- a/gdi/get-data-in/rum/android/rum-android-data-model.rst +++ b/gdi/get-data-in/rum/android/rum-android-data-model.rst @@ -228,9 +228,6 @@ The Android RUM agent adds the following crash reporting attributes to spans tha * - ``component`` - String - Always ``crash``. - * - ``status`` - - String - - Always ``Error``. * - ``service.application_id`` - String - Application ID of the app: Refer to definition of ``applicationId`` in the :new-page:`Android Studio developer documentation `. diff --git a/gdi/get-data-in/rum/ios/rum-ios-data-model.rst b/gdi/get-data-in/rum/ios/rum-ios-data-model.rst index 9c0971e47..574848861 100644 --- a/gdi/get-data-in/rum/ios/rum-ios-data-model.rst +++ b/gdi/get-data-in/rum/ios/rum-ios-data-model.rst @@ -249,9 +249,6 @@ The iOS RUM library adds the following crash reporting attributes to spans that * - ``component`` - String - Always ``crash``. - * - ``status`` - - String - - Always ``Error``. * - ``crash.timestamp`` - NSDate - Date and time when the crash report is generated. From 46f358516621d6deda02360e8852e58c1d04f479 Mon Sep 17 00:00:00 2001 From: ada Date: Wed, 16 Apr 2025 14:30:17 -0700 Subject: [PATCH 055/100] Corrected the Android prereq per Aditi --- gdi/get-data-in/rum/android/add-mapping-file.rst | 3 +-- gdi/get-data-in/rum/ios/add-dsyms.rst | 8 ++++---- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/gdi/get-data-in/rum/android/add-mapping-file.rst b/gdi/get-data-in/rum/android/add-mapping-file.rst index 856818fd0..3284661b2 100644 --- a/gdi/get-data-in/rum/android/add-mapping-file.rst +++ b/gdi/get-data-in/rum/android/add-mapping-file.rst @@ -26,8 +26,7 @@ Prerequisites * Upgrade the following Splunk components: - * :new-page:`SplunkOtelCrashReporting` : v0.7.0 - * :new-page:`SplunkOtel` : v0.13.0 + * :new-page:`splunk-otel-android`: v1.10.0 * :ref:`Install the splunk-rum CLI`. diff --git a/gdi/get-data-in/rum/ios/add-dsyms.rst b/gdi/get-data-in/rum/ios/add-dsyms.rst index db6355246..66a39d89b 100644 --- a/gdi/get-data-in/rum/ios/add-dsyms.rst +++ b/gdi/get-data-in/rum/ios/add-dsyms.rst @@ -10,9 +10,9 @@ Add dSYMs -When you build your iOS application in release mode, your build process generates one or more debug symbol archives, commonly referred to simply as dSYMs. A dSYM stores debug symbols and exact offsets for a particular build of your application and its modules. With this detailed information, Splunk RUM can convert crash data for that specific build into readable reports labeled with function names and line numbers, showing what code was run, in what order, and where the crash happened. This conversion is called symbolication in iOS terminology. Different dSYMs symbolicate your applications's main application code, third-party frameworks, and system libraries. +When you build your iOS application in release mode, your build process generates one or more debug symbol archives, commonly referred to simply as dSYMs. A dSYM stores debug symbols and exact offsets for a particular build of your application and its modules. With this detailed information, Splunk RUM can convert crash data into readable reports labeled with function names and line numbers, showing what code was run, in what order, and where the crash happened. This conversion is called symbolication in iOS terminology. By uploading your dSYMs, you enable symbolication for the corresponding application version. -The ``splunk-rum`` CLI compresses dSYM directories into .zip files for you and uploads them. When you upload a zipped dSYM to Splunk RUM, you enable Splunk RUM to symbolicate the debug symbols contained within that dSYM. This in turn enables you to view stack traces with the names of functions and offsets into those functions to help you identify the line of code that was executing when the application crashed. +The ``splunk-rum`` CLI compresses dSYM directories into ``.zip`` files for you and uploads them. When you upload a zipped dSYM to Splunk RUM, you enable Splunk RUM to symbolicate the debug symbols contained within that dSYM. This in turn enables you to view stack traces with the names of functions and offsets into those functions to help you identify the line of code that was executing when the application crashed. You can upload dSYMs from your main application code and from third-party frameworks, but not from system libraries. Splunk RUM does not yet support the symbolication of stack frames for system libraries. @@ -22,8 +22,8 @@ Prerequisites * Upgrade the following Splunk components: - * :new-page:`SplunkOtelCrashReporting` : v0.7.0 - * :new-page:`SplunkOtel` : v0.13.0 + * :new-page:`SplunkOtelCrashReporting`: v0.7.0 + * :new-page:`SplunkOtel`: v0.13.0 * :ref:`Install the splunk-rum CLI`. From 801510b184490f2f16b8a00ae7d1785508cbcdf6 Mon Sep 17 00:00:00 2001 From: ada Date: Wed, 16 Apr 2025 15:39:11 -0700 Subject: [PATCH 056/100] Corrected the Android stuff per Tony --- gdi/get-data-in/rum/android/add-mapping-file.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gdi/get-data-in/rum/android/add-mapping-file.rst b/gdi/get-data-in/rum/android/add-mapping-file.rst index 3284661b2..2a06e4315 100644 --- a/gdi/get-data-in/rum/android/add-mapping-file.rst +++ b/gdi/get-data-in/rum/android/add-mapping-file.rst @@ -174,7 +174,7 @@ Command descriptions * ``--path `` Required. Path to the ``mapping.txt`` file. - * ``--app-id `` Required. The ``applicationId`` property in your application's ``build.gradle.kts`` file. + * ``--app-id `` Required. The ``applicationId`` property in your application's ``build.gradle`` file. * ``--version-code `` Required. The ``versionCode`` property of your application. @@ -216,7 +216,7 @@ Command descriptions Parameters: - * ``--app-id `` Required. The ``applicationId`` property in your app's ``build.gradle.kts`` file. + * ``--app-id `` Required. The ``applicationId`` property in your app's ``build.gradle`` file. * ``--realm `` Optional. Realm for your organization. For example, ``us0``. You can omit this parameter and set the environment variable ``SPLUNK_REALM`` instead. From e04e855f9e0e156d30e980065f7caa698867a335 Mon Sep 17 00:00:00 2001 From: ada Date: Thu, 17 Apr 2025 14:36:39 -0700 Subject: [PATCH 057/100] Fix capitalization issue --- rum/error-aggregates.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rum/error-aggregates.rst b/rum/error-aggregates.rst index 309feb7db..7725ccbb0 100644 --- a/rum/error-aggregates.rst +++ b/rum/error-aggregates.rst @@ -1,7 +1,7 @@ .. _error-aggregates: ****************************************************************************************** -Error monitoring and crash aggregation in Tag spotlight +Error monitoring and crash aggregation in Tag Spotlight ****************************************************************************************** From 854d98905361d4f353ba3b405ff38053c1ae6a43 Mon Sep 17 00:00:00 2001 From: ada Date: Tue, 22 Apr 2025 20:35:58 -0700 Subject: [PATCH 058/100] Updated based on reviewer feedback --- rum/error-aggregates.rst | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/rum/error-aggregates.rst b/rum/error-aggregates.rst index 7725ccbb0..cc6644ccc 100644 --- a/rum/error-aggregates.rst +++ b/rum/error-aggregates.rst @@ -49,18 +49,11 @@ Mobile crash aggregation A crash happens when a user encounters an error and has to exit the app. App errors are all other types of errors that occur but don't result in the user having to exit the app. For example, ANR (application not responding). -Splunk RUM's :guilabel:`APPLICATION SUMMARY DASHBOARD` groups errors by platform: - -* Browser applications each have their own section. -* Android applications are grouped by error ID. -* iOS apps are grouped by error ID. - - -Each error group has a unique error ID. For more information about the error ID, see :ref:`about-error-id`. +Splunk RUM's :guilabel:`APPLICATION SUMMARY DASHBOARD` groups errors by error ID. Each group's error ID is unique. For more information about the error ID, see :ref:`about-error-id`. To see crashes from a specific mobile application: -#. Scroll down to the :guilabel:`Android Symbolication` or :guilabel:`iOS Symbolication` section and expand it. +#. Scroll down to the application name and expand its section. #. In the expanded section, select the :guilabel:`Crashes`, :guilabel:`App Errors`, or :guilabel:`All` tab in the pane on the right. These tabs display aggregated data with a count of the number of crashes or errors in each aggregation. #. To see details about a specific crash or error, select it. This opens the :guilabel:`Error groups` side panel on the right. #. In the panel on the right, Splunk RUM displays the stack trace for this crash or error. If Splunk RUM has a mapping file (Android) or dSYM (iOS) for the application that this crash or error originated from, it displays the stack trace in readable form. Otherwise, it displays the message :guilabel:`No mapping file detected` (Android) or :guilabel:`No dSYM detected` (iOS). From cc62b8e5d638af3aef99d9a731d089c5ce338b11 Mon Sep 17 00:00:00 2001 From: ada Date: Tue, 22 Apr 2025 21:13:43 -0700 Subject: [PATCH 059/100] Updated based on reviewer feedback --- rum/error-aggregates.rst | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/rum/error-aggregates.rst b/rum/error-aggregates.rst index cc6644ccc..2f14b6584 100644 --- a/rum/error-aggregates.rst +++ b/rum/error-aggregates.rst @@ -105,13 +105,9 @@ The information in most raw crash stack traces is not fully human-readable. To m JavaScript error aggregation ========================================================================================== -Splunk RUM's :guilabel:`APPLICATION SUMMARY DASHBOARD` groups errors by platform: - -* Browser applications each have their own section. -* Android applications are grouped by error ID. -* iOS apps are grouped by error ID. +Splunk RUM's :guilabel:`APPLICATION SUMMARY DASHBOARD` groups errors by error ID. Each group's error ID is unique. For more information about the error ID, see :ref:`about-error-id`. -Each error group has a unique error ID. The JavaScript Errors metric in RUM displays JavaScript errors (grouped by error ID) which occur most often in your applications. The error ID is created by hashing the associated stack trace, error message, and error type. When you drill into an error, you can see the error type, the error message, associated stack trace, and the trend of the error frequency. For more information about the error ID, see :ref:`about-error-id`. +The JavaScript Errors metric in RUM displays JavaScript errors (grouped by error ID) which occur most often in your applications. The error ID is created by hashing the associated stack trace, error message, and error type. When you drill into an error, you can see the error type, the error message, associated stack trace, and the trend of the error frequency. For more information about the error ID, see :ref:`about-error-id`. To see errors from a specific browser application: From eeca08cc69febd44ebdeb92c9066626ebdfedf44 Mon Sep 17 00:00:00 2001 From: ada Date: Tue, 22 Apr 2025 21:18:29 -0700 Subject: [PATCH 060/100] Updated based on reviewer feedback --- rum/error-aggregates.rst | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/rum/error-aggregates.rst b/rum/error-aggregates.rst index 2f14b6584..4b23b6242 100644 --- a/rum/error-aggregates.rst +++ b/rum/error-aggregates.rst @@ -105,9 +105,7 @@ The information in most raw crash stack traces is not fully human-readable. To m JavaScript error aggregation ========================================================================================== -Splunk RUM's :guilabel:`APPLICATION SUMMARY DASHBOARD` groups errors by error ID. Each group's error ID is unique. For more information about the error ID, see :ref:`about-error-id`. - -The JavaScript Errors metric in RUM displays JavaScript errors (grouped by error ID) which occur most often in your applications. The error ID is created by hashing the associated stack trace, error message, and error type. When you drill into an error, you can see the error type, the error message, associated stack trace, and the trend of the error frequency. For more information about the error ID, see :ref:`about-error-id`. +Splunk RUM's :guilabel:`APPLICATION SUMMARY DASHBOARD` displays JavaScript errors (grouped by error ID) which occur most often in your applications. The error ID is created by hashing the associated stack trace, error message, and error type. When you drill into an error, you can see the error type, the error message, associated stack trace, and the trend of the error frequency. For more information about the error ID, see :ref:`about-error-id`. To see errors from a specific browser application: From 1f7a6cc33a048b9b8a2c1eb43d660b2f2276ea7a Mon Sep 17 00:00:00 2001 From: ada Date: Wed, 23 Apr 2025 13:48:00 -0700 Subject: [PATCH 061/100] Updated based on reviewer feedback. Also updated Heretto (https://splunk.heretto.com/share/8aa94b7d-7b3b-420d-bdcc-2a95250b2675) --- .../rum/browser/set-up-javascript-source-mapping.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst b/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst index 110170963..5a40e267b 100644 --- a/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst +++ b/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst @@ -144,7 +144,7 @@ If your project uses a different bunding tool or a different version of Webpack, ..., new SplunkRumWebpackPlugin({ applicationName: '', - appVersion: '', + version: '', sourceMaps: { token: '', realm: '', From 31b8192c89302933d51b417c85416ecb3ea9bc6b Mon Sep 17 00:00:00 2001 From: Anna Urbiztondo Date: Mon, 5 May 2025 11:51:41 +0200 Subject: [PATCH 062/100] WIP --- gdi/private-connectivity/aws-privatelink.rst | 35 +++++++++++++++----- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/gdi/private-connectivity/aws-privatelink.rst b/gdi/private-connectivity/aws-privatelink.rst index 9831e15f8..d3daf1895 100644 --- a/gdi/private-connectivity/aws-privatelink.rst +++ b/gdi/private-connectivity/aws-privatelink.rst @@ -17,22 +17,41 @@ AWS PrivateLink connects your Virtual Private Cloud (VPC) to your AWS services, To send logs securely, use :new-page:`Private connectivity in Splunk Cloud Platform `. -The following diagram shows an overview of how AWS PrivateLink for Splunk Observability Cloud works: +Prerequisites +================================================== + +To connect Splunk Observability Cloud to AWS using AWS PrivateLink, you need the following: + +* An active AWS account +* A basic understanding of VPC concepts and networking principles + +Connect different accounts within or accross regions +============================================================== + +Connect different accounts in the same region using AWS PrivateLink +---------------------------------------------------------------------------------------------------- -.. source in Lucidchart: https://lucid.app/lucidchart/21f1cd02-7b2c-4654-a1b8-18c80a903fee/edit?shared=true&page=0_0&invitationId=inv_2f660037-6a85-4b98-9025-212b16c6b5a2# +You can use AWS PrivateLink to connect different accounts in the same AWS region. The following diagram shows an overview of how AWS PrivateLink for Splunk Observability Cloud works: .. image:: /_images/gdi/aws-privatelink-schema2.png :width: 80% :alt: AWS Private Link schema. - -Prerequisites -================================================== +Connect different accounts across different regions using AWS PrivateLink +---------------------------------------------------------------------------------------------------- -To connect Splunk Observability Cloud to AWS using AWS PrivateLink, you need the following: +AWS PrivateLink also provides cross region private link connectivity if the source and destination region is one of the following: -* An active AWS account -* A basic understanding of VPC concepts and networking principles +* ``us-east-1`` (N. Virginia). Splunk Observability Cloud realm: ``us0``. +* ``us-west-2`` (Oregon). Splunk Observability Cloud realm: ``us1``. +* ``eu-west-1`` (Ireland). Splunk Observability Cloud realm: ``eu0``. +* ``ap-southeast-1`` (Sydney). Splunk Observability Cloud realm: ``au0``. +* ``ap-northeast-1`` (Tokyo). Splunk Observability Cloud realm: ``jp0``. + +If your workloads or Splunk Observability Cloud accounts are in regions not listed above, cross-region PrivateLink is not supported. In such cases, you should either: + +* Use PrivateLink within the same AWS region. +* Set up VPC peering. .. _aws-privatelink-endpoint-types: From de0afea78c72dbf4ecf62feb2fc892e18f8c962c Mon Sep 17 00:00:00 2001 From: Anna Urbiztondo Date: Mon, 5 May 2025 14:34:48 +0200 Subject: [PATCH 063/100] Images --- _images/gdi/AWS_PL_region1.png | Bin 0 -> 51455 bytes _images/gdi/AWS_PL_region2.png | Bin 0 -> 153867 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 _images/gdi/AWS_PL_region1.png create mode 100644 _images/gdi/AWS_PL_region2.png diff --git a/_images/gdi/AWS_PL_region1.png b/_images/gdi/AWS_PL_region1.png new file mode 100644 index 0000000000000000000000000000000000000000..d8c657816dbca2b8c1c8a0aa3ca8ba352d4f247c GIT binary patch literal 51455 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

4fHC1Dw_iCaR7K~{$Pvk3fx>$MP(1Xa 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 NlvkC@Ie+E;{{pwR<%j?P literal 0 HcmV?d00001 diff --git a/_images/gdi/AWS_PL_region2.png b/_images/gdi/AWS_PL_region2.png new file mode 100644 index 0000000000000000000000000000000000000000..91ca8e0d8f3bc517dc181bb79c684b8142e4d5ec GIT binary patch literal 153867 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 Ag#Z8m literal 0 HcmV?d00001 From 5ca531c1ff70e63c298a2a619ea5310d55e70ca9 Mon Sep 17 00:00:00 2001 From: Anna Urbiztondo Date: Mon, 5 May 2025 14:51:50 +0200 Subject: [PATCH 064/100] Update --- gdi/private-connectivity/aws-privatelink.rst | 35 ++++++++++++++------ 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/gdi/private-connectivity/aws-privatelink.rst b/gdi/private-connectivity/aws-privatelink.rst index d3daf1895..3b55f0ef9 100644 --- a/gdi/private-connectivity/aws-privatelink.rst +++ b/gdi/private-connectivity/aws-privatelink.rst @@ -22,8 +22,8 @@ Prerequisites To connect Splunk Observability Cloud to AWS using AWS PrivateLink, you need the following: -* An active AWS account -* A basic understanding of VPC concepts and networking principles +* An active AWS account. +* A basic understanding of VPC concepts and networking principles. Connect different accounts within or accross regions ============================================================== @@ -33,7 +33,7 @@ Connect different accounts in the same region using AWS PrivateLink You can use AWS PrivateLink to connect different accounts in the same AWS region. The following diagram shows an overview of how AWS PrivateLink for Splunk Observability Cloud works: -.. image:: /_images/gdi/aws-privatelink-schema2.png +.. image:: /_images/gdi/AWS_PL_region1.png :width: 80% :alt: AWS Private Link schema. @@ -48,6 +48,12 @@ AWS PrivateLink also provides cross region private link connectivity if the sour * ``ap-southeast-1`` (Sydney). Splunk Observability Cloud realm: ``au0``. * ``ap-northeast-1`` (Tokyo). Splunk Observability Cloud realm: ``jp0``. +.. image:: /_images/gdi/AWS_PL_region2.png + :width: 80% + :alt: AWS Private Link schema. + +.. caution:: Cross-region connectivity is not supported if either the source or target account is in the ``eu-central-1`` (eu1) or ``eu-west-2`` (eu2) regions. For the latest list of supported AWS regions for cross-region PrivateLink connectivity refer to the :new-page:`official AWS announcement `. + If your workloads or Splunk Observability Cloud accounts are in regions not listed above, cross-region PrivateLink is not supported. In such cases, you should either: * Use PrivateLink within the same AWS region. @@ -226,6 +232,8 @@ Reach out to Splunk Customer Support with the following information to include y * AWS region + * If you're connecting between two regions you need to provide both the source region (where your workloads are hosted) and the target account region (where your Splunk Observability Cloud account is located). + * Endpoint type * Ingest @@ -316,11 +324,8 @@ To delete an endpoint, follow these steps: #. Select the VPC endpoint you want to delete. #. Confirm the deletion when prompted. -Advanced configuration -========================================================================== - Use AWS PrivateLink with the Collector --------------------------------------------------- +========================================================================== To use AWS PrivateLink URLs in your Collector instance, update the necessary variables in your Collector configuration to point to the given endpoint type: @@ -351,15 +356,25 @@ See all PrivateLink URLs at :ref:`aws-privatelink-endpoint-urls`. For information about the Collector's environment variables see :ref:`collector-env-var`. Use AWS PrivateLink with VPC peering +========================================================================== + +VPC peering in US regions -------------------------------------------------- -Examine a scenario where the workloads that you're monitoring with Splunk Observability Cloud are in the AWS ``ap-south-1`` region, and your Splunk Observability Cloud account is in ``us-east-1``. You want to use PrivateLink to ingest observability data, but PrivateLink only works within one AWS region. +If your monitored workloads in Splunk Observability Cloud are located in the AWS regions ``eu-central-1`` (eu1) or ``eu-west-2`` (eu2), or if you need to enable connectivity to the Splunk Observability Cloud accounts in those regions, use VPC peering instead of AWS PrivateLink since cross-region connectivity via AWS PrivateLink is not currently supported in these regions. + +For the latest list of supported AWS regions for cross-region PrivateLink connectivity refer to the :new-page:`official AWS announcement `. + +Scenario: Connect your workloads to a Splunk Observability Cloud account in a different region +---------------------------------------------------------------------------------------------------- + +Examine a scenario where the workloads that you're monitoring with Splunk Observability Cloud are running in the AWS region ``eu-central-1``, and your Splunk Observability Cloud account is hosted in ``us-east-1``. You want to use AWS PrivateLink to ingest observability data, but AWS PrivateLink cross-region connectivity is not currently supported in these regions. -In this scenario, carry out the following steps: +Use VPC Peering instead with the following steps: #. Ensure that you have a VPC set up in the destination region, in this example ``us-east-1``. If you don't have a VPC in that region, create a new one. -#. Use AWS VPC peering to peer the ``ap-south-1`` and the ``us-east-1`` VPCs together. +#. Use AWS VPC peering to peer the ``eu-central-1`` and the ``us-east-1`` VPCs together in the source account with the workloads you want to monitor with Splunk Observability Cloud. #. Activate AWS PrivateLink in the ``us-east-1`` VPC. From c8a34be1ecf0c858a6d02a23c5b8ff440459b98c Mon Sep 17 00:00:00 2001 From: Anna Urbiztondo Date: Mon, 5 May 2025 16:10:11 +0200 Subject: [PATCH 065/100] Fixes --- gdi/private-connectivity/aws-privatelink.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gdi/private-connectivity/aws-privatelink.rst b/gdi/private-connectivity/aws-privatelink.rst index 3b55f0ef9..a906d5727 100644 --- a/gdi/private-connectivity/aws-privatelink.rst +++ b/gdi/private-connectivity/aws-privatelink.rst @@ -25,7 +25,7 @@ To connect Splunk Observability Cloud to AWS using AWS PrivateLink, you need the * An active AWS account. * A basic understanding of VPC concepts and networking principles. -Connect different accounts within or accross regions +Connect different accounts within or across regions ============================================================== Connect different accounts in the same region using AWS PrivateLink From e42f5146328c95cf582770f09558078d5cccfbd7 Mon Sep 17 00:00:00 2001 From: Anna Urbiztondo Date: Tue, 6 May 2025 13:55:36 +0200 Subject: [PATCH 066/100] Feedback --- gdi/private-connectivity/aws-privatelink.rst | 55 +++++++++++++++++--- 1 file changed, 47 insertions(+), 8 deletions(-) diff --git a/gdi/private-connectivity/aws-privatelink.rst b/gdi/private-connectivity/aws-privatelink.rst index a906d5727..42006414d 100644 --- a/gdi/private-connectivity/aws-privatelink.rst +++ b/gdi/private-connectivity/aws-privatelink.rst @@ -9,13 +9,13 @@ Private Connectivity using AWS PrivateLink You can use Amazon Web Services (AWS) PrivateLink to secure your metric and traces traffic from your AWS environment to your Splunk Observability Cloud environment without exposing it to the internet. -AWS PrivateLink connects your Virtual Private Cloud (VPC) to your AWS services, treating them as if they were in your VPC. You can create and use VPC endpoints to securely access AWS services and control the specific API endpoints and sites. To learn more, see the AWS PrivateLink documentation at :new-page:`What is AWS PrivateLink? `. +AWS PrivateLink connects your Virtual Private Cloud (VPC) to the AWS-hosted services that you use, treating them as if they were in your VPC. You can create and use VPC endpoints to securely access AWS-hosted services and control the specific API endpoints and sites. To learn more, see the AWS PrivateLink documentation at :new-page:`What is AWS PrivateLink? `. .. note:: To send logs to Splunk Observability Cloud, use :ref:`lo-connect-landing`. - To send logs securely, use :new-page:`Private connectivity in Splunk Cloud Platform `. + To send logs with AWS PrivateLink see :new-page:`Private connectivity in Splunk Cloud Platform `. Prerequisites ================================================== @@ -40,13 +40,52 @@ You can use AWS PrivateLink to connect different accounts in the same AWS region Connect different accounts across different regions using AWS PrivateLink ---------------------------------------------------------------------------------------------------- -AWS PrivateLink also provides cross region private link connectivity if the source and destination region is one of the following: +AWS PrivateLink also provides cross region private link connectivity for the following regions: -* ``us-east-1`` (N. Virginia). Splunk Observability Cloud realm: ``us0``. -* ``us-west-2`` (Oregon). Splunk Observability Cloud realm: ``us1``. -* ``eu-west-1`` (Ireland). Splunk Observability Cloud realm: ``eu0``. -* ``ap-southeast-1`` (Sydney). Splunk Observability Cloud realm: ``au0``. -* ``ap-northeast-1`` (Tokyo). Splunk Observability Cloud realm: ``jp0``. +.. list-table:: + :header-rows: 1 + :width: 100 + :widths: 30, 30, 20, 20 + + * - Splunk Observability Cloud realm + - AWS region + - Use as source region? + - Use as destination region? + + * - us0 + - us-east-1 (N. Virginia) + - Yes + - Yes + + * - us1 + - us-west-1 (Oregon) + - Yes + - Yes + + * - eu0 + - eu-west-1 (Ireland) + - Yes + - Yes + + * - au0 + - ap-southeast-1 (Sydney) + - Yes + - Yes + + * - jp0 + - ap-northeast-1 (Tokyo) + - Yes + - Yes + + * - ?? + - ap-southeast-1 (Singapore) + - Yes + - No + + * - ?? + - sa-east-1 (São Paulo) + - Yes + - No .. image:: /_images/gdi/AWS_PL_region2.png :width: 80% From 7dfeacde0d850c3a63e747582c384c3b01948c42 Mon Sep 17 00:00:00 2001 From: Anna Urbiztondo Date: Tue, 6 May 2025 14:12:15 +0200 Subject: [PATCH 067/100] Detail --- gdi/private-connectivity/aws-privatelink.rst | 26 +++++++------------- 1 file changed, 9 insertions(+), 17 deletions(-) diff --git a/gdi/private-connectivity/aws-privatelink.rst b/gdi/private-connectivity/aws-privatelink.rst index 42006414d..e51a3d563 100644 --- a/gdi/private-connectivity/aws-privatelink.rst +++ b/gdi/private-connectivity/aws-privatelink.rst @@ -45,45 +45,37 @@ AWS PrivateLink also provides cross region private link connectivity for the fol .. list-table:: :header-rows: 1 :width: 100 - :widths: 30, 30, 20, 20 + :widths: 60, 20, 20 - * - Splunk Observability Cloud realm - - AWS region + * - AWS region / Splunk Observability Cloud realm - Use as source region? - Use as destination region? - * - us0 - - us-east-1 (N. Virginia) + * - us-east-1 (N. Virginia) / us0 - Yes - Yes - * - us1 - - us-west-1 (Oregon) + * - us-west-1 (Oregon) / us1 - Yes - Yes - * - eu0 - - eu-west-1 (Ireland) + * - eu-west-1 (Ireland) / eu0 - Yes - Yes - * - au0 - - ap-southeast-1 (Sydney) + * - ap-southeast-1 (Sydney) / au0 - Yes - Yes - * - jp0 - - ap-northeast-1 (Tokyo) + * - ap-northeast-1 (Tokyo) / jp0 - Yes - Yes - * - ?? - - ap-southeast-1 (Singapore) + * - ap-southeast-1 (Singapore) - Yes - No - * - ?? - - sa-east-1 (São Paulo) + * - sa-east-1 (São Paulo) - Yes - No From 3ca4c3d623be2e5372613361ddea43186660494b Mon Sep 17 00:00:00 2001 From: Anna Urbiztondo Date: Wed, 7 May 2025 14:51:41 +0200 Subject: [PATCH 068/100] New table --- gdi/private-connectivity/aws-privatelink.rst | 93 ++++++++++++++++++-- 1 file changed, 87 insertions(+), 6 deletions(-) diff --git a/gdi/private-connectivity/aws-privatelink.rst b/gdi/private-connectivity/aws-privatelink.rst index e51a3d563..c2ea3b447 100644 --- a/gdi/private-connectivity/aws-privatelink.rst +++ b/gdi/private-connectivity/aws-privatelink.rst @@ -40,7 +40,92 @@ You can use AWS PrivateLink to connect different accounts in the same AWS region Connect different accounts across different regions using AWS PrivateLink ---------------------------------------------------------------------------------------------------- -AWS PrivateLink also provides cross region private link connectivity for the following regions: +You can also connect different accounts from different regions with AWS PrivateLink as displayed in the image: + +.. image:: /_images/gdi/AWS_PL_region2.png + :width: 80% + :alt: AWS Private Link schema. + +The following regions are supported: + +.. list-table:: + :header-rows: 1 + :width: 100 + :widths: 30, 10, 10, 10, 10, 10, 10, 10 + + * - Source AWS region / Splunk Observability Cloud realm + - Target region: ap-southeast-2 (Sydney) / au0 + - Target region: ap-northeast-1 (Tokyo) / jp0 + - Target region: eu-west-1 (Dublin) / eu0 + - Target region: eu-central-1 (Frankfurt) / eu1 + - Target region: eu-west-2 (London) / eu2 + - Target region: us-east-1 (East Virginia) / us0 + - Target region: us-west-2 (West Oregon) / us1 + + * - ap-southeast-2 (Sydney) + - Yes + - Yes + - Yes + - No + - No + - Yes + - Yes + + * - ap-northeast-1 (Tokyo) + - Yes + - Yes + - Yes + - No + - No + - Yes + - Yes + + * - eu-west-1 (Dublin) + - Yes + - Yes + - Yes + - No + - No + - Yes + - Yes + + * - us-east-1 (East Virginia) + - Yes + - Yes + - Yes + - No + - No + - Yes + - Yes + + * - us-west-2 (West Oregon) + - Yes + - Yes + - Yes + - No + - No + - Yes + - Yes + + * - ap-southeast-1 (Singapore) + - Yes + - Yes + - Yes + - No + - No + - Yes + - Yes + + * - sa-east-1 (Sao Paolo) + - Yes + - Yes + - Yes + - No + - No + - Yes + - Yes + +OLD: .. list-table:: :header-rows: 1 @@ -63,7 +148,7 @@ AWS PrivateLink also provides cross region private link connectivity for the fol - Yes - Yes - * - ap-southeast-1 (Sydney) / au0 + * - ap-southeast-2 (Sydney) / au0 - Yes - Yes @@ -79,10 +164,6 @@ AWS PrivateLink also provides cross region private link connectivity for the fol - Yes - No -.. image:: /_images/gdi/AWS_PL_region2.png - :width: 80% - :alt: AWS Private Link schema. - .. caution:: Cross-region connectivity is not supported if either the source or target account is in the ``eu-central-1`` (eu1) or ``eu-west-2`` (eu2) regions. For the latest list of supported AWS regions for cross-region PrivateLink connectivity refer to the :new-page:`official AWS announcement `. If your workloads or Splunk Observability Cloud accounts are in regions not listed above, cross-region PrivateLink is not supported. In such cases, you should either: From 5777cf78ca9514ac0b48d24ede7a606938b9e68f Mon Sep 17 00:00:00 2001 From: ada Date: Tue, 13 May 2025 13:47:55 -0700 Subject: [PATCH 069/100] Remove CocoaPods references --- gdi/get-data-in/rum/android/add-mapping-file.rst | 2 -- gdi/get-data-in/rum/ios/install-rum-ios.rst | 14 +------------- 2 files changed, 1 insertion(+), 15 deletions(-) diff --git a/gdi/get-data-in/rum/android/add-mapping-file.rst b/gdi/get-data-in/rum/android/add-mapping-file.rst index 2a06e4315..550b31556 100644 --- a/gdi/get-data-in/rum/android/add-mapping-file.rst +++ b/gdi/get-data-in/rum/android/add-mapping-file.rst @@ -11,8 +11,6 @@ Add a mapping file When you set the ``minifyEnabled`` property to true in your Android application source code, your build process minifies, optimizes, and obfuscates the code and generates a single mapping file, ``mapping.txt``. This mapping file contains the information Splunk RUM needs to convert stack traces containing obfuscated classes and filenames back into a human readable form. This conversion is called deobfuscation in Android. -Deobfuscation is available for Android application crashes only. - .. note:: Make sure that the mapping file you upload to Splunk RUM matches the binary you deploy to production. To ensure this, the best practice is to integrate the ``splunk-rum`` usage into your CI pipeline so that whenever you re-build your Android application, you also re-upload its mapping file. diff --git a/gdi/get-data-in/rum/ios/install-rum-ios.rst b/gdi/get-data-in/rum/ios/install-rum-ios.rst index 89e5458e8..a3740e27f 100644 --- a/gdi/get-data-in/rum/ios/install-rum-ios.rst +++ b/gdi/get-data-in/rum/ios/install-rum-ios.rst @@ -7,7 +7,7 @@ Install the iOS RUM library for Splunk RUM .. meta:: :description: Instrument your iOS applications for Splunk Observability Cloud real user monitoring / RUM using the iOS RUM library from the Splunk OpenTelemetry Instrumentation for iOS. -To instrument your iOS application using the iOS RUM library and get data into Splunk RUM, follow the instructions on this page. You can install the library using Swift Package Manager, CocoaPods, or by building an XCFramework. +To instrument your iOS application using the iOS RUM library and get data into Splunk RUM, follow the instructions on this page. You can install the library using Swift Package Manager, or by building an XCFramework. .. note:: Splunk APM is not required to instrument Splunk RUM for iOS. @@ -156,18 +156,6 @@ To install the iOS RUM library using the Swift Package Manager (SPM) follow thes 2. Select :guilabel:`Add Package` to install the package. -CocoaPods -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -To install the iOS Crash Reporting package using CocoaPods follow these steps: - -1. Make sure your project is using CocoaPods. - -2. Add ``pod 'SplunkOtelCrashReporting`` to your Podfile. - -3. Run ``pod install --repo-update`` in the directory where the Podfile is located. - -4. After installing the pod, make sure to open the .xcworkspace file instead of the .xcodeproj file. Initialize Crash Reporting --------------------------------------------------- From f0c39b2a88abefd002f37928173155a33fa0cd34 Mon Sep 17 00:00:00 2001 From: Max Bechtold Date: Wed, 14 May 2025 12:34:06 -0500 Subject: [PATCH 070/100] initial commit --- _includes/gdi/otel-receivers-table.rst | 3 + .../components/a-components-receivers.rst | 1 + .../activedirectory-ds-receiver.rst | 120 ++++++++++++++++++ 3 files changed, 124 insertions(+) create mode 100644 gdi/opentelemetry/components/activedirectory-ds-receiver.rst diff --git a/_includes/gdi/otel-receivers-table.rst b/_includes/gdi/otel-receivers-table.rst index 684f93bbb..9ddca4e73 100644 --- a/_includes/gdi/otel-receivers-table.rst +++ b/_includes/gdi/otel-receivers-table.rst @@ -12,6 +12,9 @@ * - :ref:`apache-spark-receiver` (``apachespark``) - Fetches metrics for an Apache Spark cluster through the Apache Spark REST API. - Metrics + * - :ref:`activedirectory-ds-receiver` (``active_directory_ds``) + - Metrics + - Scrapes metrics relating to an Active Directory domain controller using the Windows Performance Counters. * - :ref:`awsecscontainermetrics-receiver` (``awsecscontainermetrics``) - Reads task metadata and docker stats from Amazon ECS and generates resource usage metrics. - Metrics diff --git a/gdi/opentelemetry/components/a-components-receivers.rst b/gdi/opentelemetry/components/a-components-receivers.rst index 02e9a4e63..73aa377dc 100644 --- a/gdi/opentelemetry/components/a-components-receivers.rst +++ b/gdi/opentelemetry/components/a-components-receivers.rst @@ -12,6 +12,7 @@ Collector components: Receivers :titlesonly: :hidden: + activedirectory-ds-receiver apache-receiver apache-spark-receiver awsecscontainermetrics-receiver diff --git a/gdi/opentelemetry/components/activedirectory-ds-receiver.rst b/gdi/opentelemetry/components/activedirectory-ds-receiver.rst new file mode 100644 index 000000000..6758bb705 --- /dev/null +++ b/gdi/opentelemetry/components/activedirectory-ds-receiver.rst @@ -0,0 +1,120 @@ +.. _activedirectory-ds-receiver: + +***************************************** +Active Directory Domain Services receiver +***************************************** + +.. meta:: + :description: The Active Directory Domain Services receiver scrapes metrics relating to an Active Directory domain controller using the Windows Performance Counters. + +.. note:: Out-of-the-box dashboards and navigators aren't supported for the Active Directory Domain Services receiver yet, but are planned for a future release. + +Get started +====================== + +Follow these steps to configure and activate the component: + +1. Deploy the Splunk Distribution of the OpenTelemetry Collector to your Windows host: :ref:`otel-install-windows` + + +2. Configure the receiver as described in the next section. +3. Restart the Collector. + +Sample configuration +-------------------------------- + +To activate the Active Directory Domain Services receiver, add ``active_directory_ds`` to the ``receivers`` section of your configuration file: + +.. code-block:: yaml + receivers: + active_directory_ds: + collection_interval: 10s +To complete the configuration, include the receiver in the ``metrics`` pipeline of the ``service`` section of your configuration file: + +.. code:: yaml + service: + pipelines: + metrics: + receivers: [active_directory_ds] +Configuration options +----------------------- + +The following settings are optional: + +.. raw:: html + +

+ +.. include:: /_includes/gdi/collector-settings-collectioninterval.rst + +.. raw:: html + +
+ + + + + + +.. raw:: html + +
+ +.. include:: /_includes/gdi/collector-settings-initialdelay.rst + +.. raw:: html + +
+ + + + +Settings +====================== + +The following table shows the configuration options for the Active Directory Domain Services receiver: + +.. raw:: html + +
+ +Metrics +====================== + +The following metrics, resource attributes, and attributes are available. + +.. note:: The SignalFx exporter excludes some available metrics by default. Learn more about default metric filters in :ref:`list-excluded-metrics`. + +.. raw:: html + +
+ + + +.. raw:: html + +
+ +.. include:: /_includes/activate-deactivate-native-metrics.rst + +.. raw:: html + +
+ + + + +Troubleshooting +====================== + + + +.. raw:: html + +
+ +.. include:: /_includes/troubleshooting-components.rst + +.. raw:: html + +
From 65438935553a48bc63bc395082837a0e3680a1fc Mon Sep 17 00:00:00 2001 From: Max Bechtold Date: Wed, 14 May 2025 12:45:21 -0500 Subject: [PATCH 071/100] fixes --- .../activedirectory-ds-receiver.rst | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/gdi/opentelemetry/components/activedirectory-ds-receiver.rst b/gdi/opentelemetry/components/activedirectory-ds-receiver.rst index 6758bb705..e05c39031 100644 --- a/gdi/opentelemetry/components/activedirectory-ds-receiver.rst +++ b/gdi/opentelemetry/components/activedirectory-ds-receiver.rst @@ -26,16 +26,20 @@ Sample configuration To activate the Active Directory Domain Services receiver, add ``active_directory_ds`` to the ``receivers`` section of your configuration file: .. code-block:: yaml - receivers: - active_directory_ds: - collection_interval: 10s + + receivers: + active_directory_ds: + collection_interval: 10s + To complete the configuration, include the receiver in the ``metrics`` pipeline of the ``service`` section of your configuration file: -.. code:: yaml - service: - pipelines: - metrics: - receivers: [active_directory_ds] +.. code-block:: yaml + + service: + pipelines: + metrics: + receivers: [active_directory_ds] + Configuration options ----------------------- From 55890a16bd0c3ada87383f1b2fc2555c29be1173 Mon Sep 17 00:00:00 2001 From: ada Date: Thu, 15 May 2025 16:37:27 -0700 Subject: [PATCH 072/100] Add DWARF 4 build setting per Aditi --- gdi/get-data-in/rum/ios/add-dsyms.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/gdi/get-data-in/rum/ios/add-dsyms.rst b/gdi/get-data-in/rum/ios/add-dsyms.rst index 66a39d89b..f98c03748 100644 --- a/gdi/get-data-in/rum/ios/add-dsyms.rst +++ b/gdi/get-data-in/rum/ios/add-dsyms.rst @@ -20,6 +20,8 @@ You can upload dSYMs from your main application code and from third-party framew Prerequisites ===================================================================== +* Build your applications with ``DEBUG_INFORMATION_FORMAT`` set to ``dwarf-with-dsym`` and ``DEBUG_INFORMATION_VERSION`` set to ``dwarf4``. Splunk RUM doesn't fully support the dwarf5 value for iOS symbolication. For more information on these settings, see :new-page:`Apple developer documentation on Debug Information Version `. + * Upgrade the following Splunk components: * :new-page:`SplunkOtelCrashReporting`: v0.7.0 From 8d7ee9be97bfdb9efc713d13f46445e157cb3f33 Mon Sep 17 00:00:00 2001 From: pkopta-splunk Date: Tue, 20 May 2025 10:18:48 +0200 Subject: [PATCH 073/100] Exporters cofigurations added and note to SPLUNK_REALM --- .../go/configuration/advanced-go-otel-configuration.rst | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/gdi/get-data-in/application/go/configuration/advanced-go-otel-configuration.rst b/gdi/get-data-in/application/go/configuration/advanced-go-otel-configuration.rst index e8e8dd246..238b7958a 100644 --- a/gdi/get-data-in/application/go/configuration/advanced-go-otel-configuration.rst +++ b/gdi/get-data-in/application/go/configuration/advanced-go-otel-configuration.rst @@ -54,6 +54,7 @@ The following settings are specific to the Splunk Distribution of OpenTelemetry - A Splunk authentication token that lets exporters send data directly to Splunk Observability Cloud. Unset by default. Not required unless you need to send data to the Splunk Observability Cloud ingest endpoint. See :ref:`admin-tokens`. * - ``SPLUNK_REALM`` - The name of your organization's realm, for example, ``us0``. When you set the realm, telemetry is sent directly to the ingest endpoint of Splunk Observability Cloud, bypassing the Splunk Distribution of OpenTelemetry Collector. + .. note:: This setting applies only to metrics and traces and does not work for logs. * - ``SPLUNK_TRACE_RESPONSE_HEADER_ENABLED`` - Lets you add server trace information to HTTP response headers using the ``net/http`` instrumentation package. For more information, see :ref:`server-trace-information-go`. The default value is ``true``. * - ``OTEL_LOG_LEVEL`` @@ -104,6 +105,8 @@ The following settings control trace exporters and their endpoints: - The traces exporter to use. The default value is ``otlp``. Acceptable values are ``otlp`` and ``none``. Setting ``none`` deactivates trace exports. * - ``OTEL_METRICS_EXPORTER`` - The metrics exporter to use. The default value is ``otlp``. Accepted values are ``otlp`` and ``none``. Setting ``none`` deactivates metric exports. + * - ``OTEL_LOGS_EXPORTER`` + - The logs exporter to use. The default value is ``otlp``. Accepted values are ``otlp`` and ``none``. Setting ``none`` deactivates logs exports. * - ``OTEL_METRIC_EXPORT_INTERVAL`` - Interval, in milliseconds, between the start of two export attempts. The default value is ``60000``. * - ``OTEL_METRIC_EXPORT_TIMEOUT`` @@ -114,7 +117,8 @@ The following settings control trace exporters and their endpoints: - The OTLP endpoint for traces. The default value is ``http://localhost:4317``. * - ``OTEL_EXPORTER_OTLP_METRICS_ENDPOINT`` - The OTLP endpoint. The default value is ``http://localhost:4317``. - + * - ``OTEL_EXPORTER_OTLP_LOGS_ENDPOINT`` + - The OTLP endpoint. The default value is ``http://localhost:4317``. To send data directly to Splunk Observability Cloud, see :ref:`export-directly-to-olly-cloud-go`. .. _trace-sampling-settings-go-otel: From e3c25bffaf2defd7e047a6f3b291890fb8f5e5aa Mon Sep 17 00:00:00 2001 From: pkopta-splunk Date: Tue, 20 May 2025 10:28:59 +0200 Subject: [PATCH 074/100] fixed --- .../go/configuration/advanced-go-otel-configuration.rst | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/gdi/get-data-in/application/go/configuration/advanced-go-otel-configuration.rst b/gdi/get-data-in/application/go/configuration/advanced-go-otel-configuration.rst index 238b7958a..cdc0c29a1 100644 --- a/gdi/get-data-in/application/go/configuration/advanced-go-otel-configuration.rst +++ b/gdi/get-data-in/application/go/configuration/advanced-go-otel-configuration.rst @@ -53,8 +53,7 @@ The following settings are specific to the Splunk Distribution of OpenTelemetry * - ``SPLUNK_ACCESS_TOKEN`` - A Splunk authentication token that lets exporters send data directly to Splunk Observability Cloud. Unset by default. Not required unless you need to send data to the Splunk Observability Cloud ingest endpoint. See :ref:`admin-tokens`. * - ``SPLUNK_REALM`` - - The name of your organization's realm, for example, ``us0``. When you set the realm, telemetry is sent directly to the ingest endpoint of Splunk Observability Cloud, bypassing the Splunk Distribution of OpenTelemetry Collector. - .. note:: This setting applies only to metrics and traces and does not work for logs. + - The name of your organization's realm, for example, ``us0``. When you set the realm, telemetry is sent directly to the ingest endpoint of Splunk Observability Cloud, bypassing the Splunk Distribution of OpenTelemetry Collector. This setting applies only to metrics and traces and does not work for logs. * - ``SPLUNK_TRACE_RESPONSE_HEADER_ENABLED`` - Lets you add server trace information to HTTP response headers using the ``net/http`` instrumentation package. For more information, see :ref:`server-trace-information-go`. The default value is ``true``. * - ``OTEL_LOG_LEVEL`` From 94c28b1249960ba7e620e0954899ca7336fee24e Mon Sep 17 00:00:00 2001 From: pkopta-splunk Date: Tue, 20 May 2025 14:29:27 +0200 Subject: [PATCH 075/100] error fixed --- .../go/configuration/advanced-go-otel-configuration.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/gdi/get-data-in/application/go/configuration/advanced-go-otel-configuration.rst b/gdi/get-data-in/application/go/configuration/advanced-go-otel-configuration.rst index cdc0c29a1..072539ecd 100644 --- a/gdi/get-data-in/application/go/configuration/advanced-go-otel-configuration.rst +++ b/gdi/get-data-in/application/go/configuration/advanced-go-otel-configuration.rst @@ -118,6 +118,7 @@ The following settings control trace exporters and their endpoints: - The OTLP endpoint. The default value is ``http://localhost:4317``. * - ``OTEL_EXPORTER_OTLP_LOGS_ENDPOINT`` - The OTLP endpoint. The default value is ``http://localhost:4317``. + To send data directly to Splunk Observability Cloud, see :ref:`export-directly-to-olly-cloud-go`. .. _trace-sampling-settings-go-otel: From 75f10e31d80b1aa9b4f54025344c55c50c7a7086 Mon Sep 17 00:00:00 2001 From: ada Date: Tue, 20 May 2025 16:46:29 -0700 Subject: [PATCH 076/100] Updates based on SME requests --- gdi/get-data-in/rum/android/add-mapping-file.rst | 7 +++++++ gdi/get-data-in/rum/ios/add-dsyms.rst | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/gdi/get-data-in/rum/android/add-mapping-file.rst b/gdi/get-data-in/rum/android/add-mapping-file.rst index 550b31556..4db772513 100644 --- a/gdi/get-data-in/rum/android/add-mapping-file.rst +++ b/gdi/get-data-in/rum/android/add-mapping-file.rst @@ -22,6 +22,13 @@ In order to associate a specific mapping file with a specific application build, Prerequisites ===================================================================== +* To support de-obfuscation of your application's stack traces, ensure that your ``proguard-rule.pro`` has the following two lines enabled: + + .. code-block:: + + -keepattributes LineNumberTable,SourceFile + -renamesourcefileattribute SourceFile + * Upgrade the following Splunk components: * :new-page:`splunk-otel-android`: v1.10.0 diff --git a/gdi/get-data-in/rum/ios/add-dsyms.rst b/gdi/get-data-in/rum/ios/add-dsyms.rst index f98c03748..e557c209a 100644 --- a/gdi/get-data-in/rum/ios/add-dsyms.rst +++ b/gdi/get-data-in/rum/ios/add-dsyms.rst @@ -20,7 +20,7 @@ You can upload dSYMs from your main application code and from third-party framew Prerequisites ===================================================================== -* Build your applications with ``DEBUG_INFORMATION_FORMAT`` set to ``dwarf-with-dsym`` and ``DEBUG_INFORMATION_VERSION`` set to ``dwarf4``. Splunk RUM doesn't fully support the dwarf5 value for iOS symbolication. For more information on these settings, see :new-page:`Apple developer documentation on Debug Information Version `. +* Build your applications with ``DEBUG_INFORMATION_FORMAT`` set to ``dwarf-with-dsym`` and ``DEBUG_INFORMATION_VERSION`` set to ``dwarf4``. Splunk RUM doesn't support the ``dwarf5`` format for iOS symbolication. For more information on these settings, see the :new-page:`Apple developer documentation on Debug Information Version `. * Upgrade the following Splunk components: From 520cc69da807bbbd79a288731cab059dcfc5e85c Mon Sep 17 00:00:00 2001 From: Anna Urbiztondo Date: Wed, 21 May 2025 11:56:31 +0200 Subject: [PATCH 077/100] Regions --- gdi/private-connectivity/aws-privatelink.rst | 150 ++++--------------- 1 file changed, 30 insertions(+), 120 deletions(-) diff --git a/gdi/private-connectivity/aws-privatelink.rst b/gdi/private-connectivity/aws-privatelink.rst index c2ea3b447..b155bc196 100644 --- a/gdi/private-connectivity/aws-privatelink.rst +++ b/gdi/private-connectivity/aws-privatelink.rst @@ -48,123 +48,33 @@ You can also connect different accounts from different regions with AWS PrivateL The following regions are supported: -.. list-table:: - :header-rows: 1 - :width: 100 - :widths: 30, 10, 10, 10, 10, 10, 10, 10 - - * - Source AWS region / Splunk Observability Cloud realm - - Target region: ap-southeast-2 (Sydney) / au0 - - Target region: ap-northeast-1 (Tokyo) / jp0 - - Target region: eu-west-1 (Dublin) / eu0 - - Target region: eu-central-1 (Frankfurt) / eu1 - - Target region: eu-west-2 (London) / eu2 - - Target region: us-east-1 (East Virginia) / us0 - - Target region: us-west-2 (West Oregon) / us1 - - * - ap-southeast-2 (Sydney) - - Yes - - Yes - - Yes - - No - - No - - Yes - - Yes - - * - ap-northeast-1 (Tokyo) - - Yes - - Yes - - Yes - - No - - No - - Yes - - Yes - - * - eu-west-1 (Dublin) - - Yes - - Yes - - Yes - - No - - No - - Yes - - Yes - - * - us-east-1 (East Virginia) - - Yes - - Yes - - Yes - - No - - No - - Yes - - Yes - - * - us-west-2 (West Oregon) - - Yes - - Yes - - Yes - - No - - No - - Yes - - Yes - - * - ap-southeast-1 (Singapore) - - Yes - - Yes - - Yes - - No - - No - - Yes - - Yes - - * - sa-east-1 (Sao Paolo) - - Yes - - Yes - - Yes - - No - - No - - Yes - - Yes - -OLD: - -.. list-table:: - :header-rows: 1 - :width: 100 - :widths: 60, 20, 20 - - * - AWS region / Splunk Observability Cloud realm - - Use as source region? - - Use as destination region? - - * - us-east-1 (N. Virginia) / us0 - - Yes - - Yes - - * - us-west-1 (Oregon) / us1 - - Yes - - Yes - - * - eu-west-1 (Ireland) / eu0 - - Yes - - Yes - - * - ap-southeast-2 (Sydney) / au0 - - Yes - - Yes - - * - ap-northeast-1 (Tokyo) / jp0 - - Yes - - Yes - - * - ap-southeast-1 (Singapore) - - Yes - - No - - * - sa-east-1 (São Paulo) - - Yes - - No - -.. caution:: Cross-region connectivity is not supported if either the source or target account is in the ``eu-central-1`` (eu1) or ``eu-west-2`` (eu2) regions. For the latest list of supported AWS regions for cross-region PrivateLink connectivity refer to the :new-page:`official AWS announcement `. +* US East (N. Virginia) ``us-east-1`` +* US East (Ohio) ``us-east-2`` +* US West (N. California) ``us-west-1`` +* US West (Oregon) ``us-west-2`` +* Africa (Cape Town) ``af-south-1`` +* Asia Pacific (Hong Kong) ``ap-east-1`` +* Asia Pacific (Hyderabad) ``ap-south-2`` +* Asia Pacific (Jakarta) ``ap-southeast-3`` +* Asia Pacific (Melbourne) ``ap-southeast-4`` +* Asia Pacific (Mumbai) ``ap-south-1`` +* Asia Pacific (Osaka) ``ap-northeast-3`` +* Asia Pacific (Seoul) ``ap-northeast-2`` +* Asia Pacific (Singapore) ``ap-southeast-1`` +* Asia Pacific (Sydney) ``ap-southeast-2`` +* Asia Pacific (Tokyo) ``ap-northeast-1`` +* Canada (Central) ``ca-central-1`` +* Canada West (Calgary) ``ca-west-1`` +* Europe (Frankfurt) ``eu-central-1`` +* Europe (Zurich) ``eu-central-2`` +* Europe (Ireland) ``eu-west-1`` +* Europe (London) ``eu-west-2`` +* Europe (Paris) ``eu-west-3`` +* Europe (Milan) ``eu-south-1`` +* Europe (Stockholm) ``eu-north-1`` +* Middle East (Bahrain) ``me-south-1`` +* Middle East (UAE) ``me-central-1`` +* South America (São Paulo) ``sa-east-1`` If your workloads or Splunk Observability Cloud accounts are in regions not listed above, cross-region PrivateLink is not supported. In such cases, you should either: @@ -365,9 +275,9 @@ To verify your AWS Account ID has been allowed, follow these steps: 1. Log in to the AWS Management Console, and open the :guilabel:`Amazon VPC service` in the specific region where you intend to set up AWS PrivateLink. -2. On the left navigation pane, select :guilabel:`Endpoints`. +2. On the left navigation pane, select :guilabel:`PrivateLink and Lattice`. -3. Select :guilabel:`Endpoint`, and then :guilabel:`Other endpoint services`. +3. Select :guilabel:`PrivateLink and Lattice > Endpoints`, and select endpoint services that use NLBs and GWLBs. 4. Enter and verify the service name based on the AWS region where you're configuring the VPC endpoint. Identify the appropriate service name using the :ref:`AWS PrivateLink service names table `. @@ -385,7 +295,7 @@ To create a VPC endpoint, follow these steps: 2. On the left navigation pane, select :guilabel:`Endpoints`. -3. Select :guilabel:`Create Endpoint`, and then :guilabel:`Other endpoint` services. +3. Select :guilabel:`Create Endpoint`, and then select endpoint services that use NLBs and GWLBs. 4. Enter and verify the service name based on the AWS region where you're configuring the VPC endpoint. Identify the appropriate service name using the :ref:`AWS PrivateLink service names table `. From d51f165ac77323769b9981edf4953d51c8e054d5 Mon Sep 17 00:00:00 2001 From: Anna Urbiztondo Date: Wed, 21 May 2025 14:27:51 +0200 Subject: [PATCH 078/100] Fix --- gdi/private-connectivity/aws-privatelink.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gdi/private-connectivity/aws-privatelink.rst b/gdi/private-connectivity/aws-privatelink.rst index b155bc196..94a87ab60 100644 --- a/gdi/private-connectivity/aws-privatelink.rst +++ b/gdi/private-connectivity/aws-privatelink.rst @@ -293,9 +293,9 @@ To create a VPC endpoint, follow these steps: 1. Log in to the AWS Management Console, and open :guilabel:`Amazon VPC service` within the specific region where you intend to set up AWS PrivateLink. If you have a VPC peering configuration, keep in mind the destination region of VPC peering. -2. On the left navigation pane, select :guilabel:`Endpoints`. +2. On the left navigation pane, select :guilabel:`PrivateLink and Lattice`. -3. Select :guilabel:`Create Endpoint`, and then select endpoint services that use NLBs and GWLBs. +3. Select :guilabel:`PrivateLink and Lattice > Endpoints`, and select endpoint services that use NLBs and GWLBs. 4. Enter and verify the service name based on the AWS region where you're configuring the VPC endpoint. Identify the appropriate service name using the :ref:`AWS PrivateLink service names table `. From ec9b8b08ed9eef6c5f77cfeec5c7c8c2c6e75142 Mon Sep 17 00:00:00 2001 From: ada Date: Wed, 21 May 2025 15:06:55 -0700 Subject: [PATCH 079/100] Address comments from GTM team --- gdi/get-data-in/rum/android/add-mapping-file.rst | 7 ++++--- .../rum/browser/set-up-javascript-source-mapping.rst | 8 +++++++- gdi/get-data-in/rum/ios/add-dsyms.rst | 6 ++++-- rum/error-aggregates.rst | 8 +++++--- 4 files changed, 20 insertions(+), 9 deletions(-) diff --git a/gdi/get-data-in/rum/android/add-mapping-file.rst b/gdi/get-data-in/rum/android/add-mapping-file.rst index 4db772513..a03ab491c 100644 --- a/gdi/get-data-in/rum/android/add-mapping-file.rst +++ b/gdi/get-data-in/rum/android/add-mapping-file.rst @@ -11,12 +11,13 @@ Add a mapping file When you set the ``minifyEnabled`` property to true in your Android application source code, your build process minifies, optimizes, and obfuscates the code and generates a single mapping file, ``mapping.txt``. This mapping file contains the information Splunk RUM needs to convert stack traces containing obfuscated classes and filenames back into a human readable form. This conversion is called deobfuscation in Android. +In order to associate a specific mapping file with a specific application build, Splunk RUM compares the ``applicationId`` and ``versionCode`` properties of the application to the parameters that you specify for the mapping file upload. You specify these parameters either as ``--app-id`` and ``--version-code`` in the ``splunk-rum android upload`` command or by including your application's merged or packaged manifest (``AndroidManifest.xml``), which includes these properties by default, in the ``splunk-rum android upload-with-manifest`` command. - .. note:: - Make sure that the mapping file you upload to Splunk RUM matches the binary you deploy to production. To ensure this, the best practice is to integrate the ``splunk-rum`` usage into your CI pipeline so that whenever you re-build your Android application, you also re-upload its mapping file. +.. note:: + Splunk recommends that you follow the steps on this page to upload your mapping files to Splunk RUM before you distribute corresponding binaries. To ensure that the mapping files you upload to Splunk RUM match the binaries you deploy to production, the best practice is to integrate the ``splunk-rum`` commands below into your CI pipeline so that whenever you re-build your Android application, you automatically re-upload its mapping file. Alternatively, you can :ref:`upload source maps on demand`. -In order to associate a specific mapping file with a specific application build, Splunk RUM compares the ``applicationId`` and ``versionCode`` properties of the application to the parameters that you specify for the mapping file upload. You specify these parameters either as ``--app-id`` and ``--version-code`` in the ``splunk-rum android upload`` command or by including your application's merged or packaged manifest (``AndroidManifest.xml``), which includes these properties by default, in the ``splunk-rum android upload-with-manifest`` command. + Splunk RUM stores your mapping files permanently. You cannot delete them from Splunk RUM at this time. Prerequisites diff --git a/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst b/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst index 5a40e267b..e50547f04 100644 --- a/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst +++ b/gdi/get-data-in/rum/browser/set-up-javascript-source-mapping.rst @@ -19,10 +19,16 @@ Setting up JavaScript source mapping involves these steps: * Deploying your minified files to your production environment. +.. note:: + Splunk recommends that you follow the steps on this page to upload your source maps to Splunk RUM before you distribute corresponding binaries. To ensure this, the best practice is to integrate these steps into your CI pipeline so that whenever you build your application, your pipeline automatically uploads the corresponding source maps to Splunk RUM. Alternatively, you can :ref:`upload source maps on demand`. + + Splunk RUM stores your source maps permanently. You cannot delete them from Splunk RUM at this time. + + Prerequisites ===================================================================== -* Update your browser RUM agent to v0.19.2 or later. Otherwise, Splunk RUM can't symbolicate stack traces from browser apps. +* Update your browser RUM agent (``splunk-otel-web.js``) to v0.20.2 or later. Otherwise, Splunk RUM can't symbolicate stack traces from browser apps. * :ref:`Install the splunk-rum CLI`. diff --git a/gdi/get-data-in/rum/ios/add-dsyms.rst b/gdi/get-data-in/rum/ios/add-dsyms.rst index e557c209a..3fcf14bf4 100644 --- a/gdi/get-data-in/rum/ios/add-dsyms.rst +++ b/gdi/get-data-in/rum/ios/add-dsyms.rst @@ -14,7 +14,7 @@ When you build your iOS application in release mode, your build process generate The ``splunk-rum`` CLI compresses dSYM directories into ``.zip`` files for you and uploads them. When you upload a zipped dSYM to Splunk RUM, you enable Splunk RUM to symbolicate the debug symbols contained within that dSYM. This in turn enables you to view stack traces with the names of functions and offsets into those functions to help you identify the line of code that was executing when the application crashed. -You can upload dSYMs from your main application code and from third-party frameworks, but not from system libraries. Splunk RUM does not yet support the symbolication of stack frames for system libraries. +You can upload dSYMs from your main application code and from third-party frameworks. Splunk RUM does not yet support the symbolication of stack frames for system libraries. Prerequisites @@ -48,7 +48,9 @@ Upload dSYMs To upload dSYMs use the ``splunk-rum`` CLI as follows. .. note:: - Splunk recommends that you upload dSYMs to Splunk RUM before you distribute corresponding binaries. To ensure this, the best practice is to integrate the ``splunk-rum`` CLI into your CI pipeline so that whenever you archive your iOS application, your pipeline uploads the corresponding dSYMs to Splunk RUM. + Splunk recommends that you upload dSYMs to Splunk RUM before you distribute corresponding binaries. To ensure this, the best practice is to integrate the following ``splunk-rum`` commands into your CI pipeline so that whenever you archive your iOS application, your pipeline automatically uploads the corresponding dSYMs to Splunk RUM. Alternatively, you can :ref:`upload dSYMs on demand`. + + Splunk RUM stores your dSYMs permanently. You cannot delete them from Splunk RUM at this time. #. Upload your application's dSYMs: diff --git a/rum/error-aggregates.rst b/rum/error-aggregates.rst index 4b23b6242..9c9afcb03 100644 --- a/rum/error-aggregates.rst +++ b/rum/error-aggregates.rst @@ -94,10 +94,11 @@ To learn more about Tag Spotlight, see: Connect source files ------------------------------------------------------------------------------------------ -The information in most raw crash stack traces is not fully human-readable. To make a stack trace readable, you must provide platform-specific mapping information that translates that stack trace into human-readable form: +The information in most raw crash stack traces is not fully human-readable. To make a stack trace readable, you must provide platform-specific mapping information that translates that stack trace into human-readable form. You can either upload mapping information now ("on-demand”) or at the time that you instrument your mobile application: + +* To upload mapping files now, select :guilabel:`Add dSYMs` for iOS applications or :guilabel:`Add a mapping file` for Android applications on this dashboard. * To upload mapping files at instrumentation time, see :ref:`add-dsyms` for iOS applications or :ref:`add-mapping-file` for Android applications. -* To upload mapping files using the widget on this dashboard, select :guilabel:`Add dSYMs` for iOS applications or :guilabel:`Add a mapping file` for Android applications. @@ -115,13 +116,14 @@ To see errors from a specific browser application: -.. _browser-connect-source-files: +.. _browser-connect-source-maps: Upload source maps for readable stack traces ------------------------------------------------------------------------------------------ The information in most raw stack traces is not fully human readable. To make your raw stack traces easier for you to read, you need to provide source maps that correspond to this browser application. Source maps enable Splunk RUM to translate raw stack traces back into a human-readable form. You can either upload source maps now ("on-demand”) or at the time that you instrument your browser application: + * To upload source maps now, select :guilabel:`Upload` on this dashboard. * To upload source maps at instrumentation time, see :ref:`set-up-javascript-source-mapping`. From e95c7c965d2dd424fc3bb43ea7a623609d2468ac Mon Sep 17 00:00:00 2001 From: Anna Urbiztondo Date: Thu, 22 May 2025 12:33:58 +0200 Subject: [PATCH 080/100] Updates --- gdi/private-connectivity/aws-privatelink.rst | 128 ++++++++++--------- 1 file changed, 68 insertions(+), 60 deletions(-) diff --git a/gdi/private-connectivity/aws-privatelink.rst b/gdi/private-connectivity/aws-privatelink.rst index 94a87ab60..4dc866d09 100644 --- a/gdi/private-connectivity/aws-privatelink.rst +++ b/gdi/private-connectivity/aws-privatelink.rst @@ -28,59 +28,12 @@ To connect Splunk Observability Cloud to AWS using AWS PrivateLink, you need the Connect different accounts within or across regions ============================================================== -Connect different accounts in the same region using AWS PrivateLink ----------------------------------------------------------------------------------------------------- - You can use AWS PrivateLink to connect different accounts in the same AWS region. The following diagram shows an overview of how AWS PrivateLink for Splunk Observability Cloud works: .. image:: /_images/gdi/AWS_PL_region1.png :width: 80% :alt: AWS Private Link schema. -Connect different accounts across different regions using AWS PrivateLink ----------------------------------------------------------------------------------------------------- - -You can also connect different accounts from different regions with AWS PrivateLink as displayed in the image: - -.. image:: /_images/gdi/AWS_PL_region2.png - :width: 80% - :alt: AWS Private Link schema. - -The following regions are supported: - -* US East (N. Virginia) ``us-east-1`` -* US East (Ohio) ``us-east-2`` -* US West (N. California) ``us-west-1`` -* US West (Oregon) ``us-west-2`` -* Africa (Cape Town) ``af-south-1`` -* Asia Pacific (Hong Kong) ``ap-east-1`` -* Asia Pacific (Hyderabad) ``ap-south-2`` -* Asia Pacific (Jakarta) ``ap-southeast-3`` -* Asia Pacific (Melbourne) ``ap-southeast-4`` -* Asia Pacific (Mumbai) ``ap-south-1`` -* Asia Pacific (Osaka) ``ap-northeast-3`` -* Asia Pacific (Seoul) ``ap-northeast-2`` -* Asia Pacific (Singapore) ``ap-southeast-1`` -* Asia Pacific (Sydney) ``ap-southeast-2`` -* Asia Pacific (Tokyo) ``ap-northeast-1`` -* Canada (Central) ``ca-central-1`` -* Canada West (Calgary) ``ca-west-1`` -* Europe (Frankfurt) ``eu-central-1`` -* Europe (Zurich) ``eu-central-2`` -* Europe (Ireland) ``eu-west-1`` -* Europe (London) ``eu-west-2`` -* Europe (Paris) ``eu-west-3`` -* Europe (Milan) ``eu-south-1`` -* Europe (Stockholm) ``eu-north-1`` -* Middle East (Bahrain) ``me-south-1`` -* Middle East (UAE) ``me-central-1`` -* South America (São Paulo) ``sa-east-1`` - -If your workloads or Splunk Observability Cloud accounts are in regions not listed above, cross-region PrivateLink is not supported. In such cases, you should either: - -* Use PrivateLink within the same AWS region. -* Set up VPC peering. - .. _aws-privatelink-endpoint-types: AWS PrivateLink types of endpoint @@ -254,7 +207,39 @@ Reach out to Splunk Customer Support with the following information to include y * AWS region - * If you're connecting between two regions you need to provide both the source region (where your workloads are hosted) and the target account region (where your Splunk Observability Cloud account is located). + * Same region connectivity: If you're connecting between two regions you need to provide both the source region (where your workloads are hosted) and the target account region (where your Splunk Observability Cloud account is located). + + * Cross-region connectivity: If you're connecting between two regions you need to provide both the source (or customer) region and the target (or Observability Cloud account) region. The following regions are supported: + + * US East (N. Virginia) ``us-east-1`` + * US East (Ohio) ``us-east-2`` + * US West (N. California) ``us-west-1`` + * US West (Oregon) ``us-west-2`` + * Africa (Cape Town) ``af-south-1`` + * Asia Pacific (Hong Kong) ``ap-east-1`` + * Asia Pacific (Hyderabad) ``ap-south-2`` + * Asia Pacific (Jakarta) ``ap-southeast-3`` + * Asia Pacific (Melbourne) ``ap-southeast-4`` + * Asia Pacific (Mumbai) ``ap-south-1`` + * Asia Pacific (Osaka) ``ap-northeast-3`` + * Asia Pacific (Seoul) ``ap-northeast-2`` + * Asia Pacific (Singapore) ``ap-southeast-1`` + * Asia Pacific (Sydney) ``ap-southeast-2`` + * Asia Pacific (Tokyo) ``ap-northeast-1`` + * Canada (Central) ``ca-central-1`` + * Canada West (Calgary) ``ca-west-1`` + * Europe (Frankfurt) ``eu-central-1`` + * Europe (Zurich) ``eu-central-2`` + * Europe (Ireland) ``eu-west-1`` + * Europe (London) ``eu-west-2`` + * Europe (Paris) ``eu-west-3`` + * Europe (Milan) ``eu-south-1`` + * Europe (Stockholm) ``eu-north-1`` + * Middle East (Bahrain) ``me-south-1`` + * Middle East (UAE) ``me-central-1`` + * South America (São Paulo) ``sa-east-1`` + + .. note:: If your workloads or Splunk Observability Cloud accounts are in regions not listed above, cross-region PrivateLink is not supported. In such cases, you should either use PrivateLink within the same AWS region or set up VPC peering. * Endpoint type @@ -275,13 +260,24 @@ To verify your AWS Account ID has been allowed, follow these steps: 1. Log in to the AWS Management Console, and open the :guilabel:`Amazon VPC service` in the specific region where you intend to set up AWS PrivateLink. -2. On the left navigation pane, select :guilabel:`PrivateLink and Lattice`. +2. On the left navigation pane, select :guilabel:`PrivateLink and Lattice > Endpoints`, and select endpoint services that use NLBs and GWLBs. -3. Select :guilabel:`PrivateLink and Lattice > Endpoints`, and select endpoint services that use NLBs and GWLBs. +3. Enable PrivateLink: -4. Enter and verify the service name based on the AWS region where you're configuring the VPC endpoint. Identify the appropriate service name using the :ref:`AWS PrivateLink service names table `. + * Same region connectivity: + + 1. Enter and verify the service name based on the AWS region where you're configuring the VPC endpoint. + 2. Identify the appropriate service name using the :ref:`AWS PrivateLink service names table `. + + * Cross-region connectivity: + + 1. Sepcify service name from the :ref:`AWS PrivateLink service names table `. + 2. Enable Cross Region endpoint checkbox and select the AWS region of the above selected service. + +4. Ensure the service name is accurate by selecting :strong:`Verify Service`. * If you see the "Service name verified" message, proceed with :ref:`aws-privatelink-step3`. + * If you see the "Service name could not be verified" error message, your account ID is not yet allowed for the given service name. Reach out to Splunk Customer Support to check the status of your request from :ref:`aws-privatelink-step1`. .. _aws-privatelink-step3: @@ -293,19 +289,31 @@ To create a VPC endpoint, follow these steps: 1. Log in to the AWS Management Console, and open :guilabel:`Amazon VPC service` within the specific region where you intend to set up AWS PrivateLink. If you have a VPC peering configuration, keep in mind the destination region of VPC peering. -2. On the left navigation pane, select :guilabel:`PrivateLink and Lattice`. +2. On the left navigation pane, select :guilabel:`PrivateLink and Lattice > Endpoints`, and select endpoint services that use NLBs and GWLBs. -3. Select :guilabel:`PrivateLink and Lattice > Endpoints`, and select endpoint services that use NLBs and GWLBs. +3. Enable PrivateLink: -4. Enter and verify the service name based on the AWS region where you're configuring the VPC endpoint. Identify the appropriate service name using the :ref:`AWS PrivateLink service names table `. + * Same region connectivity: + + 1. Enter and verify the service name based on the AWS region where you're configuring the VPC endpoint. + 2. Identify the appropriate service name using the :ref:`AWS PrivateLink service names table `. + + * Cross-region connectivity: + + 1. Sepcify service name from the :ref:`AWS PrivateLink service names table `. + 2. Enable Cross Region endpoint checkbox and select the AWS region of the above selected service. -5. Select the VPC in which you want to create the endpoint. +4. Ensure the service name is accurate by selecting :strong:`Verify Service`. + + * If you see the "Service name verified" message, proceed with :ref:`aws-privatelink-step3`. + + * If you see the "Service name could not be verified" error message, your account ID is not yet allowed for the given service name. Reach out to Splunk Customer Support to check the status of your request from :ref:`aws-privatelink-step1`. -6. Select the subnet or subnets within the VPC where the endpoint will reside. Make sure to select the subnets from the appropriate availability zones. +5. Select the subnet or subnets within the VPC where the endpoint will reside. Make sure to select the subnets from the appropriate availability zones. -7. Set the IP address type to ``IPv4``. +6. Set the IP address type to ``IPv4``. -8. Specify the security group controlling traffic for the endpoint. Set the outbound rule to HTTPS protocol and the ``443`` port. +7. Specify the security group controlling traffic for the endpoint. Set the outbound rule to HTTPS protocol and the ``443`` port. The following image shows the security options for AWS PrivateLink: @@ -313,9 +321,9 @@ To create a VPC endpoint, follow these steps: :width: 80% :alt: Specify security groups that control traffic. -9. Review the configuration details and select :guilabel:`Create Endpoint`. +8. Review the configuration details and select :guilabel:`Create Endpoint`. -10. Before proceeding to :ref:`aws-privatelink-step4`, confirm with Splunk Customer Support that you created the endpoint, that the service name has been verified, and that Support has activated the endpoint urls. +9. Before proceeding to :ref:`aws-privatelink-step4`, confirm with Splunk Customer Support that you created the endpoint, that the service name has been verified, and that Support has activated the endpoint urls. .. _aws-privatelink-step4: From f964a362b936d91256f8d06aa8c8945c6ae28937 Mon Sep 17 00:00:00 2001 From: Anna Urbiztondo Date: Thu, 22 May 2025 15:35:47 +0200 Subject: [PATCH 081/100] Feedback --- _images/gdi/AWS_PL_region3.png | Bin 0 -> 62306 bytes gdi/private-connectivity/aws-privatelink.rst | 14 +++++++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) create mode 100644 _images/gdi/AWS_PL_region3.png diff --git a/_images/gdi/AWS_PL_region3.png b/_images/gdi/AWS_PL_region3.png new file mode 100644 index 0000000000000000000000000000000000000000..0c1043755c71ebe8ed45201003b687262de17860 GIT binary patch literal 62306 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≈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 yo>W*<_3?rtvJyikMnGt Endpoints`, and select endpoint services that use NLBs and GWLBs. -3. Enable PrivateLink: +3. Create the endpoint: * Same region connectivity: @@ -274,6 +274,10 @@ To verify your AWS Account ID has been allowed, follow these steps: 1. Sepcify service name from the :ref:`AWS PrivateLink service names table `. 2. Enable Cross Region endpoint checkbox and select the AWS region of the above selected service. +.. image:: /_images/gdi/AWS_PL_region3.png + :width: 80% + :alt: Verify account. + 4. Ensure the service name is accurate by selecting :strong:`Verify Service`. * If you see the "Service name verified" message, proceed with :ref:`aws-privatelink-step3`. @@ -291,7 +295,7 @@ To create a VPC endpoint, follow these steps: 2. On the left navigation pane, select :guilabel:`PrivateLink and Lattice > Endpoints`, and select endpoint services that use NLBs and GWLBs. -3. Enable PrivateLink: +3. Create the endpoint: * Same region connectivity: @@ -303,6 +307,10 @@ To create a VPC endpoint, follow these steps: 1. Sepcify service name from the :ref:`AWS PrivateLink service names table `. 2. Enable Cross Region endpoint checkbox and select the AWS region of the above selected service. +.. image:: /_images/gdi/AWS_PL_region3.png + :width: 80% + :alt: Verify account. + 4. Ensure the service name is accurate by selecting :strong:`Verify Service`. * If you see the "Service name verified" message, proceed with :ref:`aws-privatelink-step3`. From c787d4fa445ec808a2c1d1a45affd48bba40de31 Mon Sep 17 00:00:00 2001 From: pkopta-splunk Date: Fri, 23 May 2025 14:29:19 +0200 Subject: [PATCH 082/100] service.name and deployment.environment info added --- .../go/instrumentation/instrument-go-application.rst | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/gdi/get-data-in/application/go/instrumentation/instrument-go-application.rst b/gdi/get-data-in/application/go/instrumentation/instrument-go-application.rst index c2e147cad..f64679f26 100644 --- a/gdi/get-data-in/application/go/instrumentation/instrument-go-application.rst +++ b/gdi/get-data-in/application/go/instrumentation/instrument-go-application.rst @@ -169,7 +169,9 @@ The following example shows how to update a deployment to expose environment var Send data directly to Splunk Observability Cloud ================================================================== -By default, all telemetry is sent to the local instance of the Splunk Distribution of OpenTelemetry Collector. +By default, all telemetry is sent to the local OpenTelemetry Collector before being forwarded to Splunk Observability Cloud. +It is also possible to send data directly to Splunk Observability Cloud without using the OpenTelemetry Collector. +.. note:: Sending data directly to Splunk Observability Cloud is supported only for traces and metrics. Logs cannot be sent using this method. If you need to send data directly to Splunk Observability Cloud, set the following environment variables: From 85ea55062d503f47136e3622cc2f2562a8c56d78 Mon Sep 17 00:00:00 2001 From: pkopta-splunk Date: Fri, 23 May 2025 14:32:34 +0200 Subject: [PATCH 083/100] update --- .../go/configuration/advanced-go-otel-configuration.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gdi/get-data-in/application/go/configuration/advanced-go-otel-configuration.rst b/gdi/get-data-in/application/go/configuration/advanced-go-otel-configuration.rst index 072539ecd..df3faeaa0 100644 --- a/gdi/get-data-in/application/go/configuration/advanced-go-otel-configuration.rst +++ b/gdi/get-data-in/application/go/configuration/advanced-go-otel-configuration.rst @@ -105,7 +105,7 @@ The following settings control trace exporters and their endpoints: * - ``OTEL_METRICS_EXPORTER`` - The metrics exporter to use. The default value is ``otlp``. Accepted values are ``otlp`` and ``none``. Setting ``none`` deactivates metric exports. * - ``OTEL_LOGS_EXPORTER`` - - The logs exporter to use. The default value is ``otlp``. Accepted values are ``otlp`` and ``none``. Setting ``none`` deactivates logs exports. + - The logs exporter to use. The default value is ``none``. Accepted values are ``otlp`` and ``none``. Setting ``none`` deactivates logs exports. * - ``OTEL_METRIC_EXPORT_INTERVAL`` - Interval, in milliseconds, between the start of two export attempts. The default value is ``60000``. * - ``OTEL_METRIC_EXPORT_TIMEOUT`` From 073838486921c4eb0c6168613a4fb359578463dc Mon Sep 17 00:00:00 2001 From: Brianne Hillmer Date: Fri, 23 May 2025 10:17:09 -0600 Subject: [PATCH 084/100] fix indentation of code samples --- .../instrumentation/instrument-dotnet-application.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gdi/get-data-in/application/otel-dotnet/instrumentation/instrument-dotnet-application.rst b/gdi/get-data-in/application/otel-dotnet/instrumentation/instrument-dotnet-application.rst index 11ca81563..c12ff745d 100644 --- a/gdi/get-data-in/application/otel-dotnet/instrumentation/instrument-dotnet-application.rst +++ b/gdi/get-data-in/application/otel-dotnet/instrumentation/instrument-dotnet-application.rst @@ -419,19 +419,19 @@ To deploy the .NET zero-code instrumentation in Kubernetes, follow these steps: .. code-block:: shell - splunk-launch.sh dotnet . + splunk-launch.sh dotnet . **For Windows:** .. code-block:: powershell - splunk-launch.cmd dotnet . + splunk-launch.cmd dotnet . Example: .. code-block:: docker - ENTRYPOINT ["./splunk-launch.sh", "dotnet", "myapp.dll"] + ENTRYPOINT ["./splunk-launch.sh", "dotnet", "myapp.dll"] #. Configure the Kubernetes Downward API to expose environment variables to Kubernetes resources. The following example demonstrates how to update a deployment to expose environment variables by adding the agent configuration under the ``.spec.template.spec.containers.env`` section: From 125a548ee69bef961839a3a4c1241036a1730325 Mon Sep 17 00:00:00 2001 From: ada Date: Fri, 23 May 2025 12:20:20 -0700 Subject: [PATCH 085/100] Address comments from Santosh --- gdi/get-data-in/rum/rum-instrumentation.rst | 2 +- rum/error-aggregates.rst | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/gdi/get-data-in/rum/rum-instrumentation.rst b/gdi/get-data-in/rum/rum-instrumentation.rst index efbf9f6b7..140acf82c 100644 --- a/gdi/get-data-in/rum/rum-instrumentation.rst +++ b/gdi/get-data-in/rum/rum-instrumentation.rst @@ -60,7 +60,7 @@ You can instrument the following types of application: Install the splunk-rum CLI ===================================================================== -The ``splunk-rum`` CLI is a tool for enabling automatic source mapping of your browser, iOS, and Android applications at instrumentation time. Although you can prepare and upload source mapping information "on demand" manually through the UI, the best practice is to integrate the use of this CLI into the CI pipeline of your application. By integrating ``splunk-rum`` commands into your CI pipeline, you automate the steps you need to take to enable Splunk RUM to convert stack traces from your browser and mobile applications into human-readable form, and you ensure that this source mapping information always matches your production binaries. +The ``splunk-rum`` CLI is a tool for enabling automatic source mapping of your browser, iOS, and Android applications at instrumentation time. Although you can upload source mapping information "on demand" manually through the UI, the best practice is to integrate the use of this CLI into the CI pipeline of your application. By integrating ``splunk-rum`` commands into your CI pipeline, you automate the steps you need to take to enable Splunk RUM to convert stack traces from your browser and mobile applications into human-readable form, and you ensure that this source mapping information always matches your production binaries. Prerequisites diff --git a/rum/error-aggregates.rst b/rum/error-aggregates.rst index 9c9afcb03..05371172a 100644 --- a/rum/error-aggregates.rst +++ b/rum/error-aggregates.rst @@ -38,7 +38,7 @@ About the error ID Splunk RUM groups errors based on an error ID (labeled :guilabel:`ErrorID`) that it computes for each error. Its computation is based on a hash of the error's stack trace, the error's message, and the error's type. It computes each error ID only once. The stack trace component of the hash is different depending on whether the stack trace is symbolicated or not. Therefore, the computed error ID, and hence the grouping of errors, is different depending on when you upload source maps: * If you never upload source maps, the error IDs are based on the unreadable stack traces. -* If you upload source maps at instrumentation time, the error IDs are based on the readable stack traces. +* If you upload source maps at the time that you update your application with a new version, the error IDs are based on the readable stack traces. * If you upload source maps "on-demand" (in other words, after Splunk RUM has already ingested some errors) through the UI, the error IDs of existing errors are unchanged (still based on unreadable stack traces) but the error IDs, and hence error groupings, of future errors will be different (based on readable stack traces). If you're looking at a large enough time range to include errors ingested before and after you uploaded your source map, you will see that your application's errors are grouped differently, and the :guilabel:`Error summary` displays a message to alert you to this fact. The message varies depending on the application's platform, but is something like :guilabel:`..older instances of this crash remain in their original groupings, but newer instances are grouped based on the deobfuscation now available`. @@ -94,11 +94,11 @@ To learn more about Tag Spotlight, see: Connect source files ------------------------------------------------------------------------------------------ -The information in most raw crash stack traces is not fully human-readable. To make a stack trace readable, you must provide platform-specific mapping information that translates that stack trace into human-readable form. You can either upload mapping information now ("on-demand”) or at the time that you instrument your mobile application: +The information in most raw crash stack traces is not fully human-readable. To make a stack trace readable, you must provide platform-specific mapping information that translates that stack trace into human-readable form. You can either upload mapping information now ("on-demand”) or as part of your application's CI pipeline: * To upload mapping files now, select :guilabel:`Add dSYMs` for iOS applications or :guilabel:`Add a mapping file` for Android applications on this dashboard. -* To upload mapping files at instrumentation time, see :ref:`add-dsyms` for iOS applications or :ref:`add-mapping-file` for Android applications. +* To upload mapping files as part of your application's CI pipeline, see :ref:`add-dsyms` for iOS applications or :ref:`add-mapping-file` for Android applications. @@ -121,11 +121,11 @@ To see errors from a specific browser application: Upload source maps for readable stack traces ------------------------------------------------------------------------------------------ -The information in most raw stack traces is not fully human readable. To make your raw stack traces easier for you to read, you need to provide source maps that correspond to this browser application. Source maps enable Splunk RUM to translate raw stack traces back into a human-readable form. You can either upload source maps now ("on-demand”) or at the time that you instrument your browser application: +The information in most raw stack traces is not fully human readable. To make your raw stack traces easier for you to read, you need to provide source maps that correspond to this browser application. Source maps enable Splunk RUM to translate raw stack traces back into a human-readable form. You can either upload source maps now ("on-demand”) or as part of your application's CI pipeline: * To upload source maps now, select :guilabel:`Upload` on this dashboard. -* To upload source maps at instrumentation time, see :ref:`set-up-javascript-source-mapping`. +* To upload source maps as part of your application's CI pipeline, see :ref:`set-up-javascript-source-mapping`. Find the top JavaScript errors across your applications in Tag Spotlight From f6d14bdfe81ff044abfb97b7ad372e639481316c Mon Sep 17 00:00:00 2001 From: Joe Catera Date: Fri, 23 May 2025 13:46:55 -0700 Subject: [PATCH 086/100] Whited out some usernames in a screenshot. --- _images/logs/CreateUser.png | Bin 86135 -> 78278 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/_images/logs/CreateUser.png b/_images/logs/CreateUser.png index ef285465a2ea54ecd4fc7ad248041eec2ed922cb..22750b1b930066437356a089d7757d76a36c332e 100644 GIT binary patch delta 30466 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 B=K%l! From 18dedfe05ce8ad4f3b27ba236af7013cd0e1b302 Mon Sep 17 00:00:00 2001 From: Joe Catera Date: Fri, 23 May 2025 16:15:34 -0700 Subject: [PATCH 087/100] Made a little improvement. --- _images/logs/CreateUser.png | Bin 78278 -> 80599 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/_images/logs/CreateUser.png b/_images/logs/CreateUser.png index 22750b1b930066437356a089d7757d76a36c332e..ad6779a81175edb2c5fa23baac792cb86d1b037b 100644 GIT binary patch literal 80599 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