SeaLights .NET Agent - Running multiple profilers simultaneously
This documents the steps to set the SeaLights agent to run alongside other profilers currently configured in your environment.
This is done by utilizing the Microsoft CLR Instrumentation profiler, designed to allow hosting multiple profilers simultaneously.
Configuring the Microsoft CLR Instrumentation Engine to run multiple profilers
Prerequisites for a multi-profiler setup
3rd party profiler is configured and supports Microsoft CLR Instrumentation technology. This can be verified by confirming the existence of the MicrosoftInstrumentationEngine_x64.dll in your system.
SeaLights environment variables are configured for the process or service from which coverage should be collected (see box at end of this page for a list)
Identify the 3rd party provider's Profiler ID and DLL location
Configuring the CLR Instrumentation Engine to support 2 profilers running simultaneously
Once we've confirmed our 3rd party profiler supports running with the CLR Instrumentation Engine, we will need to make some modifications:
Ensure the following environment variables are aligned:
COR_PROFILER={324F817A-7420-4E6D-B3C1-143FBED6D855}
COR_PROFILER_PATH_64=C:\<path to where the file is>\MicrosoftInstrumentationEngine_x64.dll
Prepare an XML file to link the two profilers to be referenced in the next step. Please note the following:
The first entry refers to the 3rd party profiler, which should run alongside SeaLights.
The second entry refers to the SeaLights .NET profiler.
The SeaLights Profiler DLL can be x64 or x86 architecture, depending on the architecture of the process from which coverage should be collected
Important: The path to each profiler DLL is relative to the location of this XML config file!
Placing all referenced binaries in the same folder as the XML configuration file will ensure they can be found.
MSCLR XML Configuration
<InstrumentationEngineConfiguration> <InstrumentationMethod> <Name>VS Profiler</Name> <Description>Visual Studio Profiler</Description> <Module>VSPerfCorProf.dll</Module> <ClassGuid>{33708259-ba1b-4add-9de4-d4f280ea1223}</ClassGuid> <Priority>60</Priority> </InstrumentationMethod> <InstrumentationMethod> <Name>SL Profiler</Name> <Description>Sealights .NET profiler</Description> <Module>SL.DotNet.ProfilerLib_x64.dll</Module> OR <Module>SL.DotNet.ProfilerLib_x86.dll</Module> <ClassGuid>{01CA2C22-DC03-4FF5-8350-59E32A3536BA}</ClassGuid> <Priority>50</Priority> </InstrumentationMethod> </InstrumentationEngineConfiguration>
Define 2 additional environment variables:
MicrosoftInstrumentationEngine_ConfigPath64_=C:\<Path to MSCLR XML Configuration file.xml>
MicrosoftInstrumentationEngine_DisableCodeSignatureValidation=1
When the service is restarted, it will be running SeaLights along with the 3rd party profiler, which will both run under the Microsoft CLR Instrumentation Engine.
Appendix A: Running SeaLights alongside Contrast Security:
When running SeaLights with Contrast Security, the configuration must be aligned with Contrast's implementation of profiler-chaining.
Refer to Contrast Security .NET Agent documentation for more information:
Pre-requisites for Contrast Security profiler chaining
Have Contrast Security installed & configured as a profiler
Have SeaLights installed & configured the required environment variables (see below)
Configuring Contrast Security to run additional profilers
In the Contrast agent configuration YAML, the enable_chaining property must be set to ‘true.’
Copy the following DLLs from the provided SeaLights installation to the folders specified below:
SL.DotNet.IpcLibrary-1.0.0.0_x64.DLL should be placed in c:\Windows\System32
SL.DotNet.IpcLibrary-1.0.0.0_x86.DLL should be placed in c:\Windows\SysWow64
Ensure the COR_PROFILER environment variable has the SeaLights profiler CLS ID: {01CA2C22-DC03-4FF5-8350-59E32A3536BA}
Once the above is completed and the service is restarted, it should start up with both profilers active.
If the profilers were chained successfully, 4 additional environment variables would appear with the CONTRAST_CCC prefix:
CONTRAST_CCC_COR_PROFILER
CONTRAST_CCC_COR_PROFILER_PATH
CONTRAST_CCC_COR_PROFILER_PATH_32
CONTRAST_CCC_COR_PROFILER_PATH_64
Standard SeaLights .NET Environment Variables
After installing the Sealights .Net agent locally on the environment, you need to apply the following environment variables to make it “registered” as a profiler.
Cor_Enable_Profiling=1
Cor_Profiler={01CA2C22-DC03-4FF5-8350-59E32A3536BA}
COR_PROFILER_PATH_32=<PATH TO SL.DotNet.ProfilerLib_x86.dll>
COR_PROFILER_PATH_64=<PATH TO SL.DotNet.ProfilerLib_x64.dll>
SL_CollectorId=GlobalCollector
Sealights had deprecated a couple of legacy variable names: Cor_Profiler_Path
and Sealights_CollectorId