From 57842177cb57ec09f3d98f5e1092e1e541576164 Mon Sep 17 00:00:00 2001 From: Mike Minutillo Date: Mon, 16 Feb 2026 16:36:11 +0800 Subject: [PATCH 1/9] Document integrated ServicePulse --- .../ServiceControl_All/powershell-error.ps1 | 1 + menu/menu.yaml | 2 + platform/installation.md | 14 ++++-- servicecontrol/index.md | 2 +- .../servicecontrol-instances/configuration.md | 16 ++++++ .../deployment/containers.md | 7 +++ .../deployment/scmu.md | 1 + .../integrated-servicepulse.md | 46 ++++++++++++++++++ ...upgrade-enable-integrated-servicepulse.png | Bin 0 -> 54691 bytes servicepulse/index.md | 2 + servicepulse/installation.md | 2 +- 11 files changed, 88 insertions(+), 5 deletions(-) create mode 100644 servicecontrol/servicecontrol-instances/integrated-servicepulse.md create mode 100644 servicecontrol/servicecontrol-instances/upgrade-enable-integrated-servicepulse.png diff --git a/Snippets/ServiceControl/ServiceControl_All/powershell-error.ps1 b/Snippets/ServiceControl/ServiceControl_All/powershell-error.ps1 index 197ec251e94..10526aa46d6 100644 --- a/Snippets/ServiceControl/ServiceControl_All/powershell-error.ps1 +++ b/Snippets/ServiceControl/ServiceControl_All/powershell-error.ps1 @@ -7,6 +7,7 @@ $serviceControlInstance = New-ServiceControlInstance ` -Port 33334 ` -DatabaseMaintenancePort 33335 ` -Transport MSMQ ` + -EnableIntegratedServicePulse ` -ErrorQueue error1 ` -ErrorRetentionPeriod 10:00:00:00 # endcode diff --git a/menu/menu.yaml b/menu/menu.yaml index 5e937047c2d..2cb2571f9bd 100644 --- a/menu/menu.yaml +++ b/menu/menu.yaml @@ -1576,6 +1576,8 @@ Articles: - Title: ServiceControl Error instances Url: servicecontrol/servicecontrol-instances + - Title: Integrated ServicePulse + Url: servicecontrol/servicecontrol-instances/integrated-servicepulse - Title: Deployment Url: servicecontrol/servicecontrol-instances/deployment Articles: diff --git a/platform/installation.md b/platform/installation.md index 9e7ddf5ba56..0a4fd1478da 100644 --- a/platform/installation.md +++ b/platform/installation.md @@ -52,17 +52,25 @@ ServiceControl, along with ServicePulse, can be hosted in Visual Studio, with no ServicePulse is a single page application which can be deployed in multiple ways: -#### Windows service +#### Integrated in ServiceControl + +ServiceControl version 6.12 and above includes [integrated ServicePulse](/servicecontrol/servicecontrol-instances/integrated-servicepulse.md) and can host ServicePulse from a ServiceControl Error instance host. + +#### Separate from ServiceControl + +ServicePulse can be installed as a separate application from ServiceControl, although it still must be connected to a ServiceControl Error instance to function. + +##### Windows service ServicePulse can be installed using a dedicated [installation package](https://particular.net/downloads), which deploys ServicePulse as a Windows service host. ServicePulse can be installed more than once on a single machine, with each instance listening on its own port. This is done by [specifying appropriate arguments during installation](/servicepulse/installation.md#installation-available-installation-parameters). -#### Container (Linux only) +##### Container (Linux only) A container image for ServicePulse is pushed to [Docker Hub](https://hub.docker.com/u/particular) creating the ability to deploy ServicePulse on a Linux and [OCI compatible](https://opencontainers.org/) container host, e.g. Docker or Kubernetes. -#### Extracted +##### Extracted Using the [installation package](https://particular.net/downloads), ServicePulse can be [extracted as a set of HTML, JavaScript, and CSS files](/servicepulse/install-servicepulse-in-iis.md#basic-setup-detailed-steps) and subsequently deployed to any web server. diff --git a/servicecontrol/index.md b/servicecontrol/index.md index d0bc1b0efec..4c69bceb4c3 100644 --- a/servicecontrol/index.md +++ b/servicecontrol/index.md @@ -15,7 +15,7 @@ For more information on how ServiceControl and ServicePulse work together, refer There are three types of instances that can be created: - [Error instances](/servicecontrol/servicecontrol-instances/) - This is the most commonly used ServiceControl instance and indispensable to ensure the smooth operation of an NServiceBus system. Together with ServicePulse, it provides the ability to visualize and retry failed messages. + This is the most commonly used ServiceControl instance and indispensable to ensure the smooth operation of an NServiceBus system. Together with ServicePulse (which can be [hosted in the ServiceControl Error instance](/servicecontrol/servicecontrol-instances/integrated-servicepulse.md)), it provides the ability to visualize and retry failed messages. - [Audit instances](/servicecontrol/audit-instances/) Audit instances provide valuable information about the message flow through a system. Among other things, this is used by ServicePulse to help visualize a distributed system. - [Monitoring instances](/servicecontrol/monitoring-instances/) diff --git a/servicecontrol/servicecontrol-instances/configuration.md b/servicecontrol/servicecontrol-instances/configuration.md index c5d40d01517..49033f7dfe5 100644 --- a/servicecontrol/servicecontrol-instances/configuration.md +++ b/servicecontrol/servicecontrol-instances/configuration.md @@ -175,6 +175,22 @@ Run [ServiceControl error instance in maintenance mode](/servicecontrol/ravendb/ | --- | --- | | bool | False | +### ServiceControl/EnableIntegratedServicePulse + +_Added in version 6.12.0_ + +Set to `true` to enable [integrated ServicePulse](/servicecontrol/servicecontrol-instances/integrated-servicepulse.md) included in ServiceControl versions 6.12 and above. + +| Context | Name | +| --- | --- | +| **Environment variable** | `SERVICECONTROL_ENABLEINTEGRATEDSERVICEPULSE` | +| **App config key** | `ServiceControl/EnableIntegratedServicePulse` | +| **SCMU field** | `Enable integrated ServicePulse` | + +| Type | Default value | +| --- | --- | +| bool | `false` | + ## [Authentication](/servicecontrol/security/configuration/authentication.md) These settings configure [authentication using OAuth 2.0 and OpenID Connect](/servicecontrol/security/). Refer to the [hosting and security guide](/servicecontrol/security/hosting-guide.md) or [authentication configuration examples](/servicecontrol/security/configuration/authentication.md#identity-provider-setup-configuration-examples) for additional information. diff --git a/servicecontrol/servicecontrol-instances/deployment/containers.md b/servicecontrol/servicecontrol-instances/deployment/containers.md index 060a485b3d7..d5fb38bfa78 100644 --- a/servicecontrol/servicecontrol-instances/deployment/containers.md +++ b/servicecontrol/servicecontrol-instances/deployment/containers.md @@ -17,6 +17,7 @@ docker run -d --name servicecontrol -p 33333:33333 \ -e CONNECTIONSTRING="host=rabbitmq" \ -e RAVENDB_CONNECTIONSTRING="http://servicecontrol-db:8080" \ -e REMOTEINSTANCES='[{"api_uri":"http://audit:44444/api"}]' \ + -e ENABLE_INTEGRATED_SERVICEPULSE="true" \ particular/servicecontrol:latest ``` @@ -65,6 +66,12 @@ _Environment variable:_ `REMOTEINSTANCES` A JSON structure that provides URLs for the Error instance to access any [remote audit instances](/servicecontrol/servicecontrol-instances/remotes.md). When requesting audit data via the ServiceControl API, the Error instance will communicate to each of the remote audit instances in a scatter-gather pattern and then return the combined results. The URLs must be accessible by the Error instance directly, not constructed to be accessible from an external browser. +### Enable integrated ServicePulse + +_Environment variable:_ `ENABLE_INTEGRATED_SERVICEPULSE` + +A boolean value whether to enable the [integrated ServicePulse](/servicecontrol/servicecontrol-instances/integrated-servicepulse.md) for this Error instance. + include: servicecontrol-container-license ## Ports diff --git a/servicecontrol/servicecontrol-instances/deployment/scmu.md b/servicecontrol/servicecontrol-instances/deployment/scmu.md index fba1a3cebf9..fe3dfc5b853 100644 --- a/servicecontrol/servicecontrol-instances/deployment/scmu.md +++ b/servicecontrol/servicecontrol-instances/deployment/scmu.md @@ -48,6 +48,7 @@ There are [three types](/servicecontrol/#servicecontrol-instance-types) of Servi This queue is important to endpoints that send error and audit messages to these ServiceControl instances, as well as [plugins](/servicecontrol/servicecontrol-instances/configuration.md#host-settings-servicecontrolinstancename). 6. If needed, configure [forwarding queues](/servicecontrol/errorlog-auditlog-behavior.md). 7. Full-text search can be turned off for [performance reasons](/servicecontrol/capacity-and-planning.md#storage-performance) if it's not needed. + 8. Disable [integrated ServicePulse](/servicecontrol/servicecontrol-instances/integrated-servicepulse.md) if it is not needed. A monitoring instance differs from error and audit instances in its configuration: diff --git a/servicecontrol/servicecontrol-instances/integrated-servicepulse.md b/servicecontrol/servicecontrol-instances/integrated-servicepulse.md new file mode 100644 index 00000000000..640921ea79e --- /dev/null +++ b/servicecontrol/servicecontrol-instances/integrated-servicepulse.md @@ -0,0 +1,46 @@ +--- +title: Integrated ServicePulse +summary: A guide to hosting ServicePulse and ServiceControl within the same host process. +reviewed: 2026-02-16 +component: ServiceControl +--- + +Version 6.12 of ServiceControl and above include integrated ServicePulse. Integrated ServicePulse is hosted in the same host process as the ServiceControl Error instance, and is automatically configured to use it. + +Benefits: +- No need for a standalone ServicePulse installation. Install and manage ServiceControl and ServicePulse in one place. +- No need to configure ServicePulse with ServiceControl Error instance url. Integrated ServicePulse is preconfigured to connect to the ServiceControl installation it runs in. +- No need to upgrade ServicePulse. Each new version of ServiceControl includes the latest ServicePulse. Every time ServiceControl is upgraded, integrated ServicePulse is upgraded as well. + +Drawbacks: +- Can not use built-in ServicePulse reverse proxy. Enable [security features of ServiceControl](/servicecontrol/security/) to secure access to ServiceControl data. +- Can not use a single ServicePulse instance to control multiple ServiceControl installations. Each ServiceControl Error instance can be configured with a dedicated integrated ServicePulse. + +>[!NOTE] +>Standalone ServicePulse installations continue to function normally and can be used in conjunction with integrated ServicePulse. + +## Enable integrated ServicePulse + +Integrated ServicePulse can be [enabled in the ServiceControl Error instance configuration](/servicecontrol/servicecontrol-instances/configuration.md#integrated-servicepulse). + +When upgrading an existing ServiceControl Error instance via ServiceControl Management, the user is prompted to enable integrated ServicePulse. + +![ServiceControl Management Error instance upgrade screen](/servicecontrol/servicecontrol-instances/upgrade-enable-integrated-servicepulse.png) + +When upgrading an existing ServiceControl Error instance via Powershell or docker, update the configuration manually to enable integrated ServicePulse. + +>[!NOTE] +>Once integrated ServicePulse is enabled, standalone ServicePulse installations can be safely removed. + +## Configuring integrated ServicePulse + +Integrated ServicePulse shares settings with the ServiceControl Error instance it is hosted with (the hosting instance). + +- All host settings (such as [host name](/servicecontrol/servicecontrol-instances/configuration.md#servicecontrolhostname) and [port number](/servicecontrol/servicecontrol-instances/configuration.md#servicecontrolport)) are shared with the hosting instance. Integrated ServicePulse is available at the root url (`http://localhost:33333/` in a default installation). +- All security settings are shared with the hosting instance. There is no need to enable [header forwarding](/servicecontrol/security/configuration/forward-headers.md), [CORS](/servicecontrol/security/configuration/cors.md), or [ServicePulse specific authorization configuration](/servicecontrol/servicecontrol-instances/configuration.md#servicecontrolauthenticationservicepulseclientid). +- Integrated ServicePulse is automatically configured to connect to the hosting instance. This configuration is read-only and cannot be changed. +- Connection to a ServiceControl Monitoring instance can be [configured via the ServicePulse UI](/servicepulse/host-config.md#configuring-connections-via-the-servicepulse-ui). + +## Upgrade integrated ServicePulse + +There is no need to upgrade integrated ServicePulse separately. Each release of ServiceControl contains the latest version of ServicePulse, and each new release of ServicePulse will trigger a release of ServiceControl. Upgrading the ServiceControl Error instance will upgrade integrated ServicePulse automatically. \ No newline at end of file diff --git a/servicecontrol/servicecontrol-instances/upgrade-enable-integrated-servicepulse.png b/servicecontrol/servicecontrol-instances/upgrade-enable-integrated-servicepulse.png new file mode 100644 index 0000000000000000000000000000000000000000..01d5929ca9042ae2ca20e2cb0b7966696b548588 GIT binary patch literal 54691 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 a&i@Y-{7i!o;)?_T0000 [!NOTE] -> It is also possible to run ServicePulse in a [container](containerization). +> This guide explains how to install ServicePulse using the standalone installer package. It is also possible to run ServicePulse [in ServiceControl](/servicecontrol/servicecontrol-instances/integrated-servicepulse.md) or in a [container](containerization). ## Prerequisites From c18e1f64fddf1311a568fd512a8dfca2d972b408 Mon Sep 17 00:00:00 2001 From: Mike Minutillo Date: Mon, 16 Feb 2026 16:43:59 +0800 Subject: [PATCH 2/9] Fix link --- .../servicecontrol-instances/integrated-servicepulse.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/servicecontrol/servicecontrol-instances/integrated-servicepulse.md b/servicecontrol/servicecontrol-instances/integrated-servicepulse.md index 640921ea79e..3cc62036a29 100644 --- a/servicecontrol/servicecontrol-instances/integrated-servicepulse.md +++ b/servicecontrol/servicecontrol-instances/integrated-servicepulse.md @@ -21,7 +21,7 @@ Drawbacks: ## Enable integrated ServicePulse -Integrated ServicePulse can be [enabled in the ServiceControl Error instance configuration](/servicecontrol/servicecontrol-instances/configuration.md#integrated-servicepulse). +Integrated ServicePulse can be [enabled in the ServiceControl Error instance configuration](/servicecontrol/servicecontrol-instances/configuration.md#servicecontrolenableintegratedservicepulse). When upgrading an existing ServiceControl Error instance via ServiceControl Management, the user is prompted to enable integrated ServicePulse. From 6c5dfda4d436dbe0881724318066756eea3e1e84 Mon Sep 17 00:00:00 2001 From: Mike Minutillo Date: Mon, 16 Feb 2026 16:46:39 +0800 Subject: [PATCH 3/9] Fix link again --- .../servicecontrol-instances/integrated-servicepulse.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/servicecontrol/servicecontrol-instances/integrated-servicepulse.md b/servicecontrol/servicecontrol-instances/integrated-servicepulse.md index 3cc62036a29..5529d1392c6 100644 --- a/servicecontrol/servicecontrol-instances/integrated-servicepulse.md +++ b/servicecontrol/servicecontrol-instances/integrated-servicepulse.md @@ -21,7 +21,7 @@ Drawbacks: ## Enable integrated ServicePulse -Integrated ServicePulse can be [enabled in the ServiceControl Error instance configuration](/servicecontrol/servicecontrol-instances/configuration.md#servicecontrolenableintegratedservicepulse). +Integrated ServicePulse can be [enabled in the ServiceControl Error instance configuration](/servicecontrol/servicecontrol-instances/configuration.md#host-settings-servicecontrolenableintegratedservicepulse). When upgrading an existing ServiceControl Error instance via ServiceControl Management, the user is prompted to enable integrated ServicePulse. From 0cb2d8e04d569ba5b76bbdf42a5810c5a2fa78d0 Mon Sep 17 00:00:00 2001 From: Mike Minutillo Date: Mon, 16 Feb 2026 16:50:01 +0800 Subject: [PATCH 4/9] Fix more links --- .../servicecontrol-instances/integrated-servicepulse.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/servicecontrol/servicecontrol-instances/integrated-servicepulse.md b/servicecontrol/servicecontrol-instances/integrated-servicepulse.md index 5529d1392c6..400c32b652a 100644 --- a/servicecontrol/servicecontrol-instances/integrated-servicepulse.md +++ b/servicecontrol/servicecontrol-instances/integrated-servicepulse.md @@ -36,8 +36,8 @@ When upgrading an existing ServiceControl Error instance via Powershell or docke Integrated ServicePulse shares settings with the ServiceControl Error instance it is hosted with (the hosting instance). -- All host settings (such as [host name](/servicecontrol/servicecontrol-instances/configuration.md#servicecontrolhostname) and [port number](/servicecontrol/servicecontrol-instances/configuration.md#servicecontrolport)) are shared with the hosting instance. Integrated ServicePulse is available at the root url (`http://localhost:33333/` in a default installation). -- All security settings are shared with the hosting instance. There is no need to enable [header forwarding](/servicecontrol/security/configuration/forward-headers.md), [CORS](/servicecontrol/security/configuration/cors.md), or [ServicePulse specific authorization configuration](/servicecontrol/servicecontrol-instances/configuration.md#servicecontrolauthenticationservicepulseclientid). +- All host settings (such as [host name](/servicecontrol/servicecontrol-instances/configuration.md#host-settings-servicecontrolhostname) and [port number](/servicecontrol/servicecontrol-instances/configuration.md#host-settings-servicecontrolport)) are shared with the hosting instance. Integrated ServicePulse is available at the root url (`http://localhost:33333/` in a default installation). +- All security settings are shared with the hosting instance. There is no need to enable [header forwarding](/servicecontrol/security/configuration/forward-headers.md), [CORS](/servicecontrol/security/configuration/cors.md), or [ServicePulse specific authorization configuration](/servicecontrol/servicecontrol-instances/configuration.md#authentication-servicecontrolauthentication-servicepulse-clientid). - Integrated ServicePulse is automatically configured to connect to the hosting instance. This configuration is read-only and cannot be changed. - Connection to a ServiceControl Monitoring instance can be [configured via the ServicePulse UI](/servicepulse/host-config.md#configuring-connections-via-the-servicepulse-ui). From 5a732ed267cabf4846bc4c60d434791f16ca1483 Mon Sep 17 00:00:00 2001 From: Mike Minutillo Date: Tue, 17 Feb 2026 15:53:29 +0800 Subject: [PATCH 5/9] Apply suggestions from code review Co-authored-by: Phil Bastian <155411597+PhilBastian@users.noreply.github.com> --- platform/installation.md | 2 +- servicecontrol/index.md | 2 +- .../deployment/containers.md | 2 +- .../integrated-servicepulse.md | 12 ++++++------ servicepulse/index.md | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/platform/installation.md b/platform/installation.md index 0a4fd1478da..c1bb5779a4b 100644 --- a/platform/installation.md +++ b/platform/installation.md @@ -54,7 +54,7 @@ ServicePulse is a single page application which can be deployed in multiple ways #### Integrated in ServiceControl -ServiceControl version 6.12 and above includes [integrated ServicePulse](/servicecontrol/servicecontrol-instances/integrated-servicepulse.md) and can host ServicePulse from a ServiceControl Error instance host. +ServiceControl version 6.12 and above includes [integrated ServicePulse](/servicecontrol/servicecontrol-instances/integrated-servicepulse.md) and can host ServicePulse from a ServiceControl [Error instance](/servicecontrol/servicecontrol-instances/) host. #### Separate from ServiceControl diff --git a/servicecontrol/index.md b/servicecontrol/index.md index 4c69bceb4c3..a43f81c4883 100644 --- a/servicecontrol/index.md +++ b/servicecontrol/index.md @@ -15,7 +15,7 @@ For more information on how ServiceControl and ServicePulse work together, refer There are three types of instances that can be created: - [Error instances](/servicecontrol/servicecontrol-instances/) - This is the most commonly used ServiceControl instance and indispensable to ensure the smooth operation of an NServiceBus system. Together with ServicePulse (which can be [hosted in the ServiceControl Error instance](/servicecontrol/servicecontrol-instances/integrated-servicepulse.md)), it provides the ability to visualize and retry failed messages. + This is the most commonly used ServiceControl instance and is indispensable to ensure the smooth operation of an NServiceBus system. Together with ServicePulse (which can be [hosted by the ServiceControl Error instance](/servicecontrol/servicecontrol-instances/integrated-servicepulse.md)), it provides the ability to visualize and retry failed messages. - [Audit instances](/servicecontrol/audit-instances/) Audit instances provide valuable information about the message flow through a system. Among other things, this is used by ServicePulse to help visualize a distributed system. - [Monitoring instances](/servicecontrol/monitoring-instances/) diff --git a/servicecontrol/servicecontrol-instances/deployment/containers.md b/servicecontrol/servicecontrol-instances/deployment/containers.md index d5fb38bfa78..58611f6f603 100644 --- a/servicecontrol/servicecontrol-instances/deployment/containers.md +++ b/servicecontrol/servicecontrol-instances/deployment/containers.md @@ -70,7 +70,7 @@ A JSON structure that provides URLs for the Error instance to access any [remote _Environment variable:_ `ENABLE_INTEGRATED_SERVICEPULSE` -A boolean value whether to enable the [integrated ServicePulse](/servicecontrol/servicecontrol-instances/integrated-servicepulse.md) for this Error instance. +A boolean value specifying whether to enable the [integrated ServicePulse](/servicecontrol/servicecontrol-instances/integrated-servicepulse.md) for this Error instance. include: servicecontrol-container-license diff --git a/servicecontrol/servicecontrol-instances/integrated-servicepulse.md b/servicecontrol/servicecontrol-instances/integrated-servicepulse.md index 400c32b652a..778003c5eae 100644 --- a/servicecontrol/servicecontrol-instances/integrated-servicepulse.md +++ b/servicecontrol/servicecontrol-instances/integrated-servicepulse.md @@ -9,15 +9,15 @@ Version 6.12 of ServiceControl and above include integrated ServicePulse. Integr Benefits: - No need for a standalone ServicePulse installation. Install and manage ServiceControl and ServicePulse in one place. -- No need to configure ServicePulse with ServiceControl Error instance url. Integrated ServicePulse is preconfigured to connect to the ServiceControl installation it runs in. +- No need to configure ServicePulse with the ServiceControl Error instance url. Integrated ServicePulse is preconfigured to connect to the ServiceControl installation it runs in. - No need to upgrade ServicePulse. Each new version of ServiceControl includes the latest ServicePulse. Every time ServiceControl is upgraded, integrated ServicePulse is upgraded as well. Drawbacks: - Can not use built-in ServicePulse reverse proxy. Enable [security features of ServiceControl](/servicecontrol/security/) to secure access to ServiceControl data. - Can not use a single ServicePulse instance to control multiple ServiceControl installations. Each ServiceControl Error instance can be configured with a dedicated integrated ServicePulse. ->[!NOTE] ->Standalone ServicePulse installations continue to function normally and can be used in conjunction with integrated ServicePulse. +> [!NOTE] +> Standalone ServicePulse installations continue to function normally and can be used in conjunction with integrated ServicePulse. ## Enable integrated ServicePulse @@ -29,12 +29,12 @@ When upgrading an existing ServiceControl Error instance via ServiceControl Mana When upgrading an existing ServiceControl Error instance via Powershell or docker, update the configuration manually to enable integrated ServicePulse. ->[!NOTE] ->Once integrated ServicePulse is enabled, standalone ServicePulse installations can be safely removed. +> [!NOTE] +> Once integrated ServicePulse is enabled, standalone ServicePulse installations are no longer needed and can be removed. ## Configuring integrated ServicePulse -Integrated ServicePulse shares settings with the ServiceControl Error instance it is hosted with (the hosting instance). +Integrated ServicePulse shares settings with the ServiceControl Error instance it is hosted by (the hosting instance). - All host settings (such as [host name](/servicecontrol/servicecontrol-instances/configuration.md#host-settings-servicecontrolhostname) and [port number](/servicecontrol/servicecontrol-instances/configuration.md#host-settings-servicecontrolport)) are shared with the hosting instance. Integrated ServicePulse is available at the root url (`http://localhost:33333/` in a default installation). - All security settings are shared with the hosting instance. There is no need to enable [header forwarding](/servicecontrol/security/configuration/forward-headers.md), [CORS](/servicecontrol/security/configuration/cors.md), or [ServicePulse specific authorization configuration](/servicecontrol/servicecontrol-instances/configuration.md#authentication-servicecontrolauthentication-servicepulse-clientid). diff --git a/servicepulse/index.md b/servicepulse/index.md index 1719e9df7dd..6c2f202bc8f 100644 --- a/servicepulse/index.md +++ b/servicepulse/index.md @@ -20,7 +20,7 @@ ServicePulse uses information provided by ServiceControl. To use ServicePulse, f - For message flow visualisation and viewing successful messages, one or more [audit instances](/servicecontrol/audit-instances/) are required. - For monitoring throughput and other metrics, a [monitoring instance](/servicecontrol/monitoring-instances/) is required. -[ServiceControl version 6.12 and above include ServicePulse](/servicecontrol/servicecontrol-instances/integrated-servicepulse.md). +[ServiceControl version 6.12 and above include integrated ServicePulse](/servicecontrol/servicecontrol-instances/integrated-servicepulse.md). #### Relationship between ServicePulse, ServiceControl, Monitoring, and Endpoints From 54ab98ce93d778cd29bb38e488a5bc3429a99220 Mon Sep 17 00:00:00 2001 From: Mike Minutillo Date: Wed, 18 Feb 2026 13:57:45 +0800 Subject: [PATCH 6/9] Note config that is ignored by integrated ServicePulse --- servicecontrol/security/configuration/cors.md | 4 ++++ servicepulse/security/configuration/forward-headers.md | 4 +++- servicepulse/security/configuration/tls.md | 4 +++- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/servicecontrol/security/configuration/cors.md b/servicecontrol/security/configuration/cors.md index 044399bd6ac..68c4546ab67 100644 --- a/servicecontrol/security/configuration/cors.md +++ b/servicecontrol/security/configuration/cors.md @@ -24,6 +24,10 @@ CORS configuration is required when: - ServicePulse is hosted on a different domain than ServiceControl - ServiceControl is accessed through a reverse proxy with a different domain +CORS configuration is *not* required when: + +- ServicePulse is [hosted by ServiceControl](/servicecontrol/servicecontrol-instances/integrated-servicepulse.md) + ## Configuration examples To restrict access to only your ServicePulse domain, using the primary ServiceControl instance: diff --git a/servicepulse/security/configuration/forward-headers.md b/servicepulse/security/configuration/forward-headers.md index e55b538f28d..ac069fedd58 100644 --- a/servicepulse/security/configuration/forward-headers.md +++ b/servicepulse/security/configuration/forward-headers.md @@ -9,7 +9,9 @@ related: --- > [!NOTE] -> This page is **not** relevant if the [ServicePulse static files have been extracted](/servicepulse/install-servicepulse-in-iis.md), and is being hosted in anything other than the [Container](/servicepulse/containerization/) or [Windows Service](/servicepulse/installation.md) hosting options provided. Forward header configuration is only required if using a reverse proxy. +> This page is **not** relevant if: +> - [integrated ServicePulse](/servicecontrol/servicecontrol-instances/integrated-servicepulse.md) is used. Integrated ServicePulse uses [the forward header configuration of the ServiceControl Error instance](/servicecontrol/security/configuration/forward-headers.md) that hosts it. +> - the [ServicePulse static files have been extracted](/servicepulse/install-servicepulse-in-iis.md), and is being hosted in anything other than the [Container](/servicepulse/containerization/) or [Windows Service](/servicepulse/installation.md) hosting options provided. Forward header configuration is only required if using a reverse proxy. When ServicePulse is deployed behind a reverse proxy that terminates SSL/TLS (like nginx, Traefik, or a cloud load balancer), you need to configure forwarded headers so ServicePulse correctly understands the original client request. diff --git a/servicepulse/security/configuration/tls.md b/servicepulse/security/configuration/tls.md index f15fc3aa484..f5d092bb38d 100644 --- a/servicepulse/security/configuration/tls.md +++ b/servicepulse/security/configuration/tls.md @@ -9,7 +9,9 @@ related: --- > [!NOTE] -> This page is **not** relevant if the [ServicePulse static files have been extracted](/servicepulse/install-servicepulse-in-iis.md), and is being hosted in anything other than the [Container](/servicepulse/containerization/) or [Windows Service](/servicepulse/installation.md) hosting options provided. If using [authentication](/servicepulse/security/configuration/authentication.md), it is recommended to use TLS encryption. +> This page is **not** relevant if: +> - [integrated ServicePulse](/servicecontrol/servicecontrol-instances/integrated-servicepulse.md) is used. Integrated ServicePulse will use [the TLS configuration of the ServiceControl Error instance](/servicecontrol/security/configuration/tls.md) that hosts it. +> - the [ServicePulse static files have been extracted](/servicepulse/install-servicepulse-in-iis.md), and is being hosted in anything other than the [Container](/servicepulse/containerization/) or [Windows Service](/servicepulse/installation.md) hosting options provided. If using [authentication](/servicepulse/security/configuration/authentication.md), it is recommended to use TLS encryption. ServicePulse can be configured to use HTTPS directly, enabling encrypted connections without relying on a reverse proxy for SSL termination. From a46c4e7de0996c302f38c2a3865c53679c346ae3 Mon Sep 17 00:00:00 2001 From: Mike Minutillo Date: Tue, 24 Feb 2026 12:56:09 +0800 Subject: [PATCH 7/9] Fix version number references --- platform/installation.md | 2 +- servicecontrol/servicecontrol-instances/configuration.md | 4 ++-- .../servicecontrol-instances/integrated-servicepulse.md | 2 +- servicepulse/index.md | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/platform/installation.md b/platform/installation.md index c1bb5779a4b..87773b296dc 100644 --- a/platform/installation.md +++ b/platform/installation.md @@ -54,7 +54,7 @@ ServicePulse is a single page application which can be deployed in multiple ways #### Integrated in ServiceControl -ServiceControl version 6.12 and above includes [integrated ServicePulse](/servicecontrol/servicecontrol-instances/integrated-servicepulse.md) and can host ServicePulse from a ServiceControl [Error instance](/servicecontrol/servicecontrol-instances/) host. +ServiceControl version 6.13 and above includes [integrated ServicePulse](/servicecontrol/servicecontrol-instances/integrated-servicepulse.md) and can host ServicePulse from a ServiceControl [Error instance](/servicecontrol/servicecontrol-instances/) host. #### Separate from ServiceControl diff --git a/servicecontrol/servicecontrol-instances/configuration.md b/servicecontrol/servicecontrol-instances/configuration.md index 49033f7dfe5..91e6ca748f0 100644 --- a/servicecontrol/servicecontrol-instances/configuration.md +++ b/servicecontrol/servicecontrol-instances/configuration.md @@ -177,9 +177,9 @@ Run [ServiceControl error instance in maintenance mode](/servicecontrol/ravendb/ ### ServiceControl/EnableIntegratedServicePulse -_Added in version 6.12.0_ +_Added in version 6.13.0_ -Set to `true` to enable [integrated ServicePulse](/servicecontrol/servicecontrol-instances/integrated-servicepulse.md) included in ServiceControl versions 6.12 and above. +Set to `true` to enable [integrated ServicePulse](/servicecontrol/servicecontrol-instances/integrated-servicepulse.md) included in ServiceControl versions 6.13 and above. | Context | Name | | --- | --- | diff --git a/servicecontrol/servicecontrol-instances/integrated-servicepulse.md b/servicecontrol/servicecontrol-instances/integrated-servicepulse.md index 778003c5eae..5195059febe 100644 --- a/servicecontrol/servicecontrol-instances/integrated-servicepulse.md +++ b/servicecontrol/servicecontrol-instances/integrated-servicepulse.md @@ -5,7 +5,7 @@ reviewed: 2026-02-16 component: ServiceControl --- -Version 6.12 of ServiceControl and above include integrated ServicePulse. Integrated ServicePulse is hosted in the same host process as the ServiceControl Error instance, and is automatically configured to use it. +Version 6.13 of ServiceControl and above include integrated ServicePulse. Integrated ServicePulse is hosted in the same host process as the ServiceControl Error instance, and is automatically configured to use it. Benefits: - No need for a standalone ServicePulse installation. Install and manage ServiceControl and ServicePulse in one place. diff --git a/servicepulse/index.md b/servicepulse/index.md index 6c2f202bc8f..d0b4fc5059f 100644 --- a/servicepulse/index.md +++ b/servicepulse/index.md @@ -20,7 +20,7 @@ ServicePulse uses information provided by ServiceControl. To use ServicePulse, f - For message flow visualisation and viewing successful messages, one or more [audit instances](/servicecontrol/audit-instances/) are required. - For monitoring throughput and other metrics, a [monitoring instance](/servicecontrol/monitoring-instances/) is required. -[ServiceControl version 6.12 and above include integrated ServicePulse](/servicecontrol/servicecontrol-instances/integrated-servicepulse.md). +[ServiceControl version 6.13 and above include integrated ServicePulse](/servicecontrol/servicecontrol-instances/integrated-servicepulse.md). #### Relationship between ServicePulse, ServiceControl, Monitoring, and Endpoints From b3f7a0ddaf3d2448e523941f5af663e12439f0d2 Mon Sep 17 00:00:00 2001 From: Mike Minutillo Date: Tue, 24 Feb 2026 12:59:23 +0800 Subject: [PATCH 8/9] Update servicecontrol/security/configuration/cors.md Co-authored-by: Warwick Schroeder --- servicecontrol/security/configuration/cors.md | 1 + 1 file changed, 1 insertion(+) diff --git a/servicecontrol/security/configuration/cors.md b/servicecontrol/security/configuration/cors.md index 68c4546ab67..89d38d6e62d 100644 --- a/servicecontrol/security/configuration/cors.md +++ b/servicecontrol/security/configuration/cors.md @@ -27,6 +27,7 @@ CORS configuration is required when: CORS configuration is *not* required when: - ServicePulse is [hosted by ServiceControl](/servicecontrol/servicecontrol-instances/integrated-servicepulse.md) +- ServicePulse is using the [internal reverse proxy](/servicepulse/containerization/#settings-enable-reverse-proxy). ## Configuration examples From 0537bea31ebeb7e2f4af5f1faeae9bc12a25824f Mon Sep 17 00:00:00 2001 From: Mike Minutillo Date: Tue, 24 Feb 2026 13:00:12 +0800 Subject: [PATCH 9/9] Update servicecontrol/servicecontrol-instances/integrated-servicepulse.md Co-authored-by: Warwick Schroeder --- .../servicecontrol-instances/integrated-servicepulse.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/servicecontrol/servicecontrol-instances/integrated-servicepulse.md b/servicecontrol/servicecontrol-instances/integrated-servicepulse.md index 5195059febe..45d88ef1627 100644 --- a/servicecontrol/servicecontrol-instances/integrated-servicepulse.md +++ b/servicecontrol/servicecontrol-instances/integrated-servicepulse.md @@ -37,7 +37,8 @@ When upgrading an existing ServiceControl Error instance via Powershell or docke Integrated ServicePulse shares settings with the ServiceControl Error instance it is hosted by (the hosting instance). - All host settings (such as [host name](/servicecontrol/servicecontrol-instances/configuration.md#host-settings-servicecontrolhostname) and [port number](/servicecontrol/servicecontrol-instances/configuration.md#host-settings-servicecontrolport)) are shared with the hosting instance. Integrated ServicePulse is available at the root url (`http://localhost:33333/` in a default installation). -- All security settings are shared with the hosting instance. There is no need to enable [header forwarding](/servicecontrol/security/configuration/forward-headers.md), [CORS](/servicecontrol/security/configuration/cors.md), or [ServicePulse specific authorization configuration](/servicecontrol/servicecontrol-instances/configuration.md#authentication-servicecontrolauthentication-servicepulse-clientid). +- Most security settings are shared with the hosting instance. There is no need to enable [header forwarding](/servicepulse/security/configuration/forward-headers.md) for ServicePulse specifically, and [CORS](/servicecontrol/security/configuration/cors.md) is no longer required +- [ServicePulse specific authorization configuration](/servicecontrol/servicecontrol-instances/configuration.md#authentication-servicecontrolauthentication-servicepulse-clientid) is still required. - Integrated ServicePulse is automatically configured to connect to the hosting instance. This configuration is read-only and cannot be changed. - Connection to a ServiceControl Monitoring instance can be [configured via the ServicePulse UI](/servicepulse/host-config.md#configuring-connections-via-the-servicepulse-ui).