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:

  1. 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

  2. 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>

         

  3. Define 2 additional environment variables: 

    • MicrosoftInstrumentationEngine_ConfigPath64_=C:\<Path to MSCLR XML Configuration file.xml>

    • MicrosoftInstrumentationEngine_DisableCodeSignatureValidation=1

  4. 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

  1. In the Contrast agent configuration YAML, the enable_chaining property must be set to ‘true.’

  2. 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

  3. Ensure the COR_PROFILER environment variable has the SeaLights profiler CLS ID: {01CA2C22-DC03-4FF5-8350-59E32A3536BA}

  4. Once the above is completed and the service is restarted, it should start up with both profilers active.

  5. 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