Use OTEL_DOTNET_AUTO_ as the env var prefix (#358)

* Remove support for OTEL_{0}_ENABLED env var

* Document OTEL_DOTNET_TRACER_HOME

* Rename OTEL_DOTNET_TRACER_HOME to OTEL_DOTNET_AUTO_HOME

* Rename OTEL_TRACE_ENABLED to OTEL_DOTNET_AUTO_ENABLED

* Rename OTEL_PROFILER_PROCESSES to OTEL_DOTNET_AUTO_INCLUDE_PROCESSES

* Rename OTEL_PROFILER_EXCLUDE_PROCESSES to OTEL_DOTNET_AUTO_EXCLUDE_PROCESSES

* Rename OTEL_AZURE_APP_SERVICES to OTEL_DOTNET_AUTO_AZURE_APP_SERVICES

* Rename OTEL_INTEGRATIONS to OTEL_DOTNET_AUTO_INTEGRATIONS_FILE

* Rename OTEL_DOTNET_TRACER_INSTRUMENTATIONS to OTEL_DOTNET_AUTO_ENABLED_INSTRUMENTATIONS

* Rename OTEL_DOTNET_TRACER_DISABLED_INSTRUMENTATIONS to OTEL_DOTNET_AUTO_DISABLED_INSTRUMENTATIONS

* Rename OTEL_TRACE_{0}_ENABLED to OTEL_DOTNET_AUTO_{0}_ENABLED

* Rename OTEL_TRACE_DOMAIN_NEUTRAL_INSTRUMENTATION to OTEL_DOTNET_AUTO_DOMAIN_NEUTRAL_INSTRUMENTATION

* Rename OTEL_CLR_DISABLE_OPTIMIZATIONS to OTEL_DOTNET_AUTO_CLR_DISABLE_OPTIMIZATIONS

* Rename OTEL_CLR_ENABLE_INLINING to OTEL_DOTNET_AUTO_CLR_ENABLE_INLINING

* Rename OTEL_CLR_ENABLE_NGEN to OTEL_DOTNET_AUTO_CLR_ENABLE_NGEN

* Rename OTEL_TRACE_LOG_DIRECTORY to OTEL_DOTNET_AUTO_LOG_DIRECTORY

* Rename OTEL_TRACE_LOG_PATH to OTEL_DOTNET_AUTO_LOG_PATH

* Rename OTEL_TRACE_DEBUG to OTEL_DOTNET_AUTO_DEBUG

* Rename OTEL_DOTNET_TRACER_CONSOLE_EXPORTER_ENABLED to OTEL_DOTNET_AUTO_CONSOLE_EXPORTER_ENABLED

* Rename OTEL_DUMP_ILREWRITE_ENABLED to OTEL_DOTNET_AUTO_DUMP_ILREWRITE_ENABLED

* Rename OTEL_DOTNET_TRACER_LOAD_AT_STARTUP to OTEL_DOTNET_AUTO_LOAD_AT_STARTUP

* Rename OTEL_DOTNET_TRACER_ADDITIONAL_SOURCES to OTEL_DOTNET_AUTO_ADDITIONAL_SOURCES

* Rename OTEL_DOTNET_TRACER_LEGACY_SOURCES to OTEL_DOTNET_AUTO_LEGACY_SOURCES

* Rename OTEL_DOTNET_TRACER_INSTRUMENTATION_PLUGINS to OTEL_DOTNET_AUTO_INSTRUMENTATION_PLUGINS

* Rename OTEL_INTERNAL_TRACE_NATIVE_ENGINE_PATH to OTEL_DOTNET_AUTO_INTERNAL_NATIVE_ENGINE_PATH
This commit is contained in:
Robert Pająk 2022-02-14 19:22:28 +01:00 committed by GitHub
parent eb7512dfc7
commit b62129eb4d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
22 changed files with 116 additions and 117 deletions

View File

@ -2,5 +2,5 @@ export CORECLR_ENABLE_PROFILING=1
export CORECLR_PROFILER='{918728DD-259F-4A6A-AC2B-B85E1B658318}'
export CORECLR_PROFILER_PATH=/opt/opentelemetry-dotnet-autoinstrumentation/OpenTelemetry.ClrProfiler.Native.so
export DOTNET_STARTUP_HOOKS=/opt/opentelemetry-dotnet-autoinstrumentation/OpenTelemetry.Instrumentation.StartupHook.dll
export OTEL_INTEGRATIONS=/opt/opentelemetry-dotnet-autoinstrumentation/integrations.json
export OTEL_DOTNET_TRACER_HOME=/opt/opentelemetry-dotnet-autoinstrumentation
export OTEL_DOTNET_AUTO_INTEGRATIONS_FILE=/opt/opentelemetry-dotnet-autoinstrumentation/integrations.json
export OTEL_DOTNET_AUTO_HOME=/opt/opentelemetry-dotnet-autoinstrumentation

View File

@ -56,9 +56,8 @@ fi
export DOTNET_STARTUP_HOOKS="${CURDIR}/bin/tracer-home/netcoreapp3.1/OpenTelemetry.Instrumentation.StartupHook.dll"
# Configure OpenTelemetry Tracer
export OTEL_DOTNET_TRACER_HOME="${CURDIR}/bin/tracer-home"
export OTEL_INTEGRATIONS="${CURDIR}/bin/tracer-home/integrations.json"
export OTEL_TRACE_DEBUG="1"
export OTEL_DUMP_ILREWRITE_ENABLED="0"
export OTEL_CLR_ENABLE_INLINING="1"
export OTEL_PROFILER_EXCLUDE_PROCESSES="dotnet.exe,dotnet"
export OTEL_DOTNET_AUTO_HOME="${CURDIR}/bin/tracer-home"
export OTEL_DOTNET_AUTO_INTEGRATIONS_FILE="${CURDIR}/bin/tracer-home/integrations.json"
export OTEL_DOTNET_AUTO_DEBUG="1"
export OTEL_DOTNET_AUTO_DUMP_ILREWRITE_ENABLED="0"
export OTEL_DOTNET_AUTO_EXCLUDE_PROCESSES="dotnet.exe,dotnet"

View File

@ -48,11 +48,11 @@ SET CORECLR_PROFILER={918728DD-259F-4A6A-AC2B-B85E1B658318}
SET CORECLR_PROFILER_PATH=%~dp0\src\OpenTelemetry.ClrProfiler.Native\bin\%profiler_configuration%\%profiler_platform%\OpenTelemetry.ClrProfiler.Native.dll
rem Don't attach the profiler to these processes
SET OTEL_PROFILER_EXCLUDE_PROCESSES=devenv.exe;Microsoft.ServiceHub.Controller.exe;ServiceHub.Host.CLR.exe;ServiceHub.TestWindowStoreHost.exe;ServiceHub.DataWarehouseHost.exe;sqlservr.exe;VBCSCompiler.exe;iisexpresstray.exe;msvsmon.exe;PerfWatson2.exe;ServiceHub.IdentityHost.exe;ServiceHub.VSDetouredHost.exe;ServiceHub.SettingsHost.exe;ServiceHub.Host.CLR.x86.exe;vstest.console.exe;ServiceHub.RoslynCodeAnalysisService32.exe;testhost.x86.exe;MSBuild.exe;ServiceHub.ThreadedWaitDialog.exe
SET OTEL_DOTNET_AUTO_EXCLUDE_PROCESSES=devenv.exe;Microsoft.ServiceHub.Controller.exe;ServiceHub.Host.CLR.exe;ServiceHub.TestWindowStoreHost.exe;ServiceHub.DataWarehouseHost.exe;sqlservr.exe;VBCSCompiler.exe;iisexpresstray.exe;msvsmon.exe;PerfWatson2.exe;ServiceHub.IdentityHost.exe;ServiceHub.VSDetouredHost.exe;ServiceHub.SettingsHost.exe;ServiceHub.Host.CLR.x86.exe;vstest.console.exe;ServiceHub.RoslynCodeAnalysisService32.exe;testhost.x86.exe;MSBuild.exe;ServiceHub.ThreadedWaitDialog.exe
rem Set dotnet tracer home path
SET OTEL_DOTNET_TRACER_HOME=%~dp0
SET OTEL_INTEGRATIONS=%OTEL_DOTNET_TRACER_HOME%\integrations.json
SET OTEL_DOTNET_AUTO_HOME=%~dp0
SET OTEL_DOTNET_AUTO_INTEGRATIONS_FILE=%OTEL_DOTNET_AUTO_HOME%\integrations.json
if "%start_visual_studio%" == "true" (
echo Starting Visual Studio...

View File

@ -59,7 +59,7 @@ injected into the application.
contains the code setting up the OpenTelemtry .NET SDK and configured instrumentations.
Plus, support code to run and implement bytecode instrumentations. Optionally, the code
setting-up the OpenTelemetry .NET SDK can be left to the application by setting the
environment variable `OTEL_DOTNET_TRACER_LOAD_AT_STARTUP` to `false`.
environment variable `OTEL_DOTNET_AUTO_LOAD_AT_STARTUP` to `false`.
- **Source Instrumentations**: instrumentations created on top of API hooks/callbacks provided
directly by the library/framework being instrumented. This type of instrumentation depends on the

View File

@ -8,10 +8,11 @@
| Environment variable | Description | Default |
|-|-|-|
| `OTEL_TRACE_ENABLED` | Enable to activate the tracer. | `true` |
| `OTEL_PROFILER_PROCESSES` | Sets the filename of executables the profiler can attach to. If not defined (default), the profiler will attach to any process. Supports multiple values separated with comma, for example: `MyApp.exe,dotnet.exe` | |
| `OTEL_PROFILER_EXCLUDE_PROCESSES` | Sets the filename of executables the profiler cannot attach to. If not defined (default), the profiler will attach to any process. Supports multiple values separated with comma, for example: `MyApp.exe,dotnet.exe` | |
| `OTEL_AZURE_APP_SERVICES` | Set to indicate that the profiler is running in the context of Azure App Services. | `false` |
| `OTEL_DOTNET_AUTO_HOME` | Installation location. | `true` |
| `OTEL_DOTNET_AUTO_ENABLED` | Enable to activate the tracer. | `true` |
| `OTEL_DOTNET_AUTO_INCLUDE_PROCESSES` | Sets the filename of executables the profiler can attach to. If not defined (default), the profiler will attach to any process. Supports multiple values separated with comma, for example: `MyApp.exe,dotnet.exe` | |
| `OTEL_DOTNET_AUTO_EXCLUDE_PROCESSES` | Sets the filename of executables the profiler cannot attach to. If not defined (default), the profiler will attach to any process. Supports multiple values separated with comma, for example: `MyApp.exe,dotnet.exe` | |
| `OTEL_DOTNET_AUTO_AZURE_APP_SERVICES` | Set to indicate that the profiler is running in the context of Azure App Services. | `false` |
### Resource
@ -28,14 +29,14 @@ for more details.
| Environment variable | Description | Default |
|-|-|-|
| `OTEL_INTEGRATIONS` | The file path of bytecode instrumentations JSON configuration file. Usually it should be set to `%ProfilerDirectory%/integrations.json` | |
| `OTEL_DOTNET_TRACER_INSTRUMENTATIONS` | The instrumentations you want to enable, separated by a comma. Supported values: `AspNet`, `HttpClient`, `SqlClient`, `MongoDb`. | |
| `OTEL_DOTNET_TRACER_DISABLED_INSTRUMENTATIONS` | The instrumentations set via `OTEL_DOTNET_TRACER_INSTRUMENTATIONS` value and `OTEL_INTEGRATIONS` configuration file you want to disable, separated by a comma. | |
| `OTEL_TRACE_{0}_ENABLED` | Configuration pattern for enabling or disabling a specific bytecode. For example, in order to disable MongoDb instrumentation, set `OTEL_TRACE_MongoDb_ENABLED=false` | `true` |
| `OTEL_TRACE_DOMAIN_NEUTRAL_INSTRUMENTATION` | Sets whether to intercept method calls when the caller method is inside a domain-neutral assembly. This is recommended when instrumenting IIS applications. | `false` |
| `OTEL_CLR_DISABLE_OPTIMIZATIONS` | Set to `true` to disable all JIT optimizations. | `false` |
| `OTEL_CLR_ENABLE_INLINING` | Set to `false` to disable JIT inlining. | `true` |
| `OTEL_CLR_ENABLE_NGEN` | Set to `false` to disable NGEN images. | `true` |
| `OTEL_DOTNET_AUTO_INTEGRATIONS_FILE` | The file path of bytecode instrumentations JSON configuration file. Usually it should be set to `%ProfilerDirectory%/integrations.json` | |
| `OTEL_DOTNET_AUTO_ENABLED_INSTRUMENTATIONS` | The instrumentations you want to enable, separated by a comma. Supported values: `AspNet`, `HttpClient`, `SqlClient`, `MongoDb`. | |
| `OTEL_DOTNET_AUTO_DISABLED_INSTRUMENTATIONS` | The instrumentations set via `OTEL_DOTNET_AUTO_ENABLED_INSTRUMENTATIONS` value and `OTEL_DOTNET_AUTO_INTEGRATIONS_FILE` configuration file you want to disable, separated by a comma. | |
| `OTEL_DOTNET_AUTO_{0}_ENABLED` | Configuration pattern for enabling or disabling a specific bytecode. For example, in order to disable MongoDb instrumentation, set `OTEL_TRACE_MongoDb_ENABLED=false` | `true` |
| `OTEL_DOTNET_AUTO_DOMAIN_NEUTRAL_INSTRUMENTATION` | Sets whether to intercept method calls when the caller method is inside a domain-neutral assembly. This is recommended when instrumenting IIS applications. | `false` |
| `OTEL_DOTNET_AUTO_CLR_DISABLE_OPTIMIZATIONS` | Set to `true` to disable all JIT optimizations. | `false` |
| `OTEL_DOTNET_AUTO_CLR_ENABLE_INLINING` | Set to `false` to disable JIT inlining. | `true` |
| `OTEL_DOTNET_AUTO_CLR_ENABLE_NGEN` | Set to `false` to disable NGEN images. | `true` |
### ASP.NET (.NET Framework) Instrumentation
@ -53,11 +54,11 @@ Default logs directory paths are:
| Environment variable | Description | Default |
|-|-|-|
| `OTEL_TRACE_LOG_DIRECTORY` | The directory of the .NET Tracer logs. Overrides the value in `OTEL_TRACE_LOG_PATH` if present. | _see above_ |
| `OTEL_TRACE_LOG_PATH` | The path of the profiler log file. | _see above_ |
| `OTEL_TRACE_DEBUG` | Enable to activate debugging mode for the tracer. | `false` |
| `OTEL_DOTNET_TRACER_CONSOLE_EXPORTER_ENABLED` | Defines whether the console exporter is enabled or not. | `true` |
| `OTEL_DUMP_ILREWRITE_ENABLED` | Allows the profiler to dump the IL original code and modification to the log. | `false` |
| `OTEL_DOTNET_AUTO_LOG_DIRECTORY` | The directory of the .NET Tracer logs. Overrides the value in `OTEL_DOTNET_AUTO_LOG_PATH` if present. | _see above_ |
| `OTEL_DOTNET_AUTO_LOG_PATH` | The path of the profiler log file. | _see above_ |
| `OTEL_DOTNET_AUTO_DEBUG` | Enable to activate debugging mode for the tracer. | `false` |
| `OTEL_DOTNET_AUTO_CONSOLE_EXPORTER_ENABLED` | Defines whether the console exporter is enabled or not. | `true` |
| `OTEL_DOTNET_AUTO_DUMP_ILREWRITE_ENABLED` | Allows the profiler to dump the IL original code and modification to the log. | `false` |
### Exporters
@ -96,22 +97,22 @@ The Batch Span Processor batches of finished spans before they are send by the e
| Environment variable | Description | Default |
|-|-|-|
| `OTEL_DOTNET_TRACER_LOAD_AT_STARTUP` | Defines whether the tracer is created by the auto instrumentation library or not. | `true` |
| `OTEL_DOTNET_TRACER_ADDITIONAL_SOURCES` | Comma separated list of additional `ActivitySource` names to be added to the tracer at the startup. | |
| `OTEL_DOTNET_TRACER_LEGACY_SOURCES` | Comma separated list of additional legacy source names to be added to the tracer at the startup. | |
| `OTEL_DOTNET_TRACER_INSTRUMENTATION_PLUGINS` | Colon (:) separated list of OTel SDK instrumentation plugins represented by `System.Type.AssemblyQualifiedName`. | |
| `OTEL_DOTNET_AUTO_LOAD_AT_STARTUP` | Defines whether the tracer is created by the auto instrumentation library or not. | `true` |
| `OTEL_DOTNET_AUTO_ADDITIONAL_SOURCES` | Comma separated list of additional `ActivitySource` names to be added to the tracer at the startup. | |
| `OTEL_DOTNET_AUTO_LEGACY_SOURCES` | Comma separated list of additional legacy source names to be added to the tracer at the startup. | |
| `OTEL_DOTNET_AUTO_INSTRUMENTATION_PLUGINS` | Colon (:) separated list of OTel SDK instrumentation plugins represented by `System.Type.AssemblyQualifiedName`. | |
`OTEL_DOTNET_TRACER_LOAD_AT_STARTUP` should be set to `false` when application
`OTEL_DOTNET_AUTO_LOAD_AT_STARTUP` should be set to `false` when application
initializes OpenTelemetry .NET SDK Tracer on its own. This configuration can be
used e.g. to just get the bytecode instrumentations.
`OTEL_DOTNET_TRACER_ADDITIONAL_SOURCES` should be used to capture manually
`OTEL_DOTNET_AUTO_ADDITIONAL_SOURCES` should be used to capture manually
instrumented spans.
`OTEL_DOTNET_TRACER_LEGACY_SOURCES` can be used to capture `Activity` objects
`OTEL_DOTNET_AUTO_LEGACY_SOURCES` can be used to capture `Activity` objects
created without using the `ActivitySource` API.
`OTEL_DOTNET_TRACER_INSTRUMENTATION_PLUGINS` can be used to extend the
`OTEL_DOTNET_AUTO_INSTRUMENTATION_PLUGINS` can be used to extend the
configuration of the the OpenTelemetry .NET SDK Tracer. A plugin must be a
non-static, non-abstract class which has a default constructor and a method
with following signature:
@ -180,7 +181,7 @@ cat /proc/version
The default installation of auto-instrumentation enables tracing all .NET processes on the box.
In the typical scenarios (dedicated VMs or containers), this is not a problem.
Use the environment variables `OTEL_PROFILER_EXCLUDE_PROCESSES` and `OTEL_PROFILER_PROCESSES`
Use the environment variables `OTEL_DOTNET_AUTO_EXCLUDE_PROCESSES` and `OTEL_DOTNET_AUTO_INCLUDE_PROCESSES`
to include/exclude applications from the tracing auto-instrumentation.
These are ";" delimited lists that control the inclusion/exclusion of processes.
@ -201,10 +202,10 @@ you can also manually add binding redirection to [the `App.config` file](../samp
If none of the suggestions above solves your issue, detailed logs are necessary.
Follow the steps below to get the detailed logs from OpenTelemetry AutoInstrumentation for .NET:
Set the environment variable `OTEL_TRACE_DEBUG` to `true` before the instrumented process starts.
Set the environment variable `OTEL_DOTNET_AUTO_DEBUG` to `true` before the instrumented process starts.
By default, the library writes the log files under the below predefined locations.
If needed, change the default location by updating the environment variable `OTEL_TRACE_LOG_PATH` to an appropriate path.
If needed, change the default location by updating the environment variable `OTEL_DOTNET_AUTO_LOG_PATH` to an appropriate path.
On Linux, the default log location is `/var/log/opentelemetry/dotnet/`
On Windows, the default log location is `%ProgramData%\\OpenTelemetry .NET AutoInstrumentation\logs\`
Compress the whole folder to capture the multiple log files and send the compressed folder to us.
After obtaining the logs, remember to remove the environment variable `OTEL_TRACE_DEBUG` to avoid unnecessary overhead.
After obtaining the logs, remember to remove the environment variable `OTEL_DOTNET_AUTO_DEBUG` to avoid unnecessary overhead.

8
poc.sh
View File

@ -43,13 +43,13 @@ docker run -d --rm --name jaeger \
jaegertracing/all-in-one:1.22
# instrument and run HTTP server app in background
export OTEL_DOTNET_TRACER_INSTRUMENTATION_PLUGINS="Samples.AspNetCoreMvc.OtelSdkPlugin, Samples.AspNetCoreMvc31, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null:Vendor.Distro.Plugin, Vendor.Distro, Version=0.0.1.0, Culture=neutral, PublicKeyToken=null"
./dev/instrument.sh OTEL_DOTNET_TRACER_INSTRUMENTATIONS="AspNet,SqlClient,MongoDb" OTEL_SERVICE_NAME="aspnet-server" ASPNETCORE_URLS="http://127.0.0.1:8080/" dotnet run --no-launch-profile -f $aspNetAppTargetFramework --project ./samples/Samples.AspNetCoreMvc31/Samples.AspNetCoreMvc31.csproj &
unset OTEL_DOTNET_TRACER_INSTRUMENTATION_PLUGINS
export OTEL_DOTNET_AUTO_INSTRUMENTATION_PLUGINS="Samples.AspNetCoreMvc.OtelSdkPlugin, Samples.AspNetCoreMvc31, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null:Vendor.Distro.Plugin, Vendor.Distro, Version=0.0.1.0, Culture=neutral, PublicKeyToken=null"
./dev/instrument.sh OTEL_DOTNET_AUTO_ENABLED_INSTRUMENTATIONS="AspNet,SqlClient,MongoDb" OTEL_SERVICE_NAME="aspnet-server" ASPNETCORE_URLS="http://127.0.0.1:8080/" dotnet run --no-launch-profile -f $aspNetAppTargetFramework --project ./samples/Samples.AspNetCoreMvc31/Samples.AspNetCoreMvc31.csproj &
unset OTEL_DOTNET_AUTO_INSTRUMENTATION_PLUGINS
./dev/wait-local-port.sh 8080
# instrument and run HTTP client app
time ./dev/instrument.sh OTEL_DOTNET_TRACER_INSTRUMENTATIONS="HttpClient" OTEL_SERVICE_NAME="http-client" dotnet run --no-launch-profile -f $sampleAppTargetFramework --project ./samples/${sampleApp}/${sampleApp}.csproj
time ./dev/instrument.sh OTEL_DOTNET_AUTO_ENABLED_INSTRUMENTATIONS="HttpClient" OTEL_SERVICE_NAME="http-client" dotnet run --no-launch-profile -f $sampleAppTargetFramework --project ./samples/${sampleApp}/${sampleApp}.csproj
# verify if it works
read -p "Check traces under: http://localhost:16686/search. Press enter to continue"

View File

@ -19,8 +19,8 @@
"CORECLR_PROFILER_PATH": "$(SolutionDir)bin\\tracer-home\\win-x64\\OpenTelemetry.ClrProfiler.Native.dll",
"DOTNET_STARTUP_HOOKS": "$(SolutionDir)bin\\tracer-home\\netcoreapp3.1\\OpenTelemetry.Instrumentation.StartupHook.dll",
"OTEL_DOTNET_TRACER_HOME": "$(SolutionDir)bin\\tracer-home",
"OTEL_INTEGRATIONS": "$(SolutionDir)bin\\tracer-home\\integrations.json",
"OTEL_DOTNET_AUTO_HOME": "$(SolutionDir)bin\\tracer-home",
"OTEL_DOTNET_AUTO_INTEGRATIONS_FILE": "$(SolutionDir)bin\\tracer-home\\integrations.json",
"OTEL_SERVICE_NAME": "Samples.AspNetCoreMvc31",
"OTEL_TRACES_EXPORTER": "jaeger",
"OTEL_EXPORTER_JAEGER_AGENT_HOST": "localhost",
@ -40,8 +40,8 @@
"CORECLR_PROFILER_PATH": "$(SolutionDir)bin\\tracer-home$(OutputPath)\\OpenTelemetry.ClrProfiler.Native.dll",
"DOTNET_STARTUP_HOOKS": "$(SolutionDir)bin\\tracer-home\\netcoreapp3.1\\OpenTelemetry.Instrumentation.StartupHook.dll",
"OTEL_DOTNET_TRACER_HOME": "$(SolutionDir)bin\\tracer-home",
"OTEL_INTEGRATIONS": "$(SolutionDir)bin\\tracer-home\\integrations.json",
"OTEL_DOTNET_AUTO_HOME": "$(SolutionDir)bin\\tracer-home",
"OTEL_DOTNET_AUTO_INTEGRATIONS_FILE": "$(SolutionDir)bin\\tracer-home\\integrations.json",
"OTEL_SERVICE_NAME": "Samples.AspNetCoreMvc31",
"OTEL_TRACES_EXPORTER": "jaeger",

View File

@ -21,7 +21,7 @@
"OTEL_SERVICE_NAME": "Samples.StartupHook.AspNetCoreMvc31",
"OTEL_DOTNET_TRACER_INSTRUMENTATIONS": "AspNet,HttpClient",
"OTEL_DOTNET_AUTO_ENABLED_INSTRUMENTATIONS": "AspNet,HttpClient",
"OTEL_TRACES_EXPORTER": "zipkin",
"OTEL_EXPORTER_ZIPKIN_ENDPOINT": "http://localhost:9411/api/v2/spans"
@ -41,7 +41,7 @@
"OTEL_SERVICE_NAME": "Samples.StartupHook.AspNetCoreMvc31",
"OTEL_DOTNET_TRACER_INSTRUMENTATIONS": "AspNet,HttpClient",
"OTEL_DOTNET_AUTO_ENABLED_INSTRUMENTATIONS": "AspNet,HttpClient",
"OTEL_TRACES_EXPORTER": "zipkin",
"OTEL_EXPORTER_ZIPKIN_ENDPOINT": "http://localhost:9411/api/v2/spans"

View File

@ -15,7 +15,7 @@ namespace OpenTelemetry.ClrProfiler.Managed.Loader
private static string ResolveManagedProfilerDirectory()
{
string tracerFrameworkDirectory = "netcoreapp3.1";
string tracerHomeDirectory = ReadEnvironmentVariable("OTEL_DOTNET_TRACER_HOME") ?? string.Empty;
string tracerHomeDirectory = ReadEnvironmentVariable("OTEL_DOTNET_AUTO_HOME") ?? string.Empty;
return Path.Combine(tracerHomeDirectory, tracerFrameworkDirectory);
}

View File

@ -13,7 +13,7 @@ namespace OpenTelemetry.ClrProfiler.Managed.Loader
{
private static string ResolveManagedProfilerDirectory()
{
var tracerHomeDirectory = ReadEnvironmentVariable("OTEL_DOTNET_TRACER_HOME") ?? string.Empty;
var tracerHomeDirectory = ReadEnvironmentVariable("OTEL_DOTNET_AUTO_HOME") ?? string.Empty;
var tracerFrameworkDirectory = "net461";
return Path.Combine(tracerHomeDirectory, tracerFrameworkDirectory);
}

View File

@ -61,11 +61,11 @@ namespace OpenTelemetry.ClrProfiler.Managed.Loader
try
{
logDirectory = Environment.GetEnvironmentVariable("OTEL_TRACE_LOG_DIRECTORY");
logDirectory = Environment.GetEnvironmentVariable("OTEL_DOTNET_AUTO_LOG_DIRECTORY");
if (logDirectory == null)
{
var nativeLogFile = Environment.GetEnvironmentVariable("OTEL_TRACE_LOG_PATH");
var nativeLogFile = Environment.GetEnvironmentVariable("OTEL_DOTNET_AUTO_LOG_PATH");
if (!string.IsNullOrEmpty(nativeLogFile))
{
@ -143,7 +143,7 @@ namespace OpenTelemetry.ClrProfiler.Managed.Loader
{
try
{
var ddTraceDebugValue = Environment.GetEnvironmentVariable("OTEL_TRACE_DEBUG");
var ddTraceDebugValue = Environment.GetEnvironmentVariable("OTEL_DOTNET_AUTO_DEBUG");
if (ddTraceDebugValue == null)
{

View File

@ -12,12 +12,12 @@ namespace OpenTelemetry.ClrProfiler.Managed.Configuration
/// Default is value is true (enabled).
/// </summary>
/// <seealso cref="Settings.TraceEnabled"/>
public const string TraceEnabled = "OTEL_TRACE_ENABLED";
public const string TraceEnabled = "OTEL_DOTNET_AUTO_ENABLED";
/// <summary>
/// Configuration key for whether the tracer should be initialized by the profiler or not.
/// </summary>
public const string LoadTracerAtStartup = "OTEL_DOTNET_TRACER_LOAD_AT_STARTUP";
public const string LoadTracerAtStartup = "OTEL_DOTNET_AUTO_LOAD_AT_STARTUP";
/// <summary>
/// Configuration key for the traces exporter to be used.
@ -39,32 +39,32 @@ namespace OpenTelemetry.ClrProfiler.Managed.Configuration
/// <summary>
/// Configuration key for whether the console exporter is enabled.
/// </summary>
public const string ConsoleExporterEnabled = "OTEL_DOTNET_TRACER_CONSOLE_EXPORTER_ENABLED";
public const string ConsoleExporterEnabled = "OTEL_DOTNET_AUTO_CONSOLE_EXPORTER_ENABLED";
/// <summary>
/// Configuration key for comma separated list of enabled instrumentations.
/// </summary>
public const string Instrumentations = "OTEL_DOTNET_TRACER_INSTRUMENTATIONS";
public const string Instrumentations = "OTEL_DOTNET_AUTO_ENABLED_INSTRUMENTATIONS";
/// <summary>
/// Configuration key for comma separated list of disabled instrumentations.
/// </summary>
public const string DisabledInstrumentations = "OTEL_DOTNET_TRACER_DISABLED_INSTRUMENTATIONS";
public const string DisabledInstrumentations = "OTEL_DOTNET_AUTO_DISABLED_INSTRUMENTATIONS";
/// <summary>
/// Configuration key for colon (:) separated list of plugins represented by <see cref="System.Type.AssemblyQualifiedName"/>.
/// </summary>
public const string ProviderPlugins = "OTEL_DOTNET_TRACER_INSTRUMENTATION_PLUGINS";
public const string ProviderPlugins = "OTEL_DOTNET_AUTO_INSTRUMENTATION_PLUGINS";
/// <summary>
/// Configuration key for additional <see cref="ActivitySource"/> names to be added to the tracer at the startup.
/// </summary>
public const string AdditionalSources = "OTEL_DOTNET_TRACER_ADDITIONAL_SOURCES";
public const string AdditionalSources = "OTEL_DOTNET_AUTO_ADDITIONAL_SOURCES";
/// <summary>
/// Configuration key for legacy source names to be added to the tracer at the startup.
/// </summary>
public const string LegacySources = "OTEL_DOTNET_TRACER_LEGACY_SOURCES";
public const string LegacySources = "OTEL_DOTNET_AUTO_LEGACY_SOURCES";
/// <summary>
/// String format patterns used to match integration-specific configuration keys.
@ -74,7 +74,7 @@ namespace OpenTelemetry.ClrProfiler.Managed.Configuration
/// <summary>
/// Configuration key pattern for enabling or disabling an integration.
/// </summary>
public const string Enabled = "OTEL_TRACE_{0}_ENABLED";
public const string Enabled = "OTEL_DOTNET_AUTO_{0}_ENABLED";
}
}
}

View File

@ -21,8 +21,7 @@ namespace OpenTelemetry.ClrProfiler.Managed.Configuration
return;
}
Enabled = source.GetBool(string.Format(ConfigurationKeys.Integrations.Enabled, integrationName)) ??
source.GetBool(string.Format("OTEL_{0}_ENABLED", integrationName));
Enabled = source.GetBool(string.Format(ConfigurationKeys.Integrations.Enabled, integrationName));
}
/// <summary>

View File

@ -8,66 +8,66 @@ namespace environment {
// Sets whether the profiler is enabled. Default is true.
// Setting this to false disabled the profiler entirely.
const WSTRING tracing_enabled = WStr("OTEL_TRACE_ENABLED");
const WSTRING tracing_enabled = WStr("OTEL_DOTNET_AUTO_ENABLED");
// Sets whether debug mode is enabled. Default is false.
const WSTRING debug_enabled = WStr("OTEL_TRACE_DEBUG");
const WSTRING debug_enabled = WStr("OTEL_DOTNET_AUTO_DEBUG");
// Sets the paths to integration definition JSON files.
// Supports multiple values separated with comma, for example:
// "C:\Program Files\OpenTelemetry .NET AutoInstrumentation\integrations.json,D:\temp\test_integrations.json"
const WSTRING integrations_path = WStr("OTEL_INTEGRATIONS");
const WSTRING integrations_path = WStr("OTEL_DOTNET_AUTO_INTEGRATIONS_FILE");
// Sets the path to the profiler's home directory, for example:
// "C:\Program Files\OpenTelemetry .NET AutoInstrumentation\" or "/opt/opentelemetry/"
const WSTRING profiler_home_path = WStr("OTEL_DOTNET_TRACER_HOME");
const WSTRING profiler_home_path = WStr("OTEL_DOTNET_AUTO_HOME");
// Sets the filename of executables the profiler can attach to.
// If not defined (default), the profiler will attach to any process.
// Supports multiple values separated with comma, for example:
// "MyApp.exe,dotnet.exe"
const WSTRING include_process_names = WStr("OTEL_PROFILER_PROCESSES");
const WSTRING include_process_names = WStr("OTEL_DOTNET_AUTO_INCLUDE_PROCESSES");
// Sets the filename of executables the profiler cannot attach to.
// If not defined (default), the profiler will attach to any process.
// Supports multiple values separated with comma, for example:
// "MyApp.exe,dotnet.exe"
const WSTRING exclude_process_names = WStr("OTEL_PROFILER_EXCLUDE_PROCESSES");
const WSTRING exclude_process_names = WStr("OTEL_DOTNET_AUTO_EXCLUDE_PROCESSES");
// Sets a list of integrations to disable. All other integrations will remain
// enabled. If not set (default), all integrations are enabled. Supports
// multiple values separated with comma, for example:
// "ElasticsearchNet,AspNetWebApi2"
const WSTRING disabled_integrations =
WStr("OTEL_DOTNET_TRACER_DISABLED_INSTRUMENTATIONS");
WStr("OTEL_DOTNET_AUTO_DISABLED_INSTRUMENTATIONS");
// Sets the path for the profiler's log file.
// Environment variable OTEL_TRACE_LOG_DIRECTORY takes precedence over this setting, if set.
const WSTRING log_path = WStr("OTEL_TRACE_LOG_PATH");
// Environment variable OTEL_DOTNET_AUTO_LOG_DIRECTORY takes precedence over this setting, if set.
const WSTRING log_path = WStr("OTEL_DOTNET_AUTO_LOG_PATH");
// Sets the directory for the profiler's log file.
// If set, this setting takes precedence over environment variable OTEL_TRACE_LOG_PATH.
// If set, this setting takes precedence over environment variable OTEL_DOTNET_AUTO_LOG_PATH.
// If not set, default is
// "%ProgramData%"\OpenTelemetry .NET AutoInstrumentation\logs\" on Windows or
// "/var/log/opentelemetry/dotnet/" on Linux.
const WSTRING log_directory = WStr("OTEL_TRACE_LOG_DIRECTORY");
const WSTRING log_directory = WStr("OTEL_DOTNET_AUTO_LOG_DIRECTORY");
// Sets whether to disable all JIT optimizations.
// Default value is false (do not disable all optimizations).
// https://github.com/dotnet/coreclr/issues/24676
// https://github.com/dotnet/coreclr/issues/12468
const WSTRING clr_disable_optimizations = WStr("OTEL_CLR_DISABLE_OPTIMIZATIONS");
const WSTRING clr_disable_optimizations = WStr("OTEL_DOTNET_AUTO_CLR_DISABLE_OPTIMIZATIONS");
// Sets whether to intercept method calls when the caller method is inside a
// domain-neutral assembly. This is dangerous because the integration assembly
// the user can guarantee that all Application Pools on the system have at most
// Default is false. Only used in .NET Framework 4.5 and 4.5.1.
// https://github.com/DataDog/dd-trace-dotnet/pull/671
const WSTRING domain_neutral_instrumentation = WStr("OTEL_TRACE_DOMAIN_NEUTRAL_INSTRUMENTATION");
const WSTRING domain_neutral_instrumentation = WStr("OTEL_DOTNET_AUTO_DOMAIN_NEUTRAL_INSTRUMENTATION");
// Indicates whether the profiler is running in the context
// of Azure App Services
const WSTRING azure_app_services = WStr("OTEL_AZURE_APP_SERVICES");
const WSTRING azure_app_services = WStr("OTEL_DOTNET_AUTO_AZURE_APP_SERVICES");
// The app_pool_id in the context of azure app services
const WSTRING azure_app_services_app_pool_id = WStr("APP_POOL_ID");
@ -77,17 +77,17 @@ const WSTRING azure_app_services_cli_telemetry_profile_value =
WStr("DOTNET_CLI_TELEMETRY_PROFILE");
// Enable the profiler to dump the IL original code and modification to the log.
const WSTRING dump_il_rewrite_enabled = WStr("OTEL_DUMP_ILREWRITE_ENABLED");
const WSTRING dump_il_rewrite_enabled = WStr("OTEL_DOTNET_AUTO_DUMP_ILREWRITE_ENABLED");
// Sets whether to enable JIT inlining
const WSTRING clr_enable_inlining = WStr("OTEL_CLR_ENABLE_INLINING");
const WSTRING clr_enable_inlining = WStr("OTEL_DOTNET_AUTO_CLR_ENABLE_INLINING");
// Custom internal tracer profiler path
const WSTRING internal_trace_profiler_path =
WStr("OTEL_INTERNAL_TRACE_NATIVE_ENGINE_PATH");
WStr("OTEL_DOTNET_AUTO_INTERNAL_NATIVE_ENGINE_PATH");
// Sets whether to enable NGEN images.
const WSTRING clr_enable_ngen = WStr("OTEL_CLR_ENABLE_NGEN");
const WSTRING clr_enable_ngen = WStr("OTEL_DOTNET_AUTO_CLR_ENABLE_NGEN");
// The list of startup hooks defined for .NET Core 3.1+ applications.
// This is a .NET runtime environment variable.

View File

@ -101,7 +101,7 @@ internal class StartupHook
{
var excludedProcesses = new List<string>();
var environmentValue = GetEnvironmentVariable("OTEL_PROFILER_EXCLUDE_PROCESSES");
var environmentValue = GetEnvironmentVariable("OTEL_DOTNET_AUTO_EXCLUDE_PROCESSES");
if (environmentValue == null)
{

View File

@ -19,7 +19,7 @@ namespace OpenTelemetry.ClrProfiler.Managed.Bootstrapping.Tests
[FactRequiringEnvVar]
public void Initialize_WithDisabledFlag_DoesNotCreateTracerProvider()
{
Environment.SetEnvironmentVariable("OTEL_DOTNET_TRACER_LOAD_AT_STARTUP", "false");
Environment.SetEnvironmentVariable("OTEL_DOTNET_AUTO_LOAD_AT_STARTUP", "false");
Instrumentation.Initialize();
var otelActivity = _otelActivitySource.StartActivity("OtelActivity");
@ -45,7 +45,7 @@ namespace OpenTelemetry.ClrProfiler.Managed.Bootstrapping.Tests
[FactRequiringEnvVar]
public void Initialize_WithEnabledFlag_CreatesTracerProvider()
{
Environment.SetEnvironmentVariable("OTEL_DOTNET_TRACER_LOAD_AT_STARTUP", "true");
Environment.SetEnvironmentVariable("OTEL_DOTNET_AUTO_LOAD_AT_STARTUP", "true");
Instrumentation.Initialize();
var otelActivity = _otelActivitySource.StartActivity("OtelActivity");
@ -58,7 +58,7 @@ namespace OpenTelemetry.ClrProfiler.Managed.Bootstrapping.Tests
[FactRequiringEnvVar]
public void Initialize_WithPreviouslyCreatedTracerProvider_WorksCorrectly()
{
Environment.SetEnvironmentVariable("OTEL_DOTNET_TRACER_LOAD_AT_STARTUP", "false");
Environment.SetEnvironmentVariable("OTEL_DOTNET_AUTO_LOAD_AT_STARTUP", "false");
var tracer = Sdk
.CreateTracerProviderBuilder()
.AddSource("Custom")

View File

@ -11,7 +11,7 @@ namespace OpenTelemetry.ClrProfiler.Managed.Loader.Tests
public void Ctor_LoadsManagedAssembly()
{
var directory = Directory.GetCurrentDirectory();
Environment.SetEnvironmentVariable("OTEL_DOTNET_TRACER_HOME", Path.Combine(directory, "..", "Profiler"));
Environment.SetEnvironmentVariable("OTEL_DOTNET_AUTO_HOME", Path.Combine(directory, "..", "Profiler"));
var exception = Record.Exception(() => Startup.ManagedProfilerDirectory);

View File

@ -98,12 +98,12 @@ namespace IntegrationTests.Helpers
"COR_PROFILER_PATH",
// OpenTelemetry
"OTEL_PROFILER_PROCESSES",
"OTEL_DOTNET_TRACER_HOME",
"OTEL_INTEGRATIONS",
"OTEL_DOTNET_AUTO_INCLUDE_PROCESSES",
"OTEL_DOTNET_AUTO_HOME",
"OTEL_DOTNET_AUTO_INTEGRATIONS_FILE",
"OTEL_DISABLED_INTEGRATIONS",
"OTEL_DOTNET_TRACER_ADDITIONAL_SOURCES",
"OTEL_PROFILER_EXCLUDE_PROCESSES"
"OTEL_DOTNET_AUTO_ADDITIONAL_SOURCES",
"OTEL_DOTNET_AUTO_EXCLUDE_PROCESSES"
};
foreach (string variable in environmentVariables)
@ -171,25 +171,25 @@ namespace IntegrationTests.Helpers
if (DebugModeEnabled)
{
environmentVariables["OTEL_TRACE_DEBUG"] = "1";
environmentVariables["OTEL_TRACE_LOG_DIRECTORY"] = Path.Combine(EnvironmentTools.GetSolutionDirectory(), "build_data", "profiler-logs");
environmentVariables["OTEL_DOTNET_AUTO_DEBUG"] = "1";
environmentVariables["OTEL_DOTNET_AUTO_LOG_DIRECTORY"] = Path.Combine(EnvironmentTools.GetSolutionDirectory(), "build_data", "profiler-logs");
}
if (!string.IsNullOrEmpty(processToProfile))
{
environmentVariables["OTEL_PROFILER_PROCESSES"] = Path.GetFileName(processToProfile);
environmentVariables["OTEL_DOTNET_AUTO_INCLUDE_PROCESSES"] = Path.GetFileName(processToProfile);
}
string integrations = GetIntegrationsPath();
environmentVariables["OTEL_DOTNET_TRACER_HOME"] = GetNukeBuildOutput();
environmentVariables["OTEL_INTEGRATIONS"] = integrations;
environmentVariables["OTEL_DOTNET_AUTO_HOME"] = GetNukeBuildOutput();
environmentVariables["OTEL_DOTNET_AUTO_INTEGRATIONS_FILE"] = integrations;
environmentVariables["OTEL_TRACES_EXPORTER"] = "zipkin";
environmentVariables["OTEL_EXPORTER_ZIPKIN_ENDPOINT"] = $"http://127.0.0.1:{agentPort}";
// for ASP.NET Core sample apps, set the server's port
environmentVariables["ASPNETCORE_URLS"] = $"http://127.0.0.1:{aspNetCorePort}/";
environmentVariables["OTEL_DOTNET_TRACER_ADDITIONAL_SOURCES"] = "Samples.*";
environmentVariables["OTEL_DOTNET_AUTO_ADDITIONAL_SOURCES"] = "Samples.*";
foreach (var key in CustomEnvironmentVariables.Keys)
{

View File

@ -20,7 +20,7 @@ namespace IntegrationTests.StartupHook
: base("StartupHook", output)
{
SetEnvironmentVariable("OTEL_SERVICE_NAME", ServiceName);
SetEnvironmentVariable("OTEL_DOTNET_TRACER_INSTRUMENTATIONS", "HttpClient");
SetEnvironmentVariable("OTEL_DOTNET_AUTO_ENABLED_INSTRUMENTATIONS", "HttpClient");
_expectations.Add(new WebServerSpanExpectation(ServiceName, null, "SayHello", "SayHello", null));
_expectations.Add(new WebServerSpanExpectation(ServiceName, null, "HTTP GET", "HTTP GET", null, "GET"));
}
@ -61,7 +61,7 @@ namespace IntegrationTests.StartupHook
expectedSpanCount = 0;
}
SetEnvironmentVariable("OTEL_PROFILER_EXCLUDE_PROCESSES", $"dotnet,dotnet.exe,{applicationNameToExclude}");
SetEnvironmentVariable("OTEL_DOTNET_AUTO_EXCLUDE_PROCESSES", $"dotnet,dotnet.exe,{applicationNameToExclude}");
var spans = RunTestApplication(enableStartupHook: true);

View File

@ -19,11 +19,11 @@
"CORECLR_PROFILER_PATH": "$(SolutionDir)bin\\tracer-home\\win-x64\\OpenTelemetry.ClrProfiler.Native.dll",
"DOTNET_STARTUP_HOOKS": "$(SolutionDir)bin\\tracer-home\\netcoreapp3.1\\OpenTelemetry.Instrumentation.StartupHook.dll",
"OTEL_DOTNET_TRACER_HOME": "$(SolutionDir)bin\\tracer-home\\",
"OTEL_INTEGRATIONS": "$(SolutionDir)bin\\tracer-home\\integrations.json",
"OTEL_DOTNET_AUTO_HOME": "$(SolutionDir)bin\\tracer-home\\",
"OTEL_DOTNET_AUTO_INTEGRATIONS_FILE": "$(SolutionDir)bin\\tracer-home\\integrations.json",
"OTEL_TRACES_EXPORTER": "zipkin",
"OTEL_EXPORTER_ZIPKIN_ENDPOINT": "http://127.0.0.1:9411/api/v2/spans",
"OTEL_TRACE_DEBUG": "1"
"OTEL_DOTNET_AUTO_DEBUG": "1"
},
"applicationUrl": "http://localhost:54568/",
"nativeDebugging": true

View File

@ -8,11 +8,11 @@
"CORECLR_PROFILER_PATH": "$(SolutionDir)bin\\tracer-home\\win-x64\\OpenTelemetry.ClrProfiler.Native.dll",
"DOTNET_STARTUP_HOOKS": "$(SolutionDir)bin\\tracer-home\\netcoreapp3.1\\OpenTelemetry.Instrumentation.StartupHook.dll",
"OTEL_DOTNET_TRACER_HOME": "$(SolutionDir)bin\\tracer-home\\",
"OTEL_INTEGRATIONS": "$(SolutionDir)bin\\tracer-home\\integrations.json",
"OTEL_DOTNET_AUTO_HOME": "$(SolutionDir)bin\\tracer-home\\",
"OTEL_DOTNET_AUTO_INTEGRATIONS_FILE": "$(SolutionDir)bin\\tracer-home\\integrations.json",
"OTEL_TRACES_EXPORTER": "zipkin",
"OTEL_EXPORTER_ZIPKIN_ENDPOINT": "http://127.0.0.1:9411/api/v2/spans",
"OTEL_TRACE_DEBUG": "1"
"OTEL_DOTNET_AUTO_DEBUG": "1"
}
}
}

View File

@ -4,15 +4,15 @@ ARG platform=x64
ENV COR_ENABLE_PROFILING=1 \
COR_PROFILER={918728DD-259F-4A6A-AC2B-B85E1B658318} \
COR_PROFILER_PATH=C:\\opentelemetry\\win-${platform}\\OpenTelemetry.ClrProfiler.Native.dll \
OTEL_DOTNET_TRACER_HOME=C:\\opentelemetry\\ \
OTEL_INTEGRATIONS=C:\\opentelemetry\\integrations.json \
OTEL_DOTNET_AUTO_HOME=C:\\opentelemetry\\ \
OTEL_DOTNET_AUTO_INTEGRATIONS_FILE=C:\\opentelemetry\\integrations.json \
OTEL_TRACES_EXPORTER=zipkin \
OTEL_DOTNET_TRACER_ADDITIONAL_SOURCES=Samples.* \
OTEL_DOTNET_TRACER_INSTRUMENTATIONS=HttpClient,AspNet \
OTEL_DOTNET_AUTO_ADDITIONAL_SOURCES=Samples.* \
OTEL_DOTNET_AUTO_ENABLED_INSTRUMENTATIONS=HttpClient,AspNet \
OTEL_SERVICE_NAME=Samples.AspNet \
OTEL_TRACE_DOMAIN_NEUTRAL_INSTRUMENTATION=1 \
OTEL_TRACE_DEBUG=1 \
OTEL_TRACE_LOG_DIRECTORY=C:\\inetpub\\wwwroot\\logs \
OTEL_PROFILER_PROCESSES=w3wp.exe
OTEL_DOTNET_AUTO_DOMAIN_NEUTRAL_INSTRUMENTATION=1 \
OTEL_DOTNET_AUTO_DEBUG=1 \
OTEL_DOTNET_AUTO_LOG_DIRECTORY=C:\\inetpub\\wwwroot\\logs \
OTEL_DOTNET_AUTO_INCLUDE_PROCESSES=w3wp.exe
WORKDIR C:\\inetpub\\wwwroot
COPY bin/${configuration}/app.publish .