From b6de77a044fa0ae9b1c53ff3b75982f76f2d002b Mon Sep 17 00:00:00 2001 From: Rosa Trieu <107086888+rtrieu@users.noreply.github.com> Date: Wed, 20 Nov 2024 13:55:47 -0800 Subject: [PATCH] [DOCS-9537] Add manual steps for nginx browser RUM (#26323) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * update sentence * moved limitations add reference * add rest of links * fix links * fix all links * another header * fix links * Apply suggestions from code review Co-authored-by: Heston Hoffman * remaining capitalization * Update content/en/real_user_monitoring/browser/setup/server.md Co-authored-by: Heston Hoffman * Apply suggestions from code review Co-authored-by: Benoît Co-authored-by: Damien Mehala * update limitation based on fb * more detailed fixes --------- Co-authored-by: Heston Hoffman Co-authored-by: Benoît Co-authored-by: Damien Mehala --- .../browser/setup/server.md | 179 +++++++++++++++--- 1 file changed, 157 insertions(+), 22 deletions(-) diff --git a/content/en/real_user_monitoring/browser/setup/server.md b/content/en/real_user_monitoring/browser/setup/server.md index 4504516a4f2c5..9508dbb721e62 100644 --- a/content/en/real_user_monitoring/browser/setup/server.md +++ b/content/en/real_user_monitoring/browser/setup/server.md @@ -23,6 +23,15 @@ RUM Auto-Instrumentation works by injecting a RUM SDK JavaScript scriptlet into After your applications have been instrumented, you can configure your RUM application in Datadog. +## Limitations + +The available functionality has the following important limitations: + +- If proxying compressed traffic, the Auto-Instrumentation method is not able to inject the JS scriptlet into the HTML traffic. +- This instrumentation method does not support any [advanced RUM configurations][3]. However, `allowedTracingUrls` and `excludedActivityUrls` are supported for NGINX web servers. +- If NGINX or IIS is acting as a proxy and the upstream server has end-to-end encryption (like TLS) enabled, the module cannot inject RUM. Ensure the web server is set up for TLS origination for successful instrumentation. +- (Windows IIS only) Configuration for Auto-Instrumentation is only available per Windows IIS site. + ## Prerequisites The automatic installation method requires that you have the [Datadog Agent][2] installed. @@ -32,21 +41,79 @@ The automatic installation method requires that you have the [Datadog Agent][2]
To request support for a web server that is not listed here, fill out this form.
{{< tabs >}} -{{% tab "Nginx" %}} +{{% tab "NGINX" %}} -The Auto-Instrumentation method leverages the [Nginx Dynamic Modules capability][1] to implement a response body filter. The filter injects the RUM SDK into the response body for responses identified as HTML. +The Auto-Instrumentation method leverages the [NGINX Dynamic Modules capability][1] to implement a response body filter. The filter injects the RUM SDK into the response body for responses +identified as HTML. For more granular control over how configuration files or permissions are handled, you can also install NGINX manually. + +[1]: https://docs.nginx.com/nginx/admin-guide/dynamic-modules/dynamic-modules/ + + +{{% collapse-content title="Automatic installation (recommended)" level="h5" %}} To automatically instrument your RUM application: -1. In Datadog, navigate to the [**Digital Experience > Add an Application Page**][2] and select the JavaScript (JS) application type. -2. Select **Auto-Instrumentation** and **Nginx**. -3. Set your Session and Session Replay sample rates. See [guidance on configuring sampling][3]. -4. Copy and run the installer command to load the Datadog RUM SDK Injector onto your Nginx module. -5. After the installer successfully installs the SDK Injector, restart Nginx to begin collecting RUM sessions. +1. In Datadog, navigate to the [**Digital Experience > Add an Application Page**][1] and select the JavaScript (JS) application type. +2. Select **Auto-Instrumentation** and **NGINX**. +3. Set your Session and Session Replay sample rates. See [guidance on configuring sampling][2]. +4. Copy and run the installer command to load the Datadog NGINX Module with the RUM SDK Injector onto NGINX. +5. After the installer successfully installs the SDK Injector, restart NGINX to begin collecting RUM sessions. +6. (Optional) To verify the module is successfully injecting the RUM Browser SDK into HTML pages, check the NGINX error logs for relevant messages. The module logs important steps during the injection process. Ensure that NGINX is configured with at least the `INFO` log level with the following: -[1]: https://docs.nginx.com/nginx/admin-guide/dynamic-modules/dynamic-modules/ -[2]: https://app.datadoghq.com/rum/list -[3]: /real_user_monitoring/guide/sampling-browser-plans/ + ```javascript + error_log info; + ``` + +[1]: https://app.datadoghq.com/rum/list +[2]: /real_user_monitoring/guide/sampling-browser-plans/ + +{{% /collapse-content %}} + +{{% collapse-content title="Manual configuration" level="h5" %}} + +### Download the appropriate `.tgz` file + +1. Use the `.tgz` file corresponding to your version of NGINX. You can find all the relevant `.tgz` files listed by NGINX version under [Reference](#reference). +2. Extract the tarball to extract the `ngx_http_datadog_module.so` file. Move it to a location that NGINX has access to (referenced as `` in the steps below). + +### Update NGINX configuration +1. The `nginx.conf` file is usually located in NGINX's configuration directory. Add the following line to load the module: + + ```javascript + load_module ; + ``` + +2. Then in the **http/server/location** section, add the following: + + ```javascript + # APM Tracing is enabled by default. The following line disables APM Tracing. + datadog_disable; + datadog_rum on; + datadog_rum_config "v5" { + "applicationId" ""; + "clientToken" ""; + "site" ""; + "service" "my-web-application"; + "env" "production"; + "version" "1.0.0"; + "sessionSampleRate" "100"; + "sessionReplaySampleRate" "100"; + "trackResources" "true"; + "trackLongTasks" "true"; + "trackUserInteractions" "true"; + } + ``` + +### Restart your server + +1. Restart the NGINX server to begin collecting data for your Datadog RUM application. By default, the RUM SDK is injected to all HTML documents. You may need to clear your browser cache. +2. (Optional) To verify the module is successfully injecting the RUM Browser SDK into HTML pages, check the NGINX error logs for relevant messages. The module logs important steps during the injection process. Ensure that NGINX is configured with at least the `INFO` log level with the following: + + ```javascript + error_log info; + ``` + +{{% /collapse-content %}} {{% /tab %}} {{% tab "Windows IIS" %}} @@ -57,7 +124,9 @@ Auto-Instrumentation leverages a Windows module that injects the RUM SDK into th 2. Select **Auto-Instrumentation** and **Windows IIS**. 3. Set up the IIS module using either the GUI installer or command line as described below: -{{% collapse-content title="Using the GUI installer" level="h5" %}} +[1]: https://app.datadoghq.com/rum/list/create/ + +{{% collapse-content title="Using the GUI installer (recommended)" level="h5" %}} 1. Download the Datadog RUM installer. 2. Follow the installer as an administrator by opening the `.msi` file. @@ -79,8 +148,6 @@ Auto-Instrumentation leverages a Windows module that injects the RUM SDK into th {{% /collapse-content %}} -[1]: https://app.datadoghq.com/rum/list/create/ - {{% /tab %}} {{< /tabs >}} @@ -89,7 +156,7 @@ Auto-Instrumentation leverages a Windows module that injects the RUM SDK into th You can adjust your Session Sampling and Session Replay Sampling rates from the Application Management page. {{< tabs >}} -{{% tab "Nginx" %}} +{{% tab "NGINX" %}} To update your RUM Application: @@ -114,15 +181,46 @@ To update your RUM Application: {{% /tab %}} {{< /tabs >}} -## Limitations +## Troubleshooting -The available functionality has the following important limitations: +### NGINX stops responding -- If serving compressed traffic, the Auto-Instrumentation method is not able to inject the JS scriptlet into the HTML traffic. -- This instrumentation method does not support any [advanced RUM configurations][3]. However, `allowedTracingUrls` and `excludedActivityUrls` are supported for Nginx web servers. -- Auto-Instrumentation does not inject into encrypted requests served by Nginx or IIS related to TLS. -- (Nginx only) Auto-Instrumentation does not inject encrypted requests served by the Nginx web server. -- (Windows IIS only) Configuration for Auto-Instrumentation is only available per Windows IIS site. +Since the module is in Preview, it's possible NGINX may stop serving requests, particularly after installation. If you experience this issue, contact [Datadog support][4] with the following information to help us investigate and resolve the issue: + +- Your NGINX configuration file +- Any relevant error logs + +### RUM is not injected + +If you notice that RUM is not being injected into HTML pages, consider the following potential causes: + +- **Content-Type mismatch**: RUM is injected only into HTML pages. If the `Content-Type` header does not correctly indicate `text/html`, the injection is skipped. +- **Content compression by upstream server**: If NGINX is acting as a proxy and the upstream server has content compression (like gzip, zstd, or Brotli) enabled, the module may not inject RUM. Ensure that content compression is disabled on the upstream server and configure NGINX to compress the content. + +## Reference + +### NGINX modules + +| Nginx version | amd64 | arm 64 | +|---------------|-------|--------| +| 1.22.0 | [ngx_http_datadog-amd64-1.22.0][5] | [ngx_http_datadog-arm64-1.22.0][6] | +| 1.22.1 | [ngx_http_datadog-amd64-1.22.1][7] | [ngx_http_datadog-arm64-1.22.1][8] | +| 1.23.0 | [ngx_http_datadog-amd64-1.23.0][9] | [ngx_http_datadog-arm64-1.23.0][10] | +| 1.23.1 | [ngx_http_datadog-amd64-1.23.1][11] | [ngx_http_datadog-arm64-1.23.1][12] | +| 1.23.2 | [ngx_http_datadog-amd64-1.23.2][13] | [ngx_http_datadog-arm64-1.23.2][14] | +| 1.23.3 | [ngx_http_datadog-amd64-1.23.3][15] | [ngx_http_datadog-arm64-1.23.3][16] | +| 1.23.4 | [ngx_http_datadog-amd64-1.23.4][17] | [ngx_http_datadog-arm64-1.23.4][18] | +| 1.24.0 | [ngx_http_datadog-amd64-1.24.0][19] | [ngx_http_datadog-arm64-1.24.0][20] | +| 1.25.0 | [ngx_http_datadog-amd64-1.25.0][21] | [ngx_http_datadog-arm64-1.25.0][22] | +| 1.25.1 | [ngx_http_datadog-amd64-1.25.1][23] | [ngx_http_datadog-arm64-1.25.1][24] | +| 1.25.2 | [ngx_http_datadog-amd64-1.25.2][25] | [ngx_http_datadog-arm64-1.25.2][26] | +| 1.25.3 | [ngx_http_datadog-amd64-1.25.3][27] | [ngx_http_datadog-arm64-1.25.3][28] | +| 1.25.4 | [ngx_http_datadog-amd64-1.25.4][29] | [ngx_http_datadog-arm64-1.25.4][30] | +| 1.25.5 | [ngx_http_datadog-amd64-1.25.5][31] | [ngx_http_datadog-arm64-1.25.5][32] | +| 1.26.0 | [ngx_http_datadog-amd64-1.26.0][33] | [ngx_http_datadog-arm64-1.26.0][34] | +| 1.26.1 | [ngx_http_datadog-amd64-1.26.1][35] | [ngx_http_datadog-arm64-1.26.1][36] | +| 1.26.2 | [ngx_http_datadog-amd64-1.26.2][37] | [ngx_http_datadog-arm64-1.26.2][38] | +| 1.27.0 | [ngx_http_datadog-amd64-1.27.0][39] | [ngx_http_datadog-arm64-1.27.0][40] | ## Further reading @@ -130,4 +228,41 @@ The available functionality has the following important limitations: [1]: /real_user_monitoring/browser/setup/ [2]: /agent/ -[3]: /real_user_monitoring/browser/advanced_configuration/ \ No newline at end of file +[3]: /real_user_monitoring/browser/advanced_configuration/ +[4]: /help +[5]: https://ddagent-windows-unstable.s3.amazonaws.com/inject-browser-sdk/nginx/latest/ngx_http_datadog_module-amd64-1.22.0.so.tgz +[6]:https://ddagent-windows-unstable.s3.amazonaws.com/inject-browser-sdk/nginx/latest/ngx_http_datadog_module-arm64-1.22.0.so.tgz +[7]: https://ddagent-windows-unstable.s3.amazonaws.com/inject-browser-sdk/nginx/latest/ngx_http_datadog_module-amd64-1.22.1.so.tgz +[8]: https://ddagent-windows-unstable.s3.amazonaws.com/inject-browser-sdk/nginx/latest/ngx_http_datadog_module-arm64-1.22.1.so.tgz +[9]: https://ddagent-windows-unstable.s3.amazonaws.com/inject-browser-sdk/nginx/latest/ngx_http_datadog_module-amd64-1.23.0.so.tgz +[10]: https://ddagent-windows-unstable.s3.amazonaws.com/inject-browser-sdk/nginx/latest/ngx_http_datadog_module-arm64-1.23.0.so.tgz +[11]: https://ddagent-windows-unstable.s3.amazonaws.com/inject-browser-sdk/nginx/latest/ngx_http_datadog_module-amd64-1.23.1.so.tgz +[12]: https://ddagent-windows-unstable.s3.amazonaws.com/inject-browser-sdk/nginx/latest/ngx_http_datadog_module-arm64-1.23.1.so.tgz +[13]: https://ddagent-windows-unstable.s3.amazonaws.com/inject-browser-sdk/nginx/latest/ngx_http_datadog_module-amd64-1.23.2.so.tgz +[14]: https://ddagent-windows-unstable.s3.amazonaws.com/inject-browser-sdk/nginx/latest/ngx_http_datadog_module-arm64-1.23.2.so.tgz +[15]: https://ddagent-windows-unstable.s3.amazonaws.com/inject-browser-sdk/nginx/latest/ngx_http_datadog_module-amd64-1.23.3.so.tgz +[16]: https://ddagent-windows-unstable.s3.amazonaws.com/inject-browser-sdk/nginx/latest/ngx_http_datadog_module-arm64-1.23.3.so.tgz +[17]: https://ddagent-windows-unstable.s3.amazonaws.com/inject-browser-sdk/nginx/latest/ngx_http_datadog_module-amd64-1.23.4.so.tgz +[18]: https://ddagent-windows-unstable.s3.amazonaws.com/inject-browser-sdk/nginx/latest/ngx_http_datadog_module-arm64-1.23.4.so.tgz +[19]: https://ddagent-windows-unstable.s3.amazonaws.com/inject-browser-sdk/nginx/latest/ngx_http_datadog_module-amd64-1.24.0.so.tgz +[20]: https://ddagent-windows-unstable.s3.amazonaws.com/inject-browser-sdk/nginx/latest/ngx_http_datadog_module-arm64-1.24.0.so.tgz +[21]: https://ddagent-windows-unstable.s3.amazonaws.com/inject-browser-sdk/nginx/latest/ngx_http_datadog_module-amd64-1.25.0.so.tgz +[22]: https://ddagent-windows-unstable.s3.amazonaws.com/inject-browser-sdk/nginx/latest/ngx_http_datadog_module-arm64-1.25.0.so.tgz +[23]: https://ddagent-windows-unstable.s3.amazonaws.com/inject-browser-sdk/nginx/latest/ngx_http_datadog_module-amd64-1.25.1.so.tgz +[24]: https://ddagent-windows-unstable.s3.amazonaws.com/inject-browser-sdk/nginx/latest/ngx_http_datadog_module-arm64-1.25.1.so.tgz +[25]: https://ddagent-windows-unstable.s3.amazonaws.com/inject-browser-sdk/nginx/latest/ngx_http_datadog_module-amd64-1.25.2.so.tgz +[26]: https://ddagent-windows-unstable.s3.amazonaws.com/inject-browser-sdk/nginx/latest/ngx_http_datadog_module-arm64-1.25.2.so.tgz +[27]: https://ddagent-windows-unstable.s3.amazonaws.com/inject-browser-sdk/nginx/latest/ngx_http_datadog_module-amd64-1.25.3.so.tgz +[28]: https://ddagent-windows-unstable.s3.amazonaws.com/inject-browser-sdk/nginx/latest/ngx_http_datadog_module-arm64-1.25.3.so.tgz +[29]: https://ddagent-windows-unstable.s3.amazonaws.com/inject-browser-sdk/nginx/latest/ngx_http_datadog_module-amd64-1.25.4.so.tgz +[30]: https://ddagent-windows-unstable.s3.amazonaws.com/inject-browser-sdk/nginx/latest/ngx_http_datadog_module-arm64-1.25.4.so.tgz +[31]: https://ddagent-windows-unstable.s3.amazonaws.com/inject-browser-sdk/nginx/latest/ngx_http_datadog_module-amd64-1.25.5.so.tgz +[32]: https://ddagent-windows-unstable.s3.amazonaws.com/inject-browser-sdk/nginx/latest/ngx_http_datadog_module-arm64-1.25.5.so.tgz +[33]: https://ddagent-windows-unstable.s3.amazonaws.com/inject-browser-sdk/nginx/latest/ngx_http_datadog_module-amd64-1.26.0.so.tgz +[34]: https://ddagent-windows-unstable.s3.amazonaws.com/inject-browser-sdk/nginx/latest/ngx_http_datadog_module-arm64-1.26.0.so.tgz +[35]: https://ddagent-windows-unstable.s3.amazonaws.com/inject-browser-sdk/nginx/latest/ngx_http_datadog_module-amd64-1.26.1.so.tgz +[36]: https://ddagent-windows-unstable.s3.amazonaws.com/inject-browser-sdk/nginx/latest/ngx_http_datadog_module-arm64-1.26.1.so.tgz +[37]: https://ddagent-windows-unstable.s3.amazonaws.com/inject-browser-sdk/nginx/latest/ngx_http_datadog_module-amd64-1.26.2.so.tgz +[38]: https://ddagent-windows-unstable.s3.amazonaws.com/inject-browser-sdk/nginx/latest/ngx_http_datadog_module-arm64-1.26.2.so.tgz +[39]: https://ddagent-windows-unstable.s3.amazonaws.com/inject-browser-sdk/nginx/latest/ngx_http_datadog_module-amd64-1.27.0.so.tgz +[40]: https://ddagent-windows-unstable.s3.amazonaws.com/inject-browser-sdk/nginx/latest/ngx_http_datadog_module-arm64-1.27.0.so.tgz \ No newline at end of file