From d2b6be6b4dd0af78de2b99273868eabed430d5b4 Mon Sep 17 00:00:00 2001 From: cg-tw <83637804+cg-tw@users.noreply.github.com> Date: Thu, 2 Apr 2026 12:04:30 +0200 Subject: [PATCH 01/20] Rework CXM ToC (2) --- cxm/sidebarsCxm.js | 197 ++++++++++++++++++++++----------------------- 1 file changed, 96 insertions(+), 101 deletions(-) diff --git a/cxm/sidebarsCxm.js b/cxm/sidebarsCxm.js index 427b7a85e3d9..c35fab316470 100644 --- a/cxm/sidebarsCxm.js +++ b/cxm/sidebarsCxm.js @@ -2,138 +2,69 @@ module.exports = { cxm: [ { type: 'category', - label: 'Getting started with Centreon Experience Monitoring', + label: 'What can I do with Centreon Experience Monitoring?', link: { type: "doc", id: "getting-started/welcome" }, items: [ - { type: 'doc', id: 'getting-started/cxm-solution' }, - { type: 'doc', id: 'getting-started/contact-support' }, + { type: 'doc', id: 'getting-started/cxm-solution' }, { type: 'doc', id: 'getting-started/synthetic-monitoring' }, { type: 'doc', id: 'getting-started/real-user-monitoring' }, { type: 'doc', id: 'getting-started/system-view' }, { type: 'doc', id: 'getting-started/business-view' }, { type: 'doc', id: 'getting-started/load-tests' }, - { type: 'doc', id: 'getting-started/dashboards' }, ], }, { type: 'category', - label: 'Installation', + label: 'Setting up Experience Monitoring', link: { type: 'generated-index', }, items: [ { type: 'doc', id: 'installation/installation-checklist' }, - { type: 'doc', id: 'installation/cxm-ip-addresses' }, - { type: 'doc', id: 'installation/real-user-monitoring-installation' }, - { type: 'doc', id: 'installation/monitor-production-events' }, - { - collapsed: true, - type: 'category', - label: 'Servers and middleware', - link: { - type: 'generated-index', - }, - items: [ - { type: 'doc', id: 'installation/servers/install-system-agents' }, - { type: 'doc', id: 'installation/servers/cloud-configuration-of-agents' }, - { type: 'doc', id: 'installation/servers/add-advanced-metrics' }, - { type: 'doc', id: 'installation/servers/install-php-magento-orocommerce-profiler' }, - ], - }, + ], }, { type: 'category', - label: 'Configuration', + label: 'Getting to know Experience Monitoring', link: { type: 'generated-index', }, items: [ { type: 'doc', id: 'configuration/configuration-checklist' }, - { type: 'doc', id: 'configuration/manage-users-and-rights' }, - { type: 'doc', id: 'configuration/configure-digital-sobriety' }, - { type: 'doc', id: 'configuration/configure-google-analytics' }, - { type: 'doc', id: 'configuration/receive-and-configure-alerts' }, - { - collapsed: true, - type: 'category', - label: 'User journey', - link: { - type: 'generated-index', - }, - items: [ - { type: 'doc', id: 'configuration/user-journey/create-a-scenario' }, - { type: 'doc', id: 'configuration/user-journey/user-journey-best-practices' }, - ], - }, - { - collapsed: true, - type: 'category', - label: 'Advanced configuration', - link: { - type: 'generated-index', - }, - items: [ - { - type: 'doc', - id: 'configuration/advanced-configuration/enable-disable-scenario-or-alert-via-api', - }, - ], - }, + ], }, { type: 'category', - label: 'Performance analysis', + label: 'Simulate user journeys: Synthetic Monitoring (STM)', link: { type: 'generated-index', }, items: [ { type: 'doc', id: 'performance-analysis/network-tab-indicators' }, - { type: 'doc', id: 'performance-analysis/system-tab-indicators' }, - { type: 'doc', id: 'performance-analysis/speed-up-website-with-applications-or-server-configuration' }, - { type: 'doc', id: 'performance-analysis/errors-and-unavailability-front-end' }, - { - collapsed: true, - type: 'category', - label: 'Metric overview', - link: { - type: 'doc', - id: 'performance-analysis/metrics/overview-of-metrics', - }, - items: [ - { type: 'doc', id: 'performance-analysis/metrics/hero-time' }, - { type: 'doc', id: 'performance-analysis/metrics/time-to-first-byte' }, - { type: 'doc', id: 'performance-analysis/metrics/speed-index' }, - { type: 'doc', id: 'performance-analysis/metrics/on-load' }, - { type: 'doc', id: 'performance-analysis/metrics/largest-contentful-paint' }, - { type: 'doc', id: 'performance-analysis/metrics/total-blocking-time' }, - { type: 'doc', id: 'performance-analysis/metrics/cumulative-layout-shift' }, - ], - }, - { - collapsed: true, - type: 'category', - label: 'Basic actions', - link: { - type: 'generated-index', - }, - items: [ - { type: 'doc', id: 'performance-analysis/basic-actions/navigate-in-cxm' }, - { type: 'doc', id: 'performance-analysis/basic-actions/how-alerts-work' }, - { type: 'doc', id: 'performance-analysis/basic-actions/gray-areas-on-charts' }, - { type: 'doc', id: 'performance-analysis/basic-actions/event-tracking' }, - ], - }, + ], }, { collapsed: true, type: 'category', - label: 'Digital sobriety', + label: 'Analyze user experience: Real User Monitoring (RUM)', + link: { + type: 'generated-index', + }, + items: [ + { type: 'doc', id: 'digital-sobriety/carbon-footprint-evaluation-and-digital-sobriety' }, + + ], + }, + { + collapsed: true, + type: 'category', + label: "Evaluate a site's digital sobriety", link: { type: 'generated-index', }, @@ -146,25 +77,89 @@ module.exports = { { collapsed: true, type: 'category', - label: 'How-to articles', + label: "Analyze a site's business data (Google Analytics/Matomo)", link: { type: 'generated-index', }, items: [ { type: 'doc', id: 'how-to-articles/unable-to-connect' }, - { type: 'doc', id: 'how-to-articles/meaning-of-colors-in-graphs' }, - { type: 'doc', id: 'how-to-articles/seo-module' }, - { type: 'doc', id: 'how-to-articles/measurement-interval' }, - { type: 'doc', id: 'how-to-articles/cxm-probes-in-google-analytics' }, - { type: 'doc', id: 'how-to-articles/faq' }, - { type: 'doc', id: 'how-to-articles/password-reset' }, - { type: 'doc', id: 'how-to-articles/using-charts' }, - { type: 'doc', id: 'how-to-articles/user-journey-screen' }, - { type: 'doc', id: 'how-to-articles/rum-blocked-by-csp' }, + + ], + }, + { + collapsed: true, + type: 'category', + label: 'Monitor the health of my host server', + link: { + type: 'generated-index', + }, + items: [ + { type: 'doc', id: 'digital-sobriety/carbon-footprint-evaluation-and-digital-sobriety' }, + + ], + }, + { + collapsed: true, + type: 'category', + label: "Check a site’s network performance", + link: { + type: 'generated-index', + }, + items: [ + { type: 'doc', id: 'digital-sobriety/carbon-footprint-evaluation-and-digital-sobriety' }, + + ], + }, + { + collapsed: true, + type: 'category', + label: 'Run a load test', + link: { + type: 'generated-index', + }, + items: [ + { type: 'doc', id: 'digital-sobriety/carbon-footprint-evaluation-and-digital-sobriety' }, + + ], + }, + { + collapsed: true, + type: 'category', + label: 'Dashboards and exports', + link: { + type: 'generated-index', + }, + items: [ + { type: 'doc', id: 'digital-sobriety/carbon-footprint-evaluation-and-digital-sobriety' }, + + ], + }, + { + collapsed: true, + type: 'category', + label: 'Troubleshooting', + link: { + type: 'generated-index', + }, + items: [ + { type: 'doc', id: 'digital-sobriety/carbon-footprint-evaluation-and-digital-sobriety' }, + ], }, { type: 'doc', id: 'release-notes' - } + }, + { + collapsed: true, + type: 'category', + label: 'Resources', + link: { + type: 'generated-index', + }, + items: [ + { type: 'doc', id: 'digital-sobriety/carbon-footprint-evaluation-and-digital-sobriety' }, + + ], + }, ], }; From 1e2b99203e1d8f7c8ba347aa078cf6809165c083 Mon Sep 17 00:00:00 2001 From: cg-tw <83637804+cg-tw@users.noreply.github.com> Date: Thu, 2 Apr 2026 15:44:11 +0200 Subject: [PATCH 02/20] Update --- cxm/sidebarsCxm.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/cxm/sidebarsCxm.js b/cxm/sidebarsCxm.js index c35fab316470..0c1d8bfb150f 100644 --- a/cxm/sidebarsCxm.js +++ b/cxm/sidebarsCxm.js @@ -57,8 +57,10 @@ module.exports = { type: 'generated-index', }, items: [ - { type: 'doc', id: 'digital-sobriety/carbon-footprint-evaluation-and-digital-sobriety' }, - + { type: 'doc', id: 'installation/real-user-monitoring-installation' }, + { type: 'doc', id: 'rum/rum-results' }, + { type: 'doc', id: 'rum/rum-improve' }, + { type: 'doc', id: 'how-to-articles/rum-blocked-by-csp' }, ], }, { From eed1b2996659959e3d477c4211765746b8fe3fbe Mon Sep 17 00:00:00 2001 From: cg-tw <83637804+cg-tw@users.noreply.github.com> Date: Thu, 2 Apr 2026 15:44:38 +0200 Subject: [PATCH 03/20] Add RUM files --- cxm/rum/rum-improve.md | 4 ++++ cxm/rum/rum-results.md | 4 ++++ 2 files changed, 8 insertions(+) create mode 100644 cxm/rum/rum-improve.md create mode 100644 cxm/rum/rum-results.md diff --git a/cxm/rum/rum-improve.md b/cxm/rum/rum-improve.md new file mode 100644 index 000000000000..d94750237935 --- /dev/null +++ b/cxm/rum/rum-improve.md @@ -0,0 +1,4 @@ +--- +id: rum-improve +title: Improving RUM results +--- diff --git a/cxm/rum/rum-results.md b/cxm/rum/rum-results.md new file mode 100644 index 000000000000..54d89fc6cfc7 --- /dev/null +++ b/cxm/rum/rum-results.md @@ -0,0 +1,4 @@ +--- +id: rum-results +title: Understanding RUM results +--- From 4b2965bce5c3a9f4421287e533e4bcee58adff4b Mon Sep 17 00:00:00 2001 From: cg-tw <83637804+cg-tw@users.noreply.github.com> Date: Thu, 2 Apr 2026 15:55:32 +0200 Subject: [PATCH 04/20] Add files for business data topics --- cxm/business-data/business-alerts.md | 4 ++++ cxm/business-data/business-data-results.md | 4 ++++ cxm/how-to-articles/rum-blocked-by-csp.md | 12 +++++++----- cxm/sidebarsCxm.js | 5 +++-- 4 files changed, 18 insertions(+), 7 deletions(-) create mode 100644 cxm/business-data/business-alerts.md create mode 100644 cxm/business-data/business-data-results.md diff --git a/cxm/business-data/business-alerts.md b/cxm/business-data/business-alerts.md new file mode 100644 index 000000000000..bd328be55d3f --- /dev/null +++ b/cxm/business-data/business-alerts.md @@ -0,0 +1,4 @@ +--- +id: business-alerts +title: Business alerts +--- diff --git a/cxm/business-data/business-data-results.md b/cxm/business-data/business-data-results.md new file mode 100644 index 000000000000..9fdff326254a --- /dev/null +++ b/cxm/business-data/business-data-results.md @@ -0,0 +1,4 @@ +--- +id: business-data-results +title: Understanding business data results +--- diff --git a/cxm/how-to-articles/rum-blocked-by-csp.md b/cxm/how-to-articles/rum-blocked-by-csp.md index 43518b6ad8fb..7198f3f541ff 100644 --- a/cxm/how-to-articles/rum-blocked-by-csp.md +++ b/cxm/how-to-articles/rum-blocked-by-csp.md @@ -1,11 +1,13 @@ --- id: rum-blocked-by-csp -title: A strict Content Security Policy (CSP) blocks the RUM data collection +title: Troubleshooting RUM --- +## A strict Content Security Policy (CSP) blocks the RUM data collection + In certain web environments with an enforced security policy ([Content Security Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/CSP)), the Centreon Real User Monitoring (RUM) tag may require additional configuration. The issue is rare, but can prevent RUM data from being transmitted until the Quanta domains are correctly authorized. -## Symptom - RUM data is not being transmitted +### Symptom - RUM data is not being transmitted If you have installed the Quanta RUM tag via GTM or Axeptio and you observe that: - the Quanta script loads correctly, @@ -14,7 +16,7 @@ If you have installed the Quanta RUM tag via GTM or Axeptio and you observe that Your site uses a CSP that requires an update. This behavior is completely normal in environments where the security policy is strict (banking, advanced retail, sites under WAF/CDN, etc.). -## Issue - The RUM tag is blocked by a CSP +### Issue - The RUM tag is blocked by a CSP CXM uses a script loaded from ``https://appstatic.quanta.io``, and then sends its performance metrics to ``https://rum-metrics.quanta.io``. On the large majority of sites, this works automatically, including when the tag is installed via GTM, Axeptio or another manager. However, some sites implement an advanced Content Security Policy (CSP). @@ -28,7 +30,7 @@ This is a security mechanism that precisely defines: > In Chrome DevTools, this appears as ``blocked:csp`` on the ``beacon.gif`` type request. -## Solution - Add authorizations +### Solution - Add authorizations To allow the RUM module to work while strictly respecting your security rules, simply add the two Quanta domains to the appropriate directives. @@ -49,7 +51,7 @@ Even if the current beacon passes through ``img-src``, this addition ensures com - future optimizations of the RUM API, - enforced security environments. -## CSP adjustment example +### CSP adjustment example Here is a schematic example (to be adapted to your existing configuration): diff --git a/cxm/sidebarsCxm.js b/cxm/sidebarsCxm.js index 0c1d8bfb150f..5f49cd2d02e2 100644 --- a/cxm/sidebarsCxm.js +++ b/cxm/sidebarsCxm.js @@ -84,8 +84,9 @@ module.exports = { type: 'generated-index', }, items: [ - { type: 'doc', id: 'how-to-articles/unable-to-connect' }, - + { type: 'doc', id: 'configuration/configure-google-analytics' }, + { type: 'doc', id: 'business-data/business-data-results' }, + { type: 'doc', id: 'business-data/business-alerts' }, ], }, { From 462add69b39e1200127f22660a24cb7f92fc2a9c Mon Sep 17 00:00:00 2001 From: cg-tw <83637804+cg-tw@users.noreply.github.com> Date: Mon, 13 Apr 2026 16:23:20 +0200 Subject: [PATCH 05/20] RUM --- cxm/assets/audit.png | Bin 0 -> 32226 bytes cxm/installation/installation-checklist.md | 53 ++++++++-------- .../real-user-monitoring-installation.md | 60 ++++++++---------- cxm/rum/rum-improve.md | 6 ++ cxm/rum/rum-results.md | 22 +++++++ cxm/rum/rum.md | 10 +++ cxm/sidebarsCxm.js | 3 +- 7 files changed, 94 insertions(+), 60 deletions(-) create mode 100644 cxm/assets/audit.png create mode 100644 cxm/rum/rum.md diff --git a/cxm/assets/audit.png b/cxm/assets/audit.png new file mode 100644 index 0000000000000000000000000000000000000000..4fae24e70bd2dfac22b8de5f15f827a0a80dfd4a GIT binary patch literal 32226 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 \ No newline at end of file diff --git a/cxm/installation/real-user-monitoring-installation.md b/cxm/installation/real-user-monitoring-installation.md index ab543b294c6c..62057ec3aff7 100644 --- a/cxm/installation/real-user-monitoring-installation.md +++ b/cxm/installation/real-user-monitoring-installation.md @@ -1,56 +1,52 @@ --- id: real-user-monitoring-installation -title: Install Real User Monitoring +title: Installing RUM --- -## GDPR considerations - -Although CXM uses a cookie, **no consent is required.** +Real User Monitoring (RUM) requires inserting a JavaScript tag into your site's pages. -The CNIL (French data protection authority) exempts certain cookies from requiring consent under these conditions: +## Procedure -- they have a limited purpose such as measuring performance, detecting navigation issues, optimizing technical performance or usability... -- they produce only anonymous statistics -- they are not cross-referenced with other datasets -- they are not transmitted to third parties -- they do not enable tracking a user's browsing across other websites. - -**CXM meets these conditions.** +1. To retrieve your application's RUM tag, go to **Configuration > Integrations**: -You can find CNIL's recommendations on [this page](https://www.cnil.fr/fr/cookies-et-autres-traceurs/regles/cookies-solutions-pour-les-outils-de-mesure-daudience). + ![image](../assets/installation/install-rum-1.png) -## Find the tag to insert on my site + The tag is displayed on the screen with a copy button. -Real User Monitoring (RUM) requires installing a JavaScript tag. The tag is available in the application. To retrieve it, go to **Configuration > Integrations**: + ![image](../assets/installation/install-rum-2.png) -![image](../assets/installation/install-rum-1.png) +2. Insert the tag into your site's HEAD section. The operation can be done manually by a developer, or alternatively it can be added to a tag manager such as GTM by following the procedure below. -You will then find the tag on that screen with a button to copy it easily: +3. Go to **Real User Monitoring**. You should see data appear in a matter of minutes. -![image](../assets/installation/install-rum-2.png) +### Using GTM to add a Centreon RUM tag to your pages -This tag should be inserted into the site's HEAD section. The operation can be done manually by a developer, or alternatively **it can be added to a tag manager such as GTM by following the procedure below**. +1. Create a new tag: sign in to your GTM account and select the container for your website. Click "Add a new tag." -### Using GTM to add a CXM tag to your pages +2. Configure the tag: -**1 — Create a new tag** + 1. Select "Custom HTML Tag" as the tag type. + 2. Paste the script provided into the HTML field. + 3. Ensure the script type is correctly set to "JavaScript" if required. GTM usually handles this automatically, but it's good to check. -Sign in to your GTM account and select the container for your website. Click "Add a new tag." +3. Set triggers: choose when you want the script to execute. You can apply it to all pages or to specific pages depending on your needs. Triggers allow precise control over when the script runs. -**2 — Configure the tag** +4. Save and test the tag: after configuring the tag and its triggers, save it and use GTM's preview feature to test whether the script works as expected on your site. This lets you see changes in real time without affecting real visitors. -Select "Custom HTML Tag" as the tag type. -Paste the script provided into the HTML field. -Ensure the script type is correctly set to "JavaScript" if required. GTM usually handles this automatically, but it's good to check. +5. Publish the changes: once you've checked everything works correctly, remember to publish the changes in GTM so the script is active on your live site. -**3 — Set triggers** +## GDPR considerations -Choose when you want the script to execute. You can apply it to all pages or to specific pages depending on your needs. Triggers allow precise control over when the script runs. +Although CXM uses a cookie, **no consent is required.** -**4 — Save and test the tag** +The CNIL (French data protection authority) exempts certain cookies from requiring consent under these conditions: -After configuring the tag and its triggers, save it and use GTM's preview feature to test whether the script works as expected on your site. This lets you see changes in real time without affecting real visitors. +- they have a limited purpose such as measuring performance, detecting navigation issues, optimizing technical performance or usability... +- they produce only anonymous statistics +- they are not cross-referenced with other datasets +- they are not transmitted to third parties +- they do not enable tracking a user's browsing across other websites. -**5 — Publish the changes** +**CXM meets these conditions.** -Once you've checked everything works correctly, remember to publish the changes in GTM so the script is active on your live site. +You can find CNIL's recommendations on [this page](https://www.cnil.fr/fr/cookies-et-autres-traceurs/regles/cookies-solutions-pour-les-outils-de-mesure-daudience). diff --git a/cxm/rum/rum-improve.md b/cxm/rum/rum-improve.md index d94750237935..f8a103078a7a 100644 --- a/cxm/rum/rum-improve.md +++ b/cxm/rum/rum-improve.md @@ -2,3 +2,9 @@ id: rum-improve title: Improving RUM results --- + +Centreon Experience Monitoring provides detailed audits of how to improve the performance of your site. + +To access audit pages, click the **Last recommendations** icon in the tables on the **URLs** tab (that includes the detailed page for a specific URL when you click this URL in the treemap on the **Summary & Live** tab). + +![image](../assets/audit.png) diff --git a/cxm/rum/rum-results.md b/cxm/rum/rum-results.md index 54d89fc6cfc7..6aafefc4ef2b 100644 --- a/cxm/rum/rum-results.md +++ b/cxm/rum/rum-results.md @@ -2,3 +2,25 @@ id: rum-results title: Understanding RUM results --- + +Once RUM is [configured](../installation/real-user-monitoring-installation.md), click **Real User Monitoring** in the navigation bar at the top of the screen. Click the tabs under the navigation bar to view the data you want. + +## What RUM can tell you + +[Experience monitoring metrics](../performance-analysis/metrics/overview-of-metrics.md) and digital sobriety data(../digital-sobriety/) are detailed in each tab, and presented as visuals, graphs or tables - aggregated according to different criteria. + +* **Most visited pages**: + * In the **Summary & Live** tab, a treemap shows a graphical view of your most visited pages. Clicking a URL in the treemap displays detailed data for this URL (under the table), in the **URLs** tab. + * For a detailed table of all URLs, use the **URLs** tab. + * On the **URLs** tab, check the box on the left to display charts for a specific URL or to compare data for several URLs (click the **Compare** button below the table). +* **Geographic data**: + * In the **Summary & Live** tab, you can see a map of where your users are located. Click a country to see detailed data for that country. + * Check the **Countries** and **Cities** tabs to see more detailed aggregated data. +* **Digital sobriety data**: aggregated eco-design score and CO2 emissions are included in all tabs. +* **System data**: view information about your users' browsers and operating systems in the **Browser** and **OS** tabs. The **Global view** tab shows a donut chart of total browser usage. + +## Filtering RUM data + +By default, RUM data is presented as averages. You can use percentiles to focus on specific segments of the data. + +![image](../assets/percentiles.png) diff --git a/cxm/rum/rum.md b/cxm/rum/rum.md new file mode 100644 index 000000000000..b18bf6952327 --- /dev/null +++ b/cxm/rum/rum.md @@ -0,0 +1,10 @@ +--- +id: rum +title: Analyze user experience":" Real User Monitoring (RUM) +--- + +RUM provides an overview of real user experience by collecting and analyzing actual usage data gathered through the RUM tag embedded in your application. + +import DocCardList from '@theme/DocCardList'; + + diff --git a/cxm/sidebarsCxm.js b/cxm/sidebarsCxm.js index 5f49cd2d02e2..8b400407f8c8 100644 --- a/cxm/sidebarsCxm.js +++ b/cxm/sidebarsCxm.js @@ -54,7 +54,8 @@ module.exports = { type: 'category', label: 'Analyze user experience: Real User Monitoring (RUM)', link: { - type: 'generated-index', + type: "doc", + id: "rum/rum" }, items: [ { type: 'doc', id: 'installation/real-user-monitoring-installation' }, From ad34d192fcefab7d61325b2353ca37c8abf561bb Mon Sep 17 00:00:00 2001 From: cg-tw <83637804+cg-tw@users.noreply.github.com> Date: Mon, 13 Apr 2026 16:31:32 +0200 Subject: [PATCH 06/20] Percentiles --- cxm/rum/rum-results.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/cxm/rum/rum-results.md b/cxm/rum/rum-results.md index 6aafefc4ef2b..8db9da58867a 100644 --- a/cxm/rum/rum-results.md +++ b/cxm/rum/rum-results.md @@ -24,3 +24,9 @@ Once RUM is [configured](../installation/real-user-monitoring-installation.md), By default, RUM data is presented as averages. You can use percentiles to focus on specific segments of the data. ![image](../assets/percentiles.png) + +Percentiles from 10ile to 95ile shows the distribution from "fast/low" to "slow/high" values: + +10ile = only display best-case experiences +50ile = display typical user experience (median) +95ile = only display slowest experiences. From 043aa1ffa86668c9dbbffe3208077b49d610b189 Mon Sep 17 00:00:00 2001 From: cg-tw <83637804+cg-tw@users.noreply.github.com> Date: Mon, 13 Apr 2026 16:36:59 +0200 Subject: [PATCH 07/20] Add image --- cxm/assets/percentiles.png | Bin 0 -> 44280 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 cxm/assets/percentiles.png diff --git a/cxm/assets/percentiles.png b/cxm/assets/percentiles.png new file mode 100644 index 0000000000000000000000000000000000000000..c9d8725436c6fd5f64b59019f139ebf03a688901 GIT binary patch literal 44280 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 literal 0 HcmV?d00001 From da360f7f9336ec97f81e0da5430ee12a912a3e7b Mon Sep 17 00:00:00 2001 From: cg-tw <83637804+cg-tw@users.noreply.github.com> Date: Mon, 13 Apr 2026 17:10:49 +0200 Subject: [PATCH 08/20] Minor fixes --- cxm/rum/rum-results.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/cxm/rum/rum-results.md b/cxm/rum/rum-results.md index 8db9da58867a..be5260e4291b 100644 --- a/cxm/rum/rum-results.md +++ b/cxm/rum/rum-results.md @@ -25,8 +25,8 @@ By default, RUM data is presented as averages. You can use percentiles to focus ![image](../assets/percentiles.png) -Percentiles from 10ile to 95ile shows the distribution from "fast/low" to "slow/high" values: +Percentiles from 10ile to 95ile show the distribution from "fast/low" to "slow/high" values: -10ile = only display best-case experiences -50ile = display typical user experience (median) -95ile = only display slowest experiences. +* 10ile = only display best-case experiences +* 50ile = display typical user experience (median) +* 95ile = only display slowest experiences. From 24c64781fd3f78bc0ddfa4af774f23ac6f89953e Mon Sep 17 00:00:00 2001 From: cg-tw <83637804+cg-tw@users.noreply.github.com> Date: Tue, 14 Apr 2026 16:37:36 +0200 Subject: [PATCH 09/20] Update --- cxm/business-data/business-alerts.md | 34 +++++++++++++++++++ cxm/installation/installation-checklist.md | 2 +- .../basic-actions/how-alerts-work.md | 22 ------------ 3 files changed, 35 insertions(+), 23 deletions(-) diff --git a/cxm/business-data/business-alerts.md b/cxm/business-data/business-alerts.md index bd328be55d3f..5c9ae454d8dc 100644 --- a/cxm/business-data/business-alerts.md +++ b/cxm/business-data/business-alerts.md @@ -2,3 +2,37 @@ id: business-alerts title: Business alerts --- + +> Available by default on Business and Full licenses; optional on other plans. + +Business alerting monitors the impact of site issues (for example drops in traffic or conversion) rather than a predefined list of causes. +They detect abnormal drops in traffic or conversion and let you analyze precisely when those drops occurred. + +Because this data comes from Google Analytics, it is processed with a default 4-hour delay (GA data is refined over time). + +## Prerequisites + +* Users must have filled in their personal data (email, SMS, Slack) and defined the time periods during which they want to be notified or not. + +## Creating business alerts + +1. Go to **Settings > Alerting**. +2. In the **Business alerts** section, click **Add a business alert**, then select the alert type you want ([**Alert on conversion rate**](#conversion-rate-alerts) or [**Alerts on pageviews/mn**](#page-view-alerts)). +3. Name your alert and define which users should receive it. Select email, SMS or Slack. +4. If you want to define another notification channel than email, SMS or Slack, define the webhook to be used. +5. Hover over the alert's tile. 2 buttons appear: + + * **Configure this alert's planning**: define the time periods during which alerts should be sent. + * **Configure this alert's thresholds**: define criteria for triggering an alert and a recovery notification. + +### Conversion rate alerts + +This checks whether your conversion rate average over a given period (2 hours by default) is lower compared to the same period historically (daily, weekly, or monthly baselines). + +By default this alert triggers when the conversion rate drops by 30% compared to the usual value. A resolution notification is sent when the metric returns to 75% of the usual conversion rate. + +You can also set a fixed conversion-rate threshold below which you want to be alerted. + +### Page view alerts + +This works the same way as conversion-rate alerts but is applied to page views per minute. diff --git a/cxm/installation/installation-checklist.md b/cxm/installation/installation-checklist.md index 5c9dd74b923e..3346e67dd254 100644 --- a/cxm/installation/installation-checklist.md +++ b/cxm/installation/installation-checklist.md @@ -39,7 +39,7 @@ You don't need to do anything - data appears automatically on the **Network data ## Run a load test -You don't need to install anything to be able to run load tests. +You don't need to install anything to be able to run load tests. You just need to configure a user journey. ## Filtering RUM data @@ -38,3 +36,5 @@ Percentiles from 10ile to 95ile show the distribution from "fast/low" to "slow/h * 10ile = only display best-case experiences * 50ile = display typical user experience (median) * 95ile = only display slowest experiences. + +> The 75th percentile is the most important. It is the percentile that Google uses to evaluate website speed in its own global Real User Monitoring program. Google's entire evaluation of a website's performance is based on the 75th percentile. diff --git a/cxm/sidebarsCxm.js b/cxm/sidebarsCxm.js index 075bca3f2827..e375959fd2db 100644 --- a/cxm/sidebarsCxm.js +++ b/cxm/sidebarsCxm.js @@ -58,6 +58,7 @@ module.exports = { id: "rum/rum" }, items: [ + { type: 'doc', id: 'rum/rum-intro' }, { type: 'doc', id: 'installation/real-user-monitoring-installation' }, { type: 'doc', id: 'rum/rum-results' }, { type: 'doc', id: 'rum/rum-improve' }, From e21b51cba34dac009285dc25e9566cad04caa7f5 Mon Sep 17 00:00:00 2001 From: cg-tw <83637804+cg-tw@users.noreply.github.com> Date: Mon, 20 Apr 2026 18:07:57 +0200 Subject: [PATCH 13/20] Update --- cxm/installation/installation-checklist.md | 2 +- .../real-user-monitoring-installation.md | 6 +++--- cxm/rum/rum-intro.md | 19 ++++++++----------- cxm/sidebarsCxm.js | 2 +- 4 files changed, 13 insertions(+), 16 deletions(-) diff --git a/cxm/installation/installation-checklist.md b/cxm/installation/installation-checklist.md index abc8f16898c9..c8622f65bffb 100644 --- a/cxm/installation/installation-checklist.md +++ b/cxm/installation/installation-checklist.md @@ -13,7 +13,7 @@ However, depending on the security level on your site, you may need to allow our ## Real User Monitoring (RUM) -Real User Monitoring installs like any marketing tag: by inserting a JavaScript tag into your site's HEAD element. For the full procedure and installation instructions, see: [Install Real User Monitoring](./real-user-monitoring-installation.md). +Real User Monitoring installs like any marketing tag: by inserting a JavaScript tag into your site's HEAD element. For the full procedure and installation instructions, see [Setting up RUM](./real-user-monitoring-installation.md). ## Digital sobriety diff --git a/cxm/installation/real-user-monitoring-installation.md b/cxm/installation/real-user-monitoring-installation.md index e687a06cc218..411a64628061 100644 --- a/cxm/installation/real-user-monitoring-installation.md +++ b/cxm/installation/real-user-monitoring-installation.md @@ -21,13 +21,13 @@ Real User Monitoring (RUM) requires inserting a JavaScript tag into your site's ### Using GTM to add a Centreon RUM tag to your pages -1. Create a new tag: sign in to your GTM account and select the container for your website. Click "Add a new tag." +1. Create a new tag: sign in to your GTM account and select the container for your website. Click **Add a new tag**. 2. Configure the tag: - 1. Select "Custom HTML Tag" as the tag type. + 1. Select **Custom HTML Tag** as the tag type. 2. Paste the script provided into the HTML field. - 3. Ensure the script type is correctly set to "JavaScript" if required. GTM usually handles this automatically, but it's good to check. + 3. Ensure the script type is correctly set to **JavaScript** if required. GTM usually handles this automatically, but it's good to check. 3. Set triggers: choose when you want the script to execute. You can apply it to all pages or to specific pages depending on your needs. Triggers allow precise control over when the script runs. diff --git a/cxm/rum/rum-intro.md b/cxm/rum/rum-intro.md index efa16ae733d3..544a073b4327 100644 --- a/cxm/rum/rum-intro.md +++ b/cxm/rum/rum-intro.md @@ -3,23 +3,20 @@ id: rum-intro title: What is Real User Monitoring? --- -Called “RUM” among insiders, Real User Monitoring consists of observing and analyzing the experience perceived by real users, directly from their browsers, regardless which one they use. +RUM lets you analyze the actual experience of users on your site - and see what is happening on your site in real time. ![image](../assets/getting-started/rum-1.png) -It's important to note that: +## How does it work? -- this feature requires adding an **external tag** to the page, which is designed to be loaded **asynchronously** and to be **extremely lightweight** so it doesn't slow the user's browsing on the site. -- the type of data sent by the browser via the Experience Monitoring tag and the way Experience Monitoring stores these elements in its database ensure **the Experience Monitoring tag is excluded from the scope of GDPR**. Indeed, the figures sent through the tag are purely technical and **not personally identifiable**. The Experience Monitoring dashboard allows observing site behavior for different browser types (Chrome, Mobile Safari, EDGE, ...) but without any possibility to identify a unique user. +RUM works via [a lightweight, asynchronous tag added to the page](../installation/real-user-monitoring-installation.md), which doesn't slow the user's browsing on the site. The data collected is purely technical (no personal identifiers), making it GDPR-compliant, and allows segmentation by browser type without tracking individual users. -Once this tag is in place, Experience Monitoring can record the experience perceived by all users, which provides a very precise view of key performance metrics (e.g., TTFB, Speed Index, full page load time, etc.). +## What are the main benefits? -The **key benefits** provided by RUM are: +* Objective performance measurement: since it's measured from real users' browsers, issues specific to certain browsers or devices (e.g., poor performance on Safari) are immediately visible and quantifiable by traffic impact. -- an **objective** view of performance because it is measured **by the users themselves**. Example: if the site is mostly visited by users on Safari and the site's code runs particularly poorly on that browser, it will be immediately visible that a problem **on that specific browser** impacts a large portion of the site's traffic. + ![image](../assets/getting-started/rum-2.png) -![image](../assets/getting-started/rum-2.png) +* Exhaustive page coverage: unlike [Synthetic Monitoring](../getting-started/synthetic-monitoring.md) which only tests predefined pages or journeys, RUM automatically captures performance metrics (TTFB, Speed Index, full page load time, etc.) on every single page visit, building a real-time, comprehensive view of performance across the entire site. -- an **exhaustive** view of performance for **all pages** visited by users. This is a major difference compared to [Synthetic Monitoring](../getting-started/synthetic-monitoring.md), which measures certain reference pages or journeys. Conversely, the RUM data collector will record performance metrics (TTFB, Speed Index, etc.) **every time a click is made** on the site. The result is the construction of a cross-cutting, real-time view of the most visited pages with their respective performance scores: - -![image](../assets/getting-started/rum-3.png) + ![image](../assets/getting-started/rum-3.png) diff --git a/cxm/sidebarsCxm.js b/cxm/sidebarsCxm.js index e375959fd2db..f18506d4cf6a 100644 --- a/cxm/sidebarsCxm.js +++ b/cxm/sidebarsCxm.js @@ -52,7 +52,7 @@ module.exports = { { collapsed: true, type: 'category', - label: 'Analyze user experience: Real User Monitoring (RUM)', + label: 'Real User Monitoring (RUM)', link: { type: "doc", id: "rum/rum" From 91349614461736aef44524a80e8bd93e98990173 Mon Sep 17 00:00:00 2001 From: cg-tw <83637804+cg-tw@users.noreply.github.com> Date: Mon, 20 Apr 2026 18:19:06 +0200 Subject: [PATCH 14/20] Update --- cxm/rum/rum-intro.md | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/cxm/rum/rum-intro.md b/cxm/rum/rum-intro.md index 544a073b4327..44d317b4b3ff 100644 --- a/cxm/rum/rum-intro.md +++ b/cxm/rum/rum-intro.md @@ -3,13 +3,18 @@ id: rum-intro title: What is Real User Monitoring? --- -RUM lets you analyze the actual experience of users on your site - and see what is happening on your site in real time. +RUM lets you analyze the actual experience of users on your site in real time. RUM data captures 100% of real traffic to a site - meaning every time any user loads a page or clicks a link, a performance data point is recorded. + +This is what makes it fundamentally different from [Synthetic Monitoring](../getting-started/synthetic-monitoring.md), which only tests a predefined set of pages or user journeys on a fixed schedule. With RUM, you don't choose what to measure in advance - the data naturally covers every page that users actually visit, weighted by how often they visit it. ![image](../assets/getting-started/rum-1.png) ## How does it work? -RUM works via [a lightweight, asynchronous tag added to the page](../installation/real-user-monitoring-installation.md), which doesn't slow the user's browsing on the site. The data collected is purely technical (no personal identifiers), making it GDPR-compliant, and allows segmentation by browser type without tracking individual users. +RUM works via [a lightweight, asynchronous tag added to the page](../installation/real-user-monitoring-installation.md), which send data back to Experience Monitoring. + +* It doesn't slow the user's browsing on the site. +* The data collected is purely technical (no personal identifiers), making it GDPR-compliant, and allows segmentation by browser type without tracking individual users. ## What are the main benefits? @@ -20,3 +25,5 @@ RUM works via [a lightweight, asynchronous tag added to the page](../installatio * Exhaustive page coverage: unlike [Synthetic Monitoring](../getting-started/synthetic-monitoring.md) which only tests predefined pages or journeys, RUM automatically captures performance metrics (TTFB, Speed Index, full page load time, etc.) on every single page visit, building a real-time, comprehensive view of performance across the entire site. ![image](../assets/getting-started/rum-3.png) + +In short, RUM doesn't require you to anticipate what to monitor - it automatically builds a performance picture of your entire site, driven by what your users actually do. From df6e0fd2144891da505f9c150171704b730f6534 Mon Sep 17 00:00:00 2001 From: cg-tw <83637804+cg-tw@users.noreply.github.com> Date: Tue, 21 Apr 2026 09:26:38 +0200 Subject: [PATCH 15/20] Update --- cxm/rum/rum.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cxm/rum/rum.md b/cxm/rum/rum.md index b18bf6952327..cddcaf912a45 100644 --- a/cxm/rum/rum.md +++ b/cxm/rum/rum.md @@ -1,6 +1,6 @@ --- id: rum -title: Analyze user experience":" Real User Monitoring (RUM) +title: Real User Monitoring (RUM) --- RUM provides an overview of real user experience by collecting and analyzing actual usage data gathered through the RUM tag embedded in your application. From 3c1e713683f0f164894a673b70ef46fa178f63d6 Mon Sep 17 00:00:00 2001 From: cg-tw <83637804+cg-tw@users.noreply.github.com> Date: Tue, 21 Apr 2026 10:13:17 +0200 Subject: [PATCH 16/20] Update --- .../servers/install-system-agents.md | 83 +++++++++++-------- 1 file changed, 47 insertions(+), 36 deletions(-) diff --git a/cxm/installation/servers/install-system-agents.md b/cxm/installation/servers/install-system-agents.md index 7b888c7a46e4..782516afa316 100644 --- a/cxm/installation/servers/install-system-agents.md +++ b/cxm/installation/servers/install-system-agents.md @@ -3,17 +3,20 @@ id: install-system-agents title: Install System Agents --- +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +Sending information to the Experience Monitoring application requires installing the Experience Monitoring agent on all servers you wish to monitor. + To add, modify, or delete a server in Experience Monitoring, you must have **Admin** or **Owner** permissions on your organization. Ask your administrator or support to grant you the correct rights. At this time, it is not possible to link a server to multiple sites, whether within the same organization or not. -Sending information to the CXM application requires installing the CXM agent on all servers you wish to monitor. - > System agents must be able to communicate with our infrastructure. You may need to whitelist our [IP addresses](#endpoint-addresses-for-server-agents). ## Get the Token -To install CXM System Agents, you will need your **auto-registration token**. It is available in **Configuration > System**. +To install Experience Monitoring System Agents, you will need your **auto-registration token**. It is available in **Configuration > System**. See where to find the token in this video: @@ -25,33 +28,37 @@ See where to find the token in this video: ### Installation for Debian -To install the CXM agent: +To install the Experience Monitoring agent: 1. Add the following line to the **/etc/apt/sources.list.d/quanta.list** file. - -*For Buster (versions 10.*)* + + + ```bash deb [signed-by=/usr/share/keyrings/quanta-archive-keyring.pgp] http://apt.quanta.io/debian buster main ``` - *For Bullseye (versions 11.*)* + + ```bash deb [signed-by=/usr/share/keyrings/quanta-archive-keyring.pgp] https://apt.quanta.io/debian bullseye main ``` - *For Bookworm (versions 12.*)* + + ```bash deb [signed-by=/usr/share/keyrings/quanta-archive-keyring.pgp] https://apt.quanta.io/debian bookworm main ``` - If unsure of your version, you can read the **/etc/debian_version** file. + + - ### `BETA` Version + If unsure of your version of Debian, you can read the **/etc/debian_version** file. -> To use the **BETA** version, simply replace `main` at the end of the line with `beta`. + > To use the **BETA** version of the agent, simply replace `main` at the end of the line with `beta`. 2. Download and add the **GPG** key for our repository: @@ -71,35 +78,39 @@ To install the CXM agent: apt install quanta-agent ``` -You will be prompted for the token during installation, and system data should appear in CXM within a minute. + You will be prompted for the token during installation, and system data should appear in Experience Monitoring within a minute. ### Installation for Ubuntu -To install the CXM agent: +To install the Experience Monitoring agent: 1. Add the following line to the **/etc/apt/sources.list.d/quanta.list** file. -*For Jammy* + + - ```bash - deb [signed-by=/usr/share/keyrings/quanta-archive-keyring.pgp] https://apt.quanta.io/ubuntu jammy main - ``` + ```bash + deb [signed-by=/usr/share/keyrings/quanta-archive-keyring.pgp] https://apt.quanta.io/ubuntu jammy main + ``` - *For Kinetic* + + - ```bash - deb [signed-by=/usr/share/keyrings/quanta-archive-keyring.pgp] https://apt.quanta.io/ubuntu kinetic main - ``` + ```bash + deb [signed-by=/usr/share/keyrings/quanta-archive-keyring.pgp] https://apt.quanta.io/ubuntu kinetic main + ``` - *For Lunar* + + - ```bash - deb [signed-by=/usr/share/keyrings/quanta-archive-keyring.pgp] https://apt.quanta.io/ubuntu lunar main - ``` + ```bash + deb [signed-by=/usr/share/keyrings/quanta-archive-keyring.pgp] https://apt.quanta.io/ubuntu lunar main + ``` - ### `BETA` Version + + -> To use the **BETA** version, simply replace `main` at the end of the line with `beta`. + > To use the **BETA** version of the agent, simply replace `main` at the end of the line with `beta`. 2. Download and add the **GPG** key for our repository: @@ -119,7 +130,7 @@ To install the CXM agent: apt install quanta-agent ``` -You will be prompted for the token during installation, and system data should appear in CXM within a minute. + You will be prompted for the token during installation, and system data should appear in Experience Monitoring within a minute. ### Installation for CentOS / RHEL @@ -128,11 +139,11 @@ You will be prompted for the token during installation, and system data should a - Centos 7 - Centos 8 Stream -To install the CXM agent: +To install the Experience Monitoring agent: 1. Create the repository configuration file **/etc/yum.repos.d/quanta.repo**. You can download the configuration file available here: [https://rpm.quanta.io/quanta-centos-repo.txt](https://rpm.quanta.io/quanta-centos-repo.txt) - > To use the **BETA** version, simply replace the line `baseurl=http://rpm.quanta.io/centos/$releasever/main` with `baseurl=http://rpm.quanta.io/centos/$releasever/beta`. + > To use the **BETA** of the agent, simply replace the line `baseurl=http://rpm.quanta.io/centos/$releasever/main` with `baseurl=http://rpm.quanta.io/centos/$releasever/beta`. 2. Install the **GPG** key for our repository: @@ -170,17 +181,17 @@ To install the CXM agent: systemctl enable quanta-agent ``` -You should see system data appear in CXM within a minute. +You should see system data appear in Experience Monitoring within a minute. ### Installation for Docker and Autoscaling Systems -The use of the CXM agent is fully compatible with containerized infrastructures, but **it requires a slight variation in the installation process**. +The use of the Experience Monitoring agent is fully compatible with containerized infrastructures, but **it requires a slight variation in the installation process**. [Configuration of our agents for the cloud](cloud-configuration-of-agents.md) #### Explanation -The **hostid** is an internal parameter that allows CXM to uniquely identify a server. Each server must have a unique **hostid**, which is automatically configured by the installation script (using the MAC address of the first network interface without `:` characters). +The **hostid** is an internal parameter that allows Experience Monitoring to uniquely identify a server. Each server must have a unique **hostid**, which is automatically configured by the installation script (using the MAC address of the first network interface without `:` characters). However, in the case of Docker containers, the configuration prevents the installation script from finding this value. In autoscaling systems (like AWS ASG or Azure Scale Set), the image copy also duplicates the **hostid**. @@ -196,7 +207,7 @@ The agent is **only compatible with Linux**. ## Modifying an Existing Installation -If you want to modify the configuration of a CXM agent **already installed** on one of your servers, you will find its configuration in the **/etc/quanta/agent.yml** file. It contains the main connection information, including the CXM token corresponding to the relevant site. Access to this file can be useful if you monitor multiple sites with the same CXM account and wish to specify the correct token to associate each server with its hosted site (e.g., for separate production and pre-production servers). +If you want to modify the configuration of a Experience Monitoring agent **already installed** on one of your servers, you will find its configuration in the **/etc/quanta/agent.yml** file. It contains the main connection information, including the Experience Monitoring token corresponding to the relevant site. Access to this file can be useful if you monitor multiple sites with the same Experience Monitoring account and wish to specify the correct token to associate each server with its hosted site (e.g., for separate production and pre-production servers). Here is an excerpt from the **/etc/quanta/agent.yml** file: @@ -227,9 +238,9 @@ If in doubt, refer to the [installation checklist](../installation-checklist.md) ## Endpoint addresses for server agents -If you use server agents (the “System” section in CXM), each of your servers regularly sends data (once per minute) to the CXM service. +If you use server agents (the “System” section in Experience Monitoring), each of your servers regularly sends data (once per minute) to the Experience Monitoring service. -This is outbound HTTPS traffic (port 443) and is often allowed by default. However, if your firewall rules are strict and you need to allow specific destinations for CXM, list the following destination IP addresses: +This is outbound HTTPS traffic (port 443) and is often allowed by default. However, if your firewall rules are strict and you need to allow specific destinations for Experience Monitoring, list the following destination IP addresses: - 52.215.166.110 - 52.215.179.235 From d0085ea1102155072da0e15b1e6641bbb6f37654 Mon Sep 17 00:00:00 2001 From: cg-tw <83637804+cg-tw@users.noreply.github.com> Date: Thu, 23 Apr 2026 18:08:25 +0200 Subject: [PATCH 17/20] Update --- cxm/how-to-articles/faq.md | 42 ++--- .../servers/add-advanced-metrics.md | 165 ++++++++++++++---- .../servers/agent-troubleshooting.md | 20 --- .../servers/cloud-configuration-of-agents.md | 42 ++--- ...nstall-php-magento-orocommerce-profiler.md | 43 +++-- .../servers/install-system-agents.md | 89 +++++----- .../system-tab-indicators.md | 4 + 7 files changed, 237 insertions(+), 168 deletions(-) delete mode 100644 cxm/installation/servers/agent-troubleshooting.md diff --git a/cxm/how-to-articles/faq.md b/cxm/how-to-articles/faq.md index 2a20c82df36d..02c0e4eb6537 100644 --- a/cxm/how-to-articles/faq.md +++ b/cxm/how-to-articles/faq.md @@ -1,9 +1,9 @@ --- id: faq -title: FAQ +title: Agent FAQ --- -## Which firewall ports should be opened for the CXM agent? +## Which firewall ports should be opened for the Experience Monitoring agent? To ensure the agent works, outgoing HTTPS connections [to our IP addresses](../installation/cxm-ip-addresses.md) must be allowed. @@ -49,7 +49,7 @@ For Varnish, the "instance" parameter is also used as the Varnish instance name, We recommend installing the agent on all servers in your infrastructure. However, if you can't on some servers (e.g., on a database) and still want to monitor MySQL, you can change the **host** parameter in the agent configuration (**/etc/quanta/modules.d/service.yml**). -## My server is shared between several sites, each with a CXM subscription. How can data be visible on both sites? +## My server is shared between several sites, each with an Experience Monitoring subscription. How can data be visible on both sites? To link a server to multiple sites, you can specify several tokens (one per site) in **/etc/quanta/agent.yml**, separated by commas, e.g., "quanta_token: tokensite1,tokensite2". @@ -57,54 +57,48 @@ The server will be created on both sites and system data will be sent to both. There are some limitations if both sites use the PHP module: -- Magento events will be sent to both sites, regardless of which site generated them. -- Information in the Magento section of the CXM interface will be from one site or the other (and may not be correct). +- PHP events will be sent to both sites, regardless of which site generated them. +- Information in the PHP section of the Experience Monitoring interface will be from one site or the other (and may not be correct). -## I already installed the Magento module, how does the update work? +## Do I need to create my server in Experience Monitoring? -The update is automatic; when we receive the first metrics from the new PHP extension, we stop querying the old Magento module. When a scenario uses the new PHP module, you will see a "new module" flag in your scenario configuration. +No, creation is automatic the first time we receive data. If your server already existed in Experience Monitoring, its configuration will be updated automatically. -We recommend uninstalling the old module once the new one is installed. +You must manually delete the server in Experience Monitoring if you remove it from your infrastructure. -## Do I need to create my server in CXM? - -No, creation is automatic the first time we receive data. If your server already existed in CXM, its configuration will be updated automatically. - -You must manually delete the server in CXM if you remove it from your infrastructure. - -# I'm concerned about my server's security, can you explain how the CXM agent and PHP module work? +## I'm concerned about my server's security, can you explain how the Experience Monitoring agent and PHP module work? We care as much as you do about the security of our tools. Here is a technical description: All packages we provide are signed with a GPG key you must install in your package system to verify their origin. -### CXM agent +### Experience Monitoring agent -The CXM agent is a background service (daemon) on your server that performs several operations: +The Experience Monitoring agent is a background service (daemon) on your server that performs several operations: - It collects system data by reading files in **/proc**. - It collects data on active services (Apache, Nginx, Varnish, Memcached, Redis, MySQL), usually via a service connection. No privileged user is ever needed for the agent to access this data. - It receives data from the PHP module via a Unix socket (permissions are configurable). -- It sends collected data to CXM via secure HTTPS (using a proxy is possible). +- It sends collected data to Experience Monitoring via secure HTTPS (using a proxy is possible). -All CXM agent modules can be disabled independently. +All Experience Monitoring agent modules can be disabled independently. The agent starts as root for initialization (socket opening, config loading, etc.) but switches to a standard user for all collection operations (user and group are configurable). -Data collected by the agent is stored in memory before being sent to CXM and is never stored elsewhere. +Data collected by the agent is stored in memory before being sent to Experience Monitoring and is never stored elsewhere. -### PHP module +### PHP profiler -The PHP module is a PHP extension (dynamic library) loaded by PHP during execution. +The PHP profiler is a PHP extension (dynamic library) loaded by PHP during execution. It collects data only: - When you perform actions in your back office - During requests made by our probes (identified by a specific header). -The module does not alter application behavior; it only collects profiling information about Magento. +The module does not alter application behavior; it only collects profiling information about PHP. -The module also has an "xhprof" mode (full execution profiling), which works similarly but is never activated by CXM without user action. +The module also has an "xhprof" mode (full execution profiling), which works similarly but is never activated by Experience Monitoring without user action. Data is sent to the agent via the designated Unix socket and is never stored or sent elsewhere. diff --git a/cxm/installation/servers/add-advanced-metrics.md b/cxm/installation/servers/add-advanced-metrics.md index f8cda729f087..70cf15e182ad 100644 --- a/cxm/installation/servers/add-advanced-metrics.md +++ b/cxm/installation/servers/add-advanced-metrics.md @@ -1,122 +1,162 @@ --- id: add-advanced-metrics -title: Add Advanced Metrics +title: Install application agents --- -The CXM agent includes modules (or application agents) that allow you to collect system data from various components of your infrastructure, such as Apache, MySQL, Redis, Varnish, PostgreSQL, and more. +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; -> These application agents must be installed **after** installing the system agent. [Refer to the dedicated page to install the agent](./install-system-agents.md) +Application agents allow you to collect system data from various components of your infrastructure, such as Apache, MySQL, Redis, Varnish, PostgreSQL, and more. The collected data will appear in dedicated tabs on the **System data** page. + +## Prerequisites + +> Before installing application agents, you must install the [system agent](./install-system-agents.md). ## Apache 1. Install the package. -*On Debian* + + ```bash apt-get install quanta-agent-apache ``` - *On CentOS* + + ```bash yum install quanta-agent-apache ``` -2. Verify that the status module (*mod_status* of Apache) is correctly configured on your server with the following command: + + - ``` +2. Verify that the status module (**mod_status** module of Apache) is correctly configured on your server with the following command: + + ```shell curl http://127.0.0.1/server-status ``` 3. If not, you will need to [enable the **mod_status** module in Apache](https://httpd.apache.org/docs/current/en/mod/mod_status.htmll) -4. If you want to modify the URL used by our module, you can edit the following file: **/etc/quanta/modules.d/apache.yml**. +4. If you want to modify the URL used by our module, you can edit the following file: + + ```shell + /etc/quanta/modules.d/apache.yml + ``` + 5. Restart the agent: ```bash systemctl restart quanta-agent ``` -You should see metrics appear in CXM within a few minutes. + You should see an **Apache** tab with metrics appear in the **System data** page within a few minutes. If not, check the logs using the **journalctl** command. ## MySQL 1. Install the package: -*On Debian* + + ```bash apt-get install quanta-agent-mysql ``` - *On CentOS* + + ```bash yum install quanta-agent-mysql ``` + + + 2. We recommend creating a dedicated MySQL user for our probe, although it is not mandatory. For example, use the command below: ```bash - echo "CREATE USER quanta@localhost IDENTIFIED BY 'supersecret'; " | mysql -u root -p + echo "CREATE USER quanta@localhost IDENTIFIED BY 'XXXXX'; " | mysql -u root -p + ``` + +3. Enter the username and password you chose in the following file: + + ```shell + /etc/quanta/modules.d/mysqlstat.yml ``` -3. Enter the username and password you chose in the following file: **/etc/quanta/modules.d/mysqlstat.yml**. 4. Restart the agent: ```bash systemctl restart quanta-agent ``` -You should see metrics appear in CXM within a few minutes. + You should see a **MySQL** tab with metrics appear in the **System data** page within a few minutes. If not, check the logs using the **journalctl** command. ## PostgreSQL 1. Install the package: -*On Debian* + + ```bash apt-get install quanta-agent-postgresql ``` - *On CentOS* + + ```bash yum install quanta-agent-postgresql ``` + + + 2. We recommend creating a dedicated PostgreSQL user for our probe, although it is not mandatory. For example, use the command below: ```bash - echo "CREATE ROLE quanta LOGIN password 'supersecret';" | sudo -u postgres psql postgres + echo "CREATE ROLE quanta LOGIN password 'XXXXX';" | sudo -u postgres psql postgres ``` -3. Enter the username and password you chose in the following file: **/etc/quanta/modules.d/postgresql.yml**. +3. Enter the username and password you chose in the following file: + + ```shell + /etc/quanta/modules.d/postgresql.yml. + ``` + 4. Restart the agent: ```bash systemctl restart quanta-agent ``` -You should see metrics appear in CXM within a few minutes. + You should see a **PostgreSQL** tab with metrics appear in the **System data** page within a few minutes. If not, check the logs using the **journalctl** command. ## Nginx 1. Install the package: -*On Debian* + + ```bash apt-get install quanta-agent-nginx ``` - *On CentOS* + + ```bash yum install quanta-agent-nginx ``` + + + 2. Check that the status module is correctly configured on your server with the following command: ```bash @@ -124,32 +164,43 @@ You should see metrics appear in CXM within a few minutes. ``` 3. If not, you will need to set up the correct configuration as [described here](http://nginx.org/en/docs/http/ngx_http_stub_status_module.html). -4. If you want to modify the URL used by our module, you can edit the following file: **/etc/quanta/modules.d/nginx.yml**. + +4. If you want to modify the URL used by our module, you can edit the following file: + + ```shell + /etc/quanta/modules.d/nginx.yml + ``` + 5. Restart the agent: ```bash systemctl restart quanta-agent ``` -You should see metrics appear in CXM within a few minutes. + You should see an **Nginx** tab with metrics appear in the **System data** page within a few minutes. If not, check the logs using the **journalctl** command. ## Varnish 1. Install the package: -*On Debian* + + ```bash apt-get install quanta-agent-varnish ``` - *On CentOS* + + ```bash yum install quanta-agent-varnish ``` -2. If you are using multiple Varnish instances, specify which instance you want to send data to Quanta by adding the following lines at the end of the following file **/etc/quanta/modules.d/varnish.yml**: + + + +2. If you are using multiple Varnish instances, specify which instance you want to send data to Quanta by adding the following lines at the end of the following file: **/etc/quanta/modules.d/varnish.yml**: ```bash varnish: @@ -162,32 +213,54 @@ You should see metrics appear in CXM within a few minutes. systemctl restart quanta-agent ``` -You should see metrics appear in CXM within a few minutes. + You should see a **Varnish** tab with metrics appear in the **System data** page within a few minutes. If not, check the logs using the **journalctl** command, and see the troubleshooting information below. + +### Troubleshooting Varnish + +**I have Varnish on my server and installed the Varnish module but see no data, how can I fix this?** + +It's likely that your Varnish instance is not the default one, meaning you use the -n `name` flag to start Varnish and for admin commands. +If so, just add the following configuration in **/etc/quanta/modules.d/varnish.yml**: + +```shell +varnish: +instance: your_instance_name +``` ## Redis 1. Install the package: -*On Debian* + + ```bash apt-get install quanta-agent-redis ``` - *On CentOS* + + ```bash yum install quanta-agent-redis ``` -2. If you are not using the default port (6379), edit the following file: **/etc/quanta/modules.d/redis.yml**. + + + +2. If you are not using the default port (6379), edit the following file: + + ```shell + **/etc/quanta/modules.d/redis.yml**. + ``` + 3. If you are using Redis authentication, uncomment the line and enter the password in the **/etc/quanta/modules.d/redis.yml** file: ```bash auth: password ``` -4. If you are using multiple Redis instances, specify which instance you want to send data to Quanta by adding the following lines at the end of the **/etc/quanta/modules.d/redis.yml** file: +4. If you are using multiple Redis instances, specify which instance you want to send data to Experience Monitoring by adding the following lines at the end of the **/etc/quanta/modules.d/redis.yml** file: ```bash instance: your_instance_name @@ -199,31 +272,49 @@ You should see metrics appear in CXM within a few minutes. systemctl restart quanta-agent ``` -You should see metrics appear in CXM within a few minutes. + You should see a **Redis** tab with metrics appear in the **System data** page within a few minutes. If not, check the logs using the **journalctl** command. ## Memcached 1. Install the package: -*On Debian* + + ```bash apt-get install quanta-agent-memcached ``` - *On CentOS* + + ```bash yum install quanta-agent-memcached ``` -2. If you are not using the default port (11211), edit the following file: **/etc/quanta/modules.d/memcached.yml**. + + + +2. If you are not using the default port (11211), edit the following file: + + ```shell + /etc/quanta/modules.d/memcached.yml + ``` + 3. Restart the agent: ```bash systemctl restart quanta-agent ``` -You should see metrics appear in CXM within a few minutes. + You should see a **Memcached** tab with metrics appear in the **System data** page within a few minutes. If not, check the logs using the **journalctl** command. + +## Adaptation for managed/cloud services + +Some cloud providers offer managed services - for example AWS provides RDS and ElastiCache for managed databases and caching. These managed services are typically provided as a black box and do not allow you to install packages on their instances. + +To work around this, install an agent on another instance you control (for example a front) and have it monitor the remote managed service by pointing it at the service's IP and port. + +For example, for RDS you can deploy the `quanta-agent-mysql` agent (see the standard guide) and edit the `/etc/quanta/modules.d/mysqlstat.yml` agent configuration file to specify the host and port of the managed service (IP and port). -> The PHP profiler must be installed separately. Refer to the dedicated page, [**Install the PHP / Magento / OroCommerce Profiler**](./install-php-magento-orocommerce-profiler.md) +If you use multiple ElastiCache instances or equivalents (multiple cache types and session stores), you can configure the Redis (or Memcached) agent to target the different backends. diff --git a/cxm/installation/servers/agent-troubleshooting.md b/cxm/installation/servers/agent-troubleshooting.md deleted file mode 100644 index d833d5171c77..000000000000 --- a/cxm/installation/servers/agent-troubleshooting.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -id: agent-troubleshooting -title: Troubleshooting the agent and additional modules ---- - -## I don't see data coming in, where can I find information to troubleshoot? - -The agent uses syslog for logging; you will generally find logs in **/var/log/daemon.log** or **/var/log/syslog**. If you can't find the source of the error, please contact us. - -You can send logs to another file by changing the **file** variable under the **logger** section in **/etc/quanta/agent.yml** (make sure to set up log rotation). - -## I have Varnish on my server and installed the Varnish module but see no data, how can I fix this? - -It's likely that your Varnish instance is not the default one, meaning you use the -n `name` flag to start Varnish and for admin commands. -If so, just add the following configuration in **/etc/quanta/modules.d/varnish.yml**: - -```shell -varnish: -instance: your_instance_name -``` diff --git a/cxm/installation/servers/cloud-configuration-of-agents.md b/cxm/installation/servers/cloud-configuration-of-agents.md index 7300d6338532..4bdc607f38c5 100644 --- a/cxm/installation/servers/cloud-configuration-of-agents.md +++ b/cxm/installation/servers/cloud-configuration-of-agents.md @@ -1,40 +1,34 @@ --- id: cloud-configuration-of-agents -title: Configuring our agents for the cloud +title: Install the agent in autoscaling environments --- -With the rise of cloud, managed services, IaaS and PaaS, our packages are no longer sufficient by themselves and each infrastructure uses its own orchestration processes for deploying new servers (VMs or containers). +This page applies if your application or site is hosted on Docker or in an autoscaling environment. -If this applies to you, this article explains how to configure our agents using your orchestrators. +With the rise of cloud, managed services, IaaS and PaaS, each infrastructure uses its own orchestration processes for deploying new servers (VMs or containers). Autoscaling environments are dynamic: machines are constantly being created and destroyed. You will need to deploy the system agent and application agents on each machine. -## Standard installation procedure +## How the hostid works -To understand the following steps, you can find the standard installation guide for our agent here: +The use of the Experience Monitoring agent is fully compatible with containerized infrastructures, but it requires a slight variation in the installation process. -[Install system agents](./install-system-agents.md) +### Explanation -And the installation guide for our PHP module (if you use that technology) here: +The **hostid** is an internal parameter that allows Experience Monitoring to uniquely identify a server. Each server must have a unique **hostid**, which is automatically configured by the installation script (using the MAC address of the first network interface without `:` characters). -[Install the PHP / Magento / OroCommerce profiler](./install-php-magento-orocommerce-profiler.md) +However, in the case of Docker containers, the configuration prevents the installation script from finding this value. In autoscaling systems (like AWS ASG or Azure Scale Set), the image copy also duplicates the **hostid**. -## Cloud-specific considerations +### Workaround -When instances (VMs or containers) are deployed automatically or semi-automatically, some configuration fields must be modified or replicated for each newly created instance: - -- **Token**: The identification token must be the same for all CXM agents that belong to the same license and site. It is stored in the `/etc/quanta/agent.yml` configuration file. The token tells the agent which site the monitored data belongs to. -- **Hostid**: Also located in `/etc/quanta/agent.yml`. The hostid is a unique identifier used by CXM to uniquely identify an instance: - - In most cases the hostid must be different for each new instance, so your new instance `front-nginx-3` won't overwrite the data sent by `front-nginx-2`. - - In auto-scaling scenarios you may need to preserve a stable identifier when an instance is removed and later recreated. For example, if you add a fourth front each evening at 19:00 to handle peak traffic and remove it at 21:00, you probably want to avoid seeing a new chart created every day in CXM (and a rapidly growing list of charts). In that case you should use a unique identifier each time you remove and recreate that front so its data always appears in the same chart. -- **Hostname**: Also in `/etc/quanta/agent.yml`, this setting lets you assign a label to your instance. Unlike hostid, hostname is just a human-friendly name to make charts easier to read (for example `VM prod 006 - Varnish - 3`). You can also change it from the CXM UI. - -## Adaptation for managed/cloud services +To have a unique **hostid**, you can configure it in the **/etc/quanta/agent.yml** file via a script at container or VM startup (**bootstrap script**). You can specify a unique identifier generated at runtime (e.g., using AWS metadata or Docker environment variables) or use a unique element like the UUID value from **/proc/sys/kernel/random/uuid**. -Some cloud providers offer managed services - for example AWS provides RDS and ElastiCache for managed databases and caching. These managed services are typically provided as a black box and do not allow you to install packages on their instances. +## Adapting the standard procedure -To work around this, install an agent on another instance you control (for example a front) and have it monitor the remote managed service by pointing it at the service's IP and port. +To [install the system agent, you must follow the basic procedure](./install-system-agents.md), but make sure you manage the following parameters correctly. -For example, for RDS you can deploy the `quanta-agent-mysql` agent (see the standard guide) and edit the `/etc/quanta/modules.d/mysqlstat.yml` agent configuration file to specify the host and port of the managed service (IP and port). - -If you use multiple ElastiCache instances or equivalents (multiple cache types and session stores), you can configure the Redis (or Varnish or Memcached) agent to target the different backends. The guide for this is here: +When instances (VMs or containers) are deployed automatically or semi-automatically, some configuration fields must be modified or replicated for each newly created instance: -[Add advanced metrics](./add-advanced-metrics.md) +- **Token**: The identification token must be the same for all Experience Monitoring agents that belong to the same license and site. It is stored in the `/etc/quanta/agent.yml` configuration file. The token tells the agent which site the monitored data belongs to. +- **Hostid**: Also located in `/etc/quanta/agent.yml`. The hostid is a unique identifier used by Experience Monitoring to uniquely identify an instance: + - For static servers, the hostid must be different for each new instance, so your new instance `front-nginx-3` won't overwrite the data sent by `front-nginx-2`. + - In auto-scaling scenarios, you may need to preserve a stable identifier when an instance is removed and later recreated. For example, if you add a fourth front each evening at 19:00 to handle peak traffic and remove it at 21:00, you probably want to avoid seeing a new chart created every day in Experience Monitoring (and a rapidly growing list of charts). In that case you should reuse a hostid in a pool of unique identifiers each time you remove and recreate that front so its data always appears in the same chart. +- **Hostname**: Also in `/etc/quanta/agent.yml`, this setting lets you assign a label to your instance. Unlike hostid, hostname is just a human-friendly name to make charts easier to read (for example `VM prod 006 - Varnish - 3`). You can also change it from the Experience Monitoring UI. diff --git a/cxm/installation/servers/install-php-magento-orocommerce-profiler.md b/cxm/installation/servers/install-php-magento-orocommerce-profiler.md index e8a04da6e3fe..e275fd832a95 100644 --- a/cxm/installation/servers/install-php-magento-orocommerce-profiler.md +++ b/cxm/installation/servers/install-php-magento-orocommerce-profiler.md @@ -1,17 +1,22 @@ --- id: install-php-magento-orocommerce-profiler -title: Install the PHP / Magento / OroCommerce Profiler +title: Install the PHP profiler --- -The CXM PHP module comes as a PHP extension that allows you to collect detailed information about the execution time of each part of your CMS. +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +> This module will be deprecated soon. + +The PHP profiler allows you to collect detailed information about the execution time of each part of a PHP application (e.g. Magento, Orocommerce...). The collected data will appear in a dedicated tab on the **System data** page. ## Prerequisites -> The profiler requires the installation of the system agent. [Refer to the dedicated page to install the agent](./install-system-agents.md). +> Before installing the PHP profiler, you must install the [system agent](./install-system-agents.md). ## Compatibility -| Distribution | OS Version | PHP Version | CXM PHP Module | +| Distribution | OS Version | PHP Version | Experience Monitoring PHP Module | |--------------|------------|-------------|-------------------| | Debian | Buster (10) | 7.3/7.4/8.0/8.1/8.2/8.3 | 1.3.4 | | Debian | Bullseye (11) | 7.3/7.4/8.0/8.1/8.2/8.3 | 1.3.4 | @@ -25,9 +30,12 @@ The CXM PHP module comes as a PHP extension that allows you to collect detailed > The PHP module must be installed on every server running your PHP application. -### Install the CXM PHP Module for Debian / Ubuntu +### Step 1: install the package + + + -You must have added the CXM repositories, which you should already have done during the system agent installation. +You must have added the Experience Monitoring repositories, which you should already have done during the system agent installation. Depending on your PHP version, install the corresponding package. Here are a few examples: @@ -67,9 +75,10 @@ Then, enable the extension with the following command: phpenmod quanta_mon ``` -### Install the CXM PHP Module for CentOS / RedHat + + -You must have added the CXM repositories, which you should already have done during the system agent installation. +You must have added the Experience Monitoring repositories, which you should already have done during the system agent installation. Depending on your PHP version, install the corresponding package, for example: @@ -97,13 +106,17 @@ Then, enable the extension with the following command: phpenmod quanta_mon ``` -### Install the PHP Module for Other OSs + + We do not officially support packages for other operating systems. However, you can compile the module yourself, as the source code is [available on GitHub](https://github.com/quanta-computing/quanta-php-module). -## Configure Your Backoffice URL if You Use Magento + + -If you use Magento and a custom URL is used to access the Magento backoffice (i.e., a URL that does **not** start with **"/admin/"**), you must modify the module configuration so that Magento-type events are correctly reported in CXM. +### Step 2 (optional): Configure your Magento backoffice URL + +If you use Magento and a custom URL is used to access the Magento backoffice (i.e., a URL that does **not** start with **"/admin/"**), you must modify the module configuration so that Magento-type events are correctly reported in Experience Monitoring. This file is usually located here for Debian/Ubuntu: @@ -125,7 +138,7 @@ For example, if your backoffice URL is "http://admin.mysite.com/admin_123456/", quanta_mon.admin_url="/admin_123456/" ``` -## Restarting the Web Server +### Setp 3: Restart the web server After installing the module, you must restart your web service so that the PHP extension is loaded and activated. @@ -141,12 +154,10 @@ After installing the module, you must restart your web service so that the PHP e systemctl restart php8.2-fpm ``` -## Checking That Everything Works +## Check that everything works -Once everything is installed **and the web scenario has been created in CXM**, go to the Web Scenario menu, then click “+ details” in the legend of one of the pages requiring PHP execution (for example: a Cart page, which is usually never cached). +Once everything is installed **and the web scenario has been created in Experience Monitoring**, go to the Web Scenario menu, then click “+ details” in the legend of one of the pages requiring PHP execution (for example: a Cart page, which is usually never cached). You should then see an “Application” tab (otherwise this tab is grayed out) with information about the time spent in PHP. In the case of a Magento (v1 or 2) CMS or the OroCommerce platform, the color coding differs: it is orange for Magento and yellow for OroCommerce. - -> Advanced metrics (Apache, MySQL, Redis, etc.) must be installed separately. [Refer to the dedicated page](./add-advanced-metrics.md). diff --git a/cxm/installation/servers/install-system-agents.md b/cxm/installation/servers/install-system-agents.md index 782516afa316..59f867c93dc5 100644 --- a/cxm/installation/servers/install-system-agents.md +++ b/cxm/installation/servers/install-system-agents.md @@ -1,34 +1,39 @@ --- id: install-system-agents -title: Install System Agents +title: Install the agent on a static server --- import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; -Sending information to the Experience Monitoring application requires installing the Experience Monitoring agent on all servers you wish to monitor. +Sending information to Experience Monitoring requires installing the Experience Monitoring agent on all servers you wish to monitor. -To add, modify, or delete a server in Experience Monitoring, you must have **Admin** or **Owner** permissions on your organization. Ask your administrator or support to grant you the correct rights. +* The agent is only compatible with Linux. +* This procedure can be used directly if your application or site is hosted on a static server. For autoscaling environments (including Docker), it must be adapted to manage the **hostid** correctly. See [Install the agent in autoscaling environments](cloud-configuration-of-agents.md). At this time, it is not possible to link a server to multiple sites, whether within the same organization or not. -> System agents must be able to communicate with our infrastructure. You may need to whitelist our [IP addresses](#endpoint-addresses-for-server-agents). +## Compatibility -## Get the Token +
  • Debian 10, 11, 12
  • Ubuntu Jammy, Kinetic, Lunar
  • CentOS 7, CentOS 8 Stream
-To install Experience Monitoring System Agents, you will need your **auto-registration token**. It is available in **Configuration > System**. + -See where to find the token in this video: +## Prerequisites -[Find the token for system agents](https://www.loom.com/share/8e1958d64017451a8a0b7a63ab5c8185) +* To install the Experience Monitoring agent, you will need an **auto-registration token**. Each site has its own token. To retrieve a token, in the site you want, go to **Settings > System**. The token is displayed in a green box. (See a [video tutorial](https://www.loom.com/share/8e1958d64017451a8a0b7a63ab5c8185).) -## Proceed with Installation +* System agents must be able to communicate with our infrastructure. You may need to whitelist our [IP addresses](#endpoint-addresses-for-server-agents). -> If you are using Docker containers or autoscaling systems (AWS ASG, Azure Scale Set, or others), refer to the **Installation for Docker and Autoscaling Systems** section before installing on the OS. +* To add, modify, or delete a server in Experience Monitoring, you must have **Admin** or **Owner** permissions on your organization. Ask your administrator or support to grant you the correct rights. -### Installation for Debian +## Installation procedure -To install the Experience Monitoring agent: + + 1. Add the following line to the **/etc/apt/sources.list.d/quanta.list** file. @@ -78,9 +83,10 @@ To install the Experience Monitoring agent: apt install quanta-agent ``` - You will be prompted for the token during installation, and system data should appear in Experience Monitoring within a minute. + You will be prompted for the token during installation, and system data should appear in Experience Monitoring within a minute. You can then install [application agents](./add-advanced-metrics.md) or [the PHP profiler](install-php-magento-orocommerce-profiler.md) if you need them. -### Installation for Ubuntu + + To install the Experience Monitoring agent: @@ -130,9 +136,10 @@ To install the Experience Monitoring agent: apt install quanta-agent ``` - You will be prompted for the token during installation, and system data should appear in Experience Monitoring within a minute. + You will be prompted for the token during installation, and system data should appear in Experience Monitoring within a minute. You can then install [application agents](./add-advanced-metrics.md) or [the PHP profiler](install-php-magento-orocommerce-profiler.md) if you need them. -### Installation for CentOS / RHEL + + **Supported Versions:** @@ -147,67 +154,61 @@ To install the Experience Monitoring agent: 2. Install the **GPG** key for our repository: - ``` + ```shell curl https://rpm.quanta.io/quanta-repo-key.gpg -o /tmp/quanta.key && rpm --import /tmp/quanta.key && rm -f /tmp/quanta.key ``` 3. Update the package list: - ``` + ```shell yum makecache ``` 4. Install the agent: - ``` + ```shell yum install quanta-agent ``` -5. Edit the file **/etc/quanta/agent.yml** and replace *with your previously obtained **auto-registration token***: +5. Edit the file **/etc/quanta/agent.yml** and replace __YOUR_QUANTA_TOKEN__ with [your **auto-registration token**](#prerequisites): - ``` + ```shell __YOUR_QUANTA_TOKEN__ ``` 6. Start the agent: - ``` + ```shell systemctl start quanta-agent ``` 7. Enable the agent to start automatically on boot: - ``` + ```shell systemctl enable quanta-agent ``` -You should see system data appear in Experience Monitoring within a minute. - -### Installation for Docker and Autoscaling Systems + You should see system data appear in Experience Monitoring within a minute. You can then install [application agents](./add-advanced-metrics.md) or [the PHP profiler](install-php-magento-orocommerce-profiler.md) if you need them. -The use of the Experience Monitoring agent is fully compatible with containerized infrastructures, but **it requires a slight variation in the installation process**. + + -[Configuration of our agents for the cloud](cloud-configuration-of-agents.md) - -#### Explanation - -The **hostid** is an internal parameter that allows Experience Monitoring to uniquely identify a server. Each server must have a unique **hostid**, which is automatically configured by the installation script (using the MAC address of the first network interface without `:` characters). - -However, in the case of Docker containers, the configuration prevents the installation script from finding this value. In autoscaling systems (like AWS ASG or Azure Scale Set), the image copy also duplicates the **hostid**. +We do not provide packages for other OSs, but [the source code is publicly available on GitHub and can be compiled](https://github.com/quanta-computing/quanta-agent). -#### Workaround + + -To have a unique **hostid**, you can configure it in the **/etc/quanta/agent.yml** file via a script at container or VM startup (**bootstrap script**). You can specify a unique identifier generated at runtime (e.g., using AWS metadata or Docker environment variables) or use a unique element like the UUID value from **/proc/sys/kernel/random/uuid**. +## Troubleshooting agent installation -### Installation on Other OSs +**I don't see data coming in, where can I find information to troubleshoot?** -We do not provide packages for other OSs, but [the source code is publicly available on GitHub and can be compiled](https://github.com/quanta-computing/quanta-agent). +The agent uses syslog for logging; you will generally find logs in **/var/log/daemon.log** or **/var/log/syslog**. If you can't find the source of the error, please contact us. -The agent is **only compatible with Linux**. +You can send logs to another file by changing the **file** variable under the **logger** section in **/etc/quanta/agent.yml** (make sure to set up log rotation). ## Modifying an Existing Installation -If you want to modify the configuration of a Experience Monitoring agent **already installed** on one of your servers, you will find its configuration in the **/etc/quanta/agent.yml** file. It contains the main connection information, including the Experience Monitoring token corresponding to the relevant site. Access to this file can be useful if you monitor multiple sites with the same Experience Monitoring account and wish to specify the correct token to associate each server with its hosted site (e.g., for separate production and pre-production servers). +If you want to modify the configuration of an Experience Monitoring agent that is already installed on one of your servers, you will find its configuration in the **/etc/quanta/agent.yml** file. It contains the main connection information, including the Experience Monitoring token corresponding to the relevant site. Access to this file can be useful if you monitor multiple sites with the same Experience Monitoring account and wish to specify the correct token to associate each server with its hosted site (e.g., for separate production and pre-production servers). Here is an excerpt from the **/etc/quanta/agent.yml** file: @@ -230,15 +231,9 @@ quanta_token: [...] <- insert here the token corresponding to your site [...] ``` -## To Go Further - -You can now install application modules to get metrics on your Apache, Nginx, MySQL, Varnish, Magento systems, etc. - -If in doubt, refer to the [installation checklist](../installation-checklist.md). - ## Endpoint addresses for server agents -If you use server agents (the “System” section in Experience Monitoring), each of your servers regularly sends data (once per minute) to the Experience Monitoring service. +If you use the Experience Monitoring agent, each of your servers regularly sends data (once per minute) to the Experience Monitoring service. This is outbound HTTPS traffic (port 443) and is often allowed by default. However, if your firewall rules are strict and you need to allow specific destinations for Experience Monitoring, list the following destination IP addresses: diff --git a/cxm/performance-analysis/system-tab-indicators.md b/cxm/performance-analysis/system-tab-indicators.md index e4341355d52a..794ef4c895ec 100644 --- a/cxm/performance-analysis/system-tab-indicators.md +++ b/cxm/performance-analysis/system-tab-indicators.md @@ -16,3 +16,7 @@ Memory stores short-term information. For example, it is the resource that cause The disk stores long-term information; this is where assets such as images are kept. Like memory, disk usage should not vary dramatically over time and is not typically a factor that would cause large increases in load times or make your site unavailable. + +## Correlate system data and business data + +If you have configured [Business data](../getting-started/business-view.md), in the **Business data** page, the **Infrastructure cost/click** tab correlates your system data and your business data. From da909c35b22b8276714b12f2a8aa0a887d4a315c Mon Sep 17 00:00:00 2001 From: smau Date: Mon, 27 Apr 2026 16:55:31 +0200 Subject: [PATCH 18/20] Update --- cxm/sidebarsCxm.js | 41 ++++++++++++++++++++++++++++++----------- 1 file changed, 30 insertions(+), 11 deletions(-) diff --git a/cxm/sidebarsCxm.js b/cxm/sidebarsCxm.js index f18506d4cf6a..63bd3e068ea8 100644 --- a/cxm/sidebarsCxm.js +++ b/cxm/sidebarsCxm.js @@ -34,21 +34,40 @@ module.exports = { type: 'generated-index', }, items: [ - { type: 'doc', id: 'configuration/configuration-checklist' }, - - ], - }, - { - type: 'category', - label: 'Simulate user journeys: Synthetic Monitoring (STM)', - link: { + { + collapsed: true, + type: 'category', + label: 'Understanding metric concepts', + link: { + type: 'doc', + id: 'performance-analysis/metrics/overview-of-metrics', + }, + items: [ + { type: 'doc', id: 'performance-analysis/metrics/hero-time' }, + { type: 'doc', id: 'performance-analysis/metrics/time-to-first-byte' }, + { type: 'doc', id: 'performance-analysis/metrics/speed-index' }, + { type: 'doc', id: 'performance-analysis/metrics/on-load' }, + { type: 'doc', id: 'performance-analysis/metrics/largest-contentful-paint' }, + { type: 'doc', id: 'performance-analysis/metrics/total-blocking-time' }, + { type: 'doc', id: 'performance-analysis/metrics/cumulative-layout-shift' }, + ], + }, + { type: 'doc', id: 'performance-analysis/basic-actions/navigate-in-cxm' }, + { + collapsed: true, + type: 'category', + label: 'Understanding graphs', + link: { type: 'generated-index', - }, - items: [ - { type: 'doc', id: 'performance-analysis/network-tab-indicators' }, + }, + items: [ + { type: 'doc', id: 'how-to-articles/using-charts' }, + { type: 'doc', id: 'installation/monitor-production-events' }, ], }, + ], + }, { collapsed: true, type: 'category', From a2434c86ae4813830c755f50ddcd11b3a4b15740 Mon Sep 17 00:00:00 2001 From: cg-tw <83637804+cg-tw@users.noreply.github.com> Date: Mon, 27 Apr 2026 17:55:40 +0200 Subject: [PATCH 19/20] Remove mentions of agent beta version --- cxm/installation/servers/install-system-agents.md | 6 ------ 1 file changed, 6 deletions(-) diff --git a/cxm/installation/servers/install-system-agents.md b/cxm/installation/servers/install-system-agents.md index 59f867c93dc5..d8d11702b9fc 100644 --- a/cxm/installation/servers/install-system-agents.md +++ b/cxm/installation/servers/install-system-agents.md @@ -63,8 +63,6 @@ At this time, it is not possible to link a server to multiple sites, whether wit If unsure of your version of Debian, you can read the **/etc/debian_version** file. - > To use the **BETA** version of the agent, simply replace `main` at the end of the line with `beta`. - 2. Download and add the **GPG** key for our repository: ```bash @@ -116,8 +114,6 @@ To install the Experience Monitoring agent: - > To use the **BETA** version of the agent, simply replace `main` at the end of the line with `beta`. - 2. Download and add the **GPG** key for our repository: ```bash @@ -150,8 +146,6 @@ To install the Experience Monitoring agent: 1. Create the repository configuration file **/etc/yum.repos.d/quanta.repo**. You can download the configuration file available here: [https://rpm.quanta.io/quanta-centos-repo.txt](https://rpm.quanta.io/quanta-centos-repo.txt) - > To use the **BETA** of the agent, simply replace the line `baseurl=http://rpm.quanta.io/centos/$releasever/main` with `baseurl=http://rpm.quanta.io/centos/$releasever/beta`. - 2. Install the **GPG** key for our repository: ```shell From 2efaf98c9a1f7f7fc833daa2e69b5f3fe46d9a15 Mon Sep 17 00:00:00 2001 From: emgcentreon Date: Thu, 30 Apr 2026 16:20:41 +0200 Subject: [PATCH 20/20] added page on improving digital sobriety --- .../digital-sobriety-details.png | Bin 0 -> 26385 bytes .../digital-sobriety-score.md | 271 +++--------------- cxm/digital-sobriety/improve-dss.md | 40 +++ 3 files changed, 81 insertions(+), 230 deletions(-) create mode 100644 cxm/assets/digital-sobriety/digital-sobriety-details.png create mode 100644 cxm/digital-sobriety/improve-dss.md diff --git a/cxm/assets/digital-sobriety/digital-sobriety-details.png b/cxm/assets/digital-sobriety/digital-sobriety-details.png new file mode 100644 index 0000000000000000000000000000000000000000..f89e17e86a748a2cc31863497349db3b987123dd GIT binary patch literal 26385 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 NQIJuQ2ER28{$HpgvU~sl literal 0 HcmV?d00001 diff --git a/cxm/digital-sobriety/digital-sobriety-score.md b/cxm/digital-sobriety/digital-sobriety-score.md index 85903abfae66..6044a24695ec 100644 --- a/cxm/digital-sobriety/digital-sobriety-score.md +++ b/cxm/digital-sobriety/digital-sobriety-score.md @@ -1,81 +1,21 @@ --- id: digital-sobriety-score title: Digital Sobriety Score ---- - -Specifications v1.1 (April 2023) - -![Image](../assets/digital-sobriety/digital-sobriety-score-1.png) - -## Context: The purpose of the Digital Sobriety Score - -At Centreon, we believe the ecological transition requires awareness and accountability from the digital sector regarding its environmental impact. - -Today, digital technologies account for roughly 4% of global greenhouse gas emissions and are growing at approximately **+8% per year**. At the same time, the Paris Agreement requires a global annual emissions reduction across sectors of **-7%**: - -![Image](../assets/digital-sobriety/digital-sobriety-score-2.png) - -Although digital technologies can help decarbonize other industries, the digital sector itself cannot avoid a necessary reduction in its own emissions. To improve, however, we first need **reliable and shared measurements**. - -To support this transition and align digital activity with planetary limits, we considered it essential to provide a standardized guide shared across the digital ecosystem — this is the purpose of the Digital Sobriety Score. - -The Digital Sobriety Score is a general rating that measures the environmental footprint of a website or web application. It can be used without technical expertise while enabling digital and sustainability specialists to inspect the sub-indicators that compose the overall score in greater detail. - -With this unified score, CXM’s mission is to raise awareness and guide digital stakeholders toward more responsible choices by providing tools to compare and progressively improve the environmental impact of their current and future applications. - -## Introduction to the methodology - -Existing indicators for measuring the digital environmental footprint are often difficult to interpret without specialist knowledge and tend to cover a limited set of criteria, which makes it hard for organizations to improve across all impact dimensions. - -The Digital Sobriety Score is therefore a **composite rating** that aggregates the environmental impacts associated with using a website or mobile application into a simplified score out of 100, also expressed as a grade from A to E, similar to food labeling: - -![Image](../assets/digital-sobriety/digital-sobriety-score-5.png) - -For more precision, the numerical score should be consulted. The correspondence between numeric score and letter grade is: - -| Digital Sobriety Score | Letter grade | -| --- | --- | -| 0 to 45 | E | -| 45 to 60 | D | -| 60 to 75 | C | -| 75 to 90 | B | -| 90 to 100 | A | - -This grading captures a broad set of impacts while providing simplified visibility for digital and CSR teams so they can: - -- compare multiple sites (for example, several sites within the same brand or versus competitors); -- implement action plans to make their applications more sustainable; -- be guided on eco-design best practices when building new digital projects, whether developed internally or externally. - -As part of the Digital Sobriety Score, CXM commits to delivering actionable measures that respect the principles of the [GHG Protocol](https://www.greenly.earth/fr-fr/blog/guide-entreprise/ghg-protocol-quest-ce-que-cest-comment-ca-marche): Relevance, Completeness, Consistency, Transparency, and Accuracy. - -In other words, the calculation methods and measurement processes **will remain transparent and open** under a Creative Commons license ([CC BY-NC-ND 4.0 DEED](https://creativecommons.org/licenses/by-nc-nd/4.0/deed.fr)), allowing teams — especially specialists in responsible digital practices — to compare CXM’s results with their own calculations and tools. - -This transparency enables stakeholders to: - -- perform their own Digital Sobriety Score measurements, including in contexts where CXM cannot directly access the application; -- propose improvements to evolve the calculation method as research in GreenIT progresses. - -## Calculation method - -Calculating the digital environmental footprint is a relatively new and evolving field. New information on the impacts of use, manufacturing, and end-of-life of digital equipment may emerge, so the algorithms estimating these impacts are expected to be refined over time. - -For this reason, CXM versions the calculation method to ensure its continued relevance and to allow users to benefit from improvements without impairing comparability between sites audited at different times. +--- -Even without changes to measurement methods, median market values are likely to improve over time; CXM will naturally update the quantiles used for each parameter in the Digital Sobriety Score calculation to reflect market progress. +The Digital Sobriety Score (DSS) is a grade given by Centreon Experience Monitoring that informs on a website's impact on the environment. While websites are immaterial, there is a physical infrastructure that keeps them running. The DSS measures the environmental impact of this infrastructure. -This document describes the calculation algorithm updated in April 2023 (**version 1.1**), which is the first public release. +The DSS can be found on the **Global View** -### How is the Digital Sobriety Score calculated? +It is somewhat similar to the [GreenIT collective](https://www.ecoindex.fr/en/)'s Eco Index. However, while the Eco Index emphasizes simple evaluation based on three technical criteria for a given URL, which is particularly useful during development, CXM's Digital Sobriety Score adopts a broader, audit-style approach more suited to sites already in production. -The Digital Sobriety Score can be evaluated with two types of audits: +The DSS is a combination of the average Carbon Footpring Per Click (CFPC) and the average Eco-Design Score (EDS), a more detailed breakdown of what composes these metrics can be seen below. -1. The simple method -2. The "full audit" method. +![Image](../assets/digital-sobriety/digital-sobriety-score-3.png) -One major advantage of these two audit types is they adapt to different resource levels and precision requirements while producing fully comparable scores. The only real difference between the methods is the level of approximation used in the simple method. +## How is the Digital Sobriety Score calculated? -Comparison of the two methods and their advantages: +The Digical Sobriety Score can be calculated with two types of audits : a "simple audit" and a "full audit". Simple audits are free and can be performed on the [quanta.green website](https://www.quanta.green/). | | Simple method (see [quanta.green](http://quanta.green)) | Full audit method | | --- | --- | --- | @@ -86,191 +26,62 @@ Comparison of the two methods and their advantages: | Time-series comparison | Yes, but at quarterly precision (quanta.green stores scores for 3 months). After 3 months, a new analysis shows evolution over time. | Yes, in real time and historized automatically over multiple years in CXM | | Certification | The "Simple audit" certification includes a summary visual that can be displayed on the site to describe its environmental impact. | The "Full audit" certification includes a summary visual that can be displayed on the site to describe its environmental impact. | -Because the site's carbon footprint calculation is thorough and reflects actual traffic, it can be included in a company's overall carbon inventory, giving more accurate data for the digital part. - -To compare the environmental impact of web applications of different sizes, the site's footprint is shown relative to its traffic. - -The Digital Sobriety Score is a **summary of many evaluation criteria**. Taken alone, it does not answer the question "what is my site's carbon footprint?": its goal is to provide a broader rating than carbon footprint alone and to make web applications comparable regardless of their audience size (100 users or 100,000 users). +The site’s carbon footprint is calculated from measured traffic data and can be incorporated into a company’s overall carbon inventory to better represent digital emissions. -Teams focused on CSR who still want an absolute carbon footprint of their site (to refine corporate carbon accounting with a precise CO2eq measure corresponding to site activity) can obtain this via the absolute carbon footprint sub-indicator of the Digital Sobriety Score (see "Global carbon footprint of the site" below for details). +To allow comparison across web applications of different sizes, results are expressed relative to traffic. -### Detailed algorithm for the Digital Sobriety Score (full audit method, version 1.1 - April 2023) +The Digital Sobriety Score combines several criteria into a single metric. It is not a measure of carbon emissions alone, but a comparative indicator designed to evaluate web applications independently of their audience size. -![Image](../assets/digital-sobriety/digital-sobriety-score-3.png) - -The Digital Sobriety Score is composed of multiple criteria with a tree-like weighting system that assigns importance to each in the overall score. - -Many sub-criteria have independent value for improving an application’s environmental footprint. We recommend that teams include these sub-indicators in their monitoring committees and reports. +### What is taken into account for the calculations? -The overall score is intended for executive reporting and external communication, such as displaying a certificate on a website. +The CFPC quantifies the environmental impact associated with a single page view or any click-triggered context change within a web application. The use of click-based measurement is particularly relevant for the increasingly common Single Page Applications (SPAs), where user interactions often update the view without initiating a full page reload. In these cases, each interaction, regardless of whether it triggers navigation, has an environmental cost and must be accounted for in the assessments. -To explain the diagram above, here is the exhaustive list of underlying indicators used in the Digital Sobriety Score: - -## The Eco-Design Score (EDS) - -This score accounts for 50% of the Digital Sobriety Score. It is rated 0 to 100 and can be measured for a page using five sub-criteria that evaluate adherence to eco-design principles: +The EDS is composed from multiple indicators: - Time To First Byte (TTFB) - Often measured and optimized to speed up rendering, this indicator is particularly reflective of server-side execution time. The longer the TTFB, the greater the energy consumption at the hosting center. - - TTFB accounts for 30% of the Eco-Design Score. - -- Page weight - - "Page weight" refers to the total amount of data downloaded by a user when navigating to a page or when an interaction triggers a context change in the site. - - Transfers — including HTML, CSS, images, etc. — have a significant impact on network equipment between the datacenter and the user. - - Page weight accounts for 30% of the Eco-Design Score. - -- Frontend execution time - - After the page is downloaded, the user’s device (mobile, tablet, or computer) typically executes JavaScript locally. This execution is often invisible to site administrators because the load occurs on the client device rather than in the datacenter; nevertheless, it consumes energy and results in emissions. - - A good estimate of frontend execution time is the interval between Time To First Byte and the OnLoad event (total page load). OnLoad represents when the browser becomes idle after executing JavaScript. - - Frontend execution time accounts for 20% of the Eco-Design Score. - -- Number of HTTP(s) requests - - Each HTTP(S) request requires additional data exchanges between server and client, which increases network energy use. Processing many requests also generates additional CPU time on the client device. - - Reducing the number of requests involves optimizing caching, bundling files, or using inlining to avoid extra requests. - - Number of requests accounts for 10% of the Eco-Design Score. + TTFB measures the latency between a client request and the first byte received from the server. It is commonly used as a proxy for server-side processing time. Higher TTFB values generally indicate longer server execution, which correlates with increased energy consumption at the hosting infrastructure. -- DOM size +- Page Weight - The DOM (Document Object Model) is the hierarchical representation of page HTML elements. While essential for modern websites, a large DOM increases memory usage and processing time on the client device, leading to higher energy consumption. + Page weight represents the total volume of data transferred to the client during a page load or a dynamic context update. Larger payloads require more network resources and increase energy consumption across the delivery chain. - DOM size accounts for 10% of the Eco-Design Score. +- Frontend Execution Time -Once all indicators are measured, a weighting is applied based on each criterion’s environmental importance: + Following content delivery, client devices execute JavaScript and perform rendering tasks locally. Although this processing occurs outside the datacenter and is often not monitored by site operators, it contributes to overall energy usage and associated emissions on end-user devices. -![Image](../assets/digital-sobriety/digital-sobriety-score-6.png) +- Number of HTTP(S) Requests -To convert each sub-indicator into a score (for example: 28 points on the Eco-Design Score for 90 ms TTFB), mapping tables are used. These tables are publicly available so anyone can compute the Digital Sobriety Score end-to-end. Sources for these mapping tables include the [HTTP Archive](https://httparchive.org/) and the [Chrome UX Report](https://developer.chrome.com/docs/crux/). The method uses value quantiles (for instance, to get the full 30 points for TTFB, a site must be within the top 5% fastest sites for that metric). + Each HTTP(S) request introduces additional network overhead and requires processing on both the server and client. A higher number of requests increases data exchange, network energy consumption, and client-side CPU utilization. -## Average Eco-Design Score (Average EDS) +- DOM Size -To compute a site's average Eco-Design Score, there are two cases: + The Document Object Model (DOM) defines the in-memory structure of HTML elements. Larger DOM trees increase memory usage and computational overhead for rendering, layout calculations, and scripting, thereby elevating energy consumption on client devices. -1. Simple audit - For a simple audit, we take the site's 10 most popular pages and compute an Eco-Design Score for each. The average of these 10 scores is the Average EDS. +CXM calculates a number from 0 to 100 by calculating the EDS from these indicators, combining it with the CFPC and then gives the corresponding letter grade: -2. Full audit - - In this case, the Average EDS considers all pages viewed on the site and weights them by their share of total traffic, providing a more precise measure. A low-scoring page with little traffic will have minimal impact on the overall score, while a high-traffic low-scoring page will significantly lower the Average EDS. - -## Carbon Footprint (CF) - -A basic indicator for measuring an application's environmental footprint is the carbon footprint of accessing a web page or performing a click. For this evaluation, CXM implements a recognized and transparent algorithm: the [Sustainable Web Design method](https://sustainablewebdesign.org/calculating-digital-emissions/). - -This method estimates a page’s carbon impact based on its weight and the carbon intensity of the electricity used by the hosting platform. - -Thanks to this method, the same web page accessed in France, Ireland, or the USA will have different impacts due to differences in electricity generation. To account for a host country’s electricity mix, CXM relies on the [Ember Climate](https://ember-climate.org/insights/research/global-electricity-review-2022/) dataset (also used by [Our World In Data](https://ourworldindata.org/grapher/carbon-intensity-electricity)). - -The resulting calculation, expressed in CO2eq, also allows distinguishing contributions from different scopes (datacenter, network, and end-user devices). - -![Image](../assets/digital-sobriety/digital-sobriety-score-7.png) - -### Average Carbon Footprint Per Click (Average CFPC) - -Average carbon footprint per click accounts for 50% of the Digital Sobriety Score. It represents the environmental footprint per page view or click-triggered context change in the web application. - -Why measure clicks instead of only page views? - -We use "clicks" because Single Page Applications (SPAs) are increasingly common. In an SPA, a click may change the current view without triggering a full page navigation. Each interaction still has an ecological cost and should be included in the environmental assessment. - -> Version 1.1 of the Digital Sobriety Score focuses on carbon emissions, the most commonly used metric for corporate environmental management. Other impact criteria (water use, abiotic resource depletion, primary energy consumption) are also relevant and may be incorporated in future versions of the methodology. - -To calculate Average CFPC, there are two cases: - -1. Simple audit - - For a simple audit, take the site's 10 most popular pages and compute the carbon footprint (CF) for each. The average of these 10 measures gives the Average CFPC. - -2. Full audit - - For a full audit, Average CFPC accounts for all pages viewed on the site, weighted by their share of total traffic, producing a more accurate measure. A high CF on a low-traffic page will have little overall effect, but if that page receives more traffic, its weighted CF will increase the site’s Average CFPC accordingly. - -Although full audits weight pages by traffic, the Average CFPC is intended to express the footprint of a single page view or click independent of overall traffic, enabling month-to-month comparability despite traffic variations. - -For example, comparing November and December, if December traffic spikes due to holidays, Average CFPC accounts for this variation and still allows teams to track the average footprint per click month over month. This view helps responsible digital teams maintain a reliable gauge of eco-design efforts, independent of marketing-driven traffic changes. - -## Global Carbon Footprint of the site (Global CF) - -To compute the global carbon footprint of a site, consider two main factors: - -- the Average CFPC for a given period -- the number of page views during that same period - -There are two cases: - -1. Simple audit - - Multiply Average CFPC by the number of page views to get a good estimate of the site's traffic-related footprint. - -2. Full audit - - Weight each page’s carbon footprint by its individual view count. Since CXM’s RUM tag tracks all page views in real time, CXM can perform these calculations for high precision. - -In both cases, you obtain the site's global carbon footprint for the selected period. - -## The Digital Sobriety Score - -The overall Numeric Digital Sobriety Score (out of 100) combines the two main sub-indicators: - -- Average carbon footprint per click (Average CFPC) -- Average Eco-Design Score (Average EDS) - -Each sub-indicator is weighted at 50% to balance low carbon footprints per click with good eco-design practices: - -![Image](../assets/digital-sobriety/digital-sobriety-score-8.png) - -Note: While calculation methods and weightings are the same for simple and full audits, the simple audit considers only the site’s 10 main pages for Average EDS and Average CFPC. See the section "How is the Digital Sobriety Score calculated?" for more information. - -**Conditions for obtaining the CXM label** - -CXM can issue a certified Digital Sobriety Score with a summary visual suitable for use on the site or in communications. This certificate is accompanied by a detailed report containing the measurements behind the overall score. - -![Image](../assets/digital-sobriety/digital-sobriety-score-4.png) - -The report both proves the origin of the measurement and guides digital and responsible teams on optimizations to improve the score. - -To obtain a certified score: - -- a CXM Digital Sobriety license must be connected to the target site with Real User Monitoring enabled. The Digital Sobriety Score is then calculated in real time. -- an expert analysis is carried out to produce the full report. - -The first certificate for a given site can be based on the previous 30 days of data. It is valid for one year and will be renewed with a certificate based on the following 12 months. From the second year onward, the certificate will reflect the site's full-year traffic and may include the change in score versus the previous year. - -## Optional indicator: Carbon Footprint per € of turnover (CFPT) - -Not included in the Digital Sobriety Score, the carbon footprint per euro of turnover is an optional metric that relates the site’s carbon footprint to one euro of online revenue. It can be useful to compare the environmental efficiency of e-commerce sites of different sizes. - -To compute CFPT, consider: - -- the site’s global carbon footprint (Global CF) for a period -- the site’s revenue (€) for that same period. - -Like Average CFPC, CFPT enables comparisons between sites of different scales, such as comparing different brand sites, competitors, or regionalized versions of the same site hosted in multiple countries. +| Digital Sobriety Score | Letter grade | +| ---------------------- | ------------ | +| 0 to 45 | E | +| 45 to 60 | D | +| 60 to 75 | C | +| 75 to 90 | B | +| 90 to 100 | A | -## Further reading +## Obtaining a Digital Sobriety Score Certificate -More information on calculations mentioned in this document: +Centreon Experience Monitoring can issue a certificate for the site's DSS. The certificate comes with detailed information on the website's measurments that can be suitable for presentations, communication or in-site use. -- Calculating Digital Emissions [Sustainable Web Design](https://sustainablewebdesign.org/calculating-digital-emissions/) -- Lean ICT - Pour une sobriété numérique ([The Shift Project](https://theshiftproject.org/wp-content/uploads/2018/05/2018-05-17_Rapport-interm%C3%A9diaire_Lean-ICT-Pour-une-sobri%C3%A9t%C3%A9-num%C3%A9rique.pdf)) -- **Calculate the Digital Sobriety Score for free (simple audit) on [quanta.green](http://quanta.green)** -- Electricity carbon intensity: [electricity maps](https://app.electricitymaps.com/map) +### Certification requirements -## License +A CXM Digital Sobriety license connected to the site, with Real User Monitoring enabled +An expert review to produce the full report -The algorithm, calculation method, and quantiles used to produce the Digital Sobriety Score are published transparently and freely to serve the public without requiring CXM services. The license is [Creative Commons Attribution-NonCommercial-NoDerivatives 2.0 France (CC BY-NC-ND 2.0 FR)](https://creativecommons.org/licenses/by-nc-nd/2.0/fr/), which permits use by individuals, associations, and companies as long as it is not resold. +The score is calculated in real time. -## Appendix - Quantiles used +### Certification validity -To convert each measured value on a website into a score, **mapping tables are required**. So that anyone can calculate their own Digital Sobriety Score outside of [quanta.green](http://quanta.green) or CXM's services, the complete mapping tables are available on request via [hello@quanta.io](mailto:hello@quanta.io). +Initial certification: based on the previous 30 days of data; valid for one year +Renewal: based on the following 12 months of data +From the second year onward: based on a full year of traffic, with optional year-over-year comparison diff --git a/cxm/digital-sobriety/improve-dss.md b/cxm/digital-sobriety/improve-dss.md new file mode 100644 index 000000000000..bc8862b6bca0 --- /dev/null +++ b/cxm/digital-sobriety/improve-dss.md @@ -0,0 +1,40 @@ +--- +id: improve-dss +title: Improving your Digital Sobriety Score +--- + +The Digital Sobriety Score (DSS) is a calculation of your site's carbon emissions [taking diverse factors into account](digital-sobriety-score.md). In addition to calculating it, Centreon Experience Monitoring can offer advice on how to improve. + +Details on your DSS and how to improve it are accessed from the corresponding widget located in the **Global View** page. + +![Image](../assets/digital-sobriety/digital-sobriety-details.png) + +Click the **More details** button. + +### How can I know what to improve? + +The graph at the top shows information of your overall DSS. This is calculated using the combined data from all your **User Journeys**. +Improving your DSS is done by improving aspects of individual user journeys. To learn about possible improvements, click the **More Details** button on a user journey, a graph of that user journey's DSS appears. +A Graph with details of the steps of that user journey is displayed below. Click the binoculars icon to the right of this second graph. + +You are now on the page of **Last recommendations** for the selected user journey, here you can see a timeline showing how much time it takes for each step to load. + +Below this is the **Diagnostic**, a list of recommendations to improve your score. They are separated in 3 groups according to their impact: +- The most impactful ones are have a red triangle. +- Followed by those with a yellow square +- The least impactful recommendations have a grey circle. + +You can click on each individual recommendation to get more details on how to enact them. + + +> After modifying a user journey, you must relaunch the probe to update the displayed data. + +### How do I know my changes made a difference? + +In the **Last recommendations** page, scroll to the bottom of the page and click the **Compare with** button. You will be taken to the **Recommendations comparator**. +The most recent audit will already be opened in the first slot of the comparator. +Click the **Choose another recommendation audit** button to select an audit performed before your changes and click **Compare**. + +You will be shown a timeline of the two journeys, the second one shows a more detailed comparison, displaying by how much your user journey has improved or worsened. + +The list of recommendations below the timelines displays the recommendations for your current audit and the ones that were given for the previous one. This allows you to see which recommendations have been taken care of. \ No newline at end of file