

# 使用 AWS Distro for OpenTelemetry（ADOT）SDK 导出无收集器模式的遥测数据
<a name="CloudWatch-OTLP-UsingADOT"></a>

您可以使用 ADOT SDK 以无收集器模式直接将指标、跟踪数据和日志发送到 OTLP 端点。

**注意**  
Application Signals 包含事务搜索功能。为避免重复计费，请在 ADOT SDK 中禁用 Application Signals，同时将 `OTEL_AWS_APPLICATION_SIGNALS_ENABLED` 设为 false（默认设置）。

**Topics**
+ [先决条件](#CloudWatch-OTLP-UsingADOT-Prerequisite)
+ [为角色设置 IAM 权限](#setup-iam-permissions-role)
+ [配置凭证提供者](#configure-credentials-providers)
+ [启用 ADOT SDK](#Enabling-ADOT)

## 先决条件
<a name="CloudWatch-OTLP-UsingADOT-Prerequisite"></a>

如果在使用跟踪数据，请确保启用事务搜索功能，以向 X-ray OTLP 端点发送跨度。有关更多信息，请参阅[开始使用 Transaction Search](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Transaction-Search-getting-started.html)。

## 为角色设置 IAM 权限
<a name="setup-iam-permissions-role"></a>

按照以下步骤将必要 IAM 策略附加到 IAM 角色：

**跟踪：**

1. 通过 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 打开 IAM 控制台。

1. 选择**角色**，然后找到并选择配置的角色。

1. 在**权限**选项卡下，依次选择**添加权限**、**附加策略**。

1. 使用搜索框，搜索 `AWSXrayWriteOnlyPolicy`。

1. 选择 `AWSXrayWriteOnlyPolicy` 策略，然后选择**添加权限**。

**日志：**

1. 通过 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 打开 IAM 控制台。

1. 选择**角色**，然后找到并选择配置的角色。

1. 在**权限**选项卡中，选择**添加权限**，然后选择**创建内联策略**。

1. 为服务选择 **CloudWatch Logs**，然后在**允许的操作**下筛选并选择：

   ```
   logs:PutLogEvents
   logs:DescribeLogGroups
   logs:DescribeLogStreams
   ```

1. 以下是授予所需权限的示例 IAM 策略：

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "CloudWatchLogsAccess",
               "Effect": "Allow",
               "Action": [
                   "logs:PutLogEvents",
                   "logs:DescribeLogGroups",
                   "logs:DescribeLogStreams"
                  
               ],
               "Resource": [
                   "arn:aws:logs:*:*:log-group:*"
               ]
           }
       ]
   }
   ```

------

## 配置凭证提供者
<a name="configure-credentials-providers"></a>

ADOT 使用 AWS SDK 自动发现将遥测数据导出到 AWS 所需的有效凭证。有关为特定环境配置凭证的指导说明，[请参阅关于 AWS SDK 如何检索凭证的文档](https://docs.aws.amazon.com/sdkref/latest/guide/standardized-credentials.html)。

**设置本地主机的 IAM 凭证：**

通过输入以下命令，在本地主机中配置 AWS 凭证。将 **ACCESS\$1KEY\$1ID** 和 **SECRET\$1ACCESS\$1KEY** 替换为所配置 IAM 角色或用户的凭证。

```
$ aws configure
AWS Access Key ID [None]: ACCESS_KEY_ID
AWS Secret Access Key [None]: SECRET_ACCESS_ID
Default region name [None]: MY_REGION
Default output format [None]: json
```

## 启用 ADOT SDK
<a name="Enabling-ADOT"></a>

在 Java、Node.js、Python 和 .Net 上，可以将应用程序的日志和跟踪信息从 AWS Distro for OpenTelemetry（ADOT）SDK 发直接送到 OTLP 端点。

------
#### [ Java ]

**注意**  
必须采用 **2.11.2 或更高版本的 ADOT Java 代理**，才能使用这些功能。

1. 下载最新版本的 AWS Distro for OpenTelemetry Java 自动检测代理。您可以使用此命令下载最新版本：

   ```
   curl -L -O https://github.com/aws-observability/aws-otel-java-instrumentation/releases/latest/download/aws-opentelemetry-agent.jar
   ```

   您可以在 [aws-otel-java-instrumentation 版本](https://github.com/aws-observability/aws-otel-java-instrumentation/releases)上查看有关所有已发布版本的信息。

1. 要启用直接向 OTLP 端点发送遥测数据的其他导出器并充分发挥其优势，请在启动应用程序之前配置以下环境变量：

   **跟踪：**
   + 设置 `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT` 以指定 X-Ray OTLP 跟踪端点：`https://xray.[AWSRegion].amazonaws.com/v1/traces`

     例如：

     ```
     export OTEL_EXPORTER_OTLP_TRACES_ENDPOINT="https://xray.us-west-2.amazonaws.com/v1/traces"
     ```
   + 将 `OTEL_TRACES_EXPORTER` 设置为 `otlp`（此为可选设置，如果未设置此环境变量，则使用默认值）。
   + 将 `OTEL_EXPORTER_OTLP_TRACES_PROTOCOL` 变量设置为 `http/protobuf`（此为可选设置，如果未设置此环境变量，则使用默认值）。
   + 设置 `OTEL_RESOURCE_ATTRIBUTES` 变量以将以下信息指定为键值对。这些环境变量供 Application Signals 使用，并会被转换为 X-Ray 跟踪注释和 CloudWatch 指标维度。
     + （可选）`service.name` 设置服务的名称。这将作为应用程序的服务名称在 Application Signals 控制面板中显示。如果您不提供此键的值，将使用默认值 `UnknownService`。
     + （可选）`deployment.environment` 设置应用程序运行所在的环境。这将显示为应用程序的**托管**环境。
     + （可选）要启用跟踪日志关联，请在 `OTEL_RESOURCE_ATTRIBUTES` 中为应用程序的日志组设置其他环境变量 `aws.log.group.names`。这样，应用程序的跟踪和指标便可与这些特定日志组的相关日志条目相关联。对于此变量，将 `$YOUR_APPLICATION_LOG_GROUP` 替换为应用程序的日志组名称。如果您有多个日志组，则可以使用和号（`&`）分隔它们，如以下示例所示：`aws.log.group.names=log-group-1&log-group-2`。要启用指标与日志关联的功能，设置此当前环境变量已足够。有关更多信息，请参阅[启用指标与日志关联](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Application-Signals-MetricLogCorrelation.html)。要启用跟踪与日志关联，您还需要更改应用程序中的日志记录配置。有关更多信息，请参阅[启用跟踪与日志关联](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Application-Signals-TraceLogCorrelation.html)。

   **日志：**
   + 设置 `OTEL_EXPORTER_OTLP_LOGS_ENDPOINT` 以指定 CloudWatch OTLP 日志端点：`https://logs.[AWSRegion].amazonaws.com/v1/logs`

     例如：

     ```
     export OTEL_EXPORTER_OTLP_LOGS_ENDPOINT="https://logs.us-west-2.amazonaws.com/v1/logs"
     ```
   + 设置 `OTEL_EXPORTER_OTLP_LOGS_HEADERS` 以指定日志导出到的目标日志组和日志流（注意：这些必须在运行 ADOT **之前**创建）：`x-aws-log-group=[CW-LOG-GROUP-NAME],x-aws-log-stream=[CW-LOG-STREAM-NAME]`

     例如：

     ```
     export OTEL_EXPORTER_OTLP_LOGS_HEADERS=x-aws-log-group=MyLogGroup,x-aws-log-stream=default
     ```
   + 将 `OTEL_LOGS_EXPORTER` 设置为 `otlp`（此为可选设置，如果未设置此环境变量，则使用默认值）。
   + 将 `OTEL_EXPORTER_OTLP_LOGS_PROTOCOL` 变量设置为 `http/protobuf`（此为可选设置，如果未设置此环境变量，则使用默认值）。

1. 设置 `JAVA_TOOL_OPTIONS` 以指定存储 AWS Distro for OpenTelemetry Java 自动插桩代理的路径。例如：

   ```
   export JAVA_TOOL_OPTIONS=" -javaagent:$AWS_ADOT_JAVA_INSTRUMENTATION_PATH"
   export AWS_ADOT_JAVA_INSTRUMENTATION_PATH="./aws-opentelemetry-agent.jar"
   ```

1. 您的应用程序现在应已启用 ADOT Java 插桩并正常运行，且会生成追踪跨度和日志文件。跨度将存储在 `aws/spans` CloudWatch 日志组中，而日志将存储在 `OTEL_EXPORTER_OTLP_LOGS_HEADERS` 标题指定的日志组中。您还可以在 CloudWatch 跟踪和指标控制台中查看与跨度相关的日志及指标。

1. 使用上一步中列出的环境变量启动应用程序。以下是启动脚本的示例。

   ```
   JAVA_TOOL_OPTIONS=" -javaagent:$AWS_ADOT_JAVA_INSTRUMENTATION_PATH" \
   OTEL_METRICS_EXPORTER=none \
   OTEL_TRACES_EXPORTER=otlp \
   OTEL_EXPORTER_OTLP_TRACES_PROTOCOL=http/protobuf \
   OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=https://xray.us-east-1.amazonaws.com/v1/traces \
   OTEL_LOGS_EXPORTER=otlp \
   OTEL_EXPORTER_OTLP_LOGS_PROTOCOL=http/protobuf \
   OTEL_EXPORTER_OTLP_LOGS_ENDPOINT=https://logs.us-east-1.amazonaws.com/v1/logs \
   OTEL_EXPORTER_OTLP_LOGS_HEADERS=x-aws-log-group=MyLogGroup,x-aws-log-stream=default 
   OTEL_RESOURCE_ATTRIBUTES="service.name=$YOUR_SVC_NAME" \
   java -jar $MY_JAVA_APP.jar
   ```

------
#### [ Node.js ]

**注意**  
必须采用 **0.7.0 或更高版本的 ADOT JavaScript**，才能使用这些功能。

1. 下载最新版本的 AWS Distro for OpenTelemetry Java 自动插桩。通过运行以下 命令安装它。

   ```
   npm install @aws/aws-distro-opentelemetry-node-autoinstrumentation
   ```

   您可以在 [aws-otel-js-instrumentation 版本](https://github.com/aws-observability/aws-otel-js-instrumentation/releases)发布页面查看所有已发布版本的详细信息。

1. 要启用直接向 OTLP 端点发送遥测数据的其他导出器并充分发挥其优势，请在启动应用程序之前配置以下环境变量：

   **跟踪：**
   + 设置 `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT` 以指定 X-Ray OTLP 跟踪端点：`https://xray.[AWSRegion].amazonaws.com/v1/traces`

     例如：

     ```
     export OTEL_EXPORTER_OTLP_TRACES_ENDPOINT="https://xray.us-west-2.amazonaws.com/v1/traces"
     ```
   + 将 `OTEL_TRACES_EXPORTER` 设置为 `otlp`（此为可选设置，如果未设置此环境变量，则使用默认值）。
   + 将 `OTEL_EXPORTER_OTLP_TRACES_PROTOCOL` 变量设置为 `http/protobuf`（此为可选设置，如果未设置此环境变量，则使用默认值）。
   + 设置 `OTEL_RESOURCE_ATTRIBUTES` 变量以将以下信息指定为键值对。这些环境变量供 Application Signals 使用，并会被转换为 X-Ray 跟踪注释和 CloudWatch 指标维度。
     + （可选）`service.name` 设置服务的名称。这将作为应用程序的服务名称在 Application Signals 控制面板中显示。如果您不提供此键的值，将使用默认值 `UnknownService`。
     + （可选）`deployment.environment` 设置应用程序运行所在的环境。这将显示为应用程序的**托管**环境。
     + （可选）要启用跟踪日志关联，请在 `OTEL_RESOURCE_ATTRIBUTES` 中为应用程序的日志组设置其他环境变量 `aws.log.group.names`。这样，应用程序的跟踪和指标便可与这些特定日志组的相关日志条目相关联。对于此变量，将 `$YOUR_APPLICATION_LOG_GROUP` 替换为应用程序的日志组名称。如果您有多个日志组，则可以使用和号（`&`）分隔它们，如以下示例所示：`aws.log.group.names=log-group-1&log-group-2`。要启用指标与日志关联的功能，设置此当前环境变量已足够。有关更多信息，请参阅[启用指标与日志关联](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Application-Signals-MetricLogCorrelation.html)。要启用跟踪与日志关联，您还需要更改应用程序中的日志记录配置。有关更多信息，请参阅[启用跟踪与日志关联](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Application-Signals-TraceLogCorrelation.html)。

   **日志：**
   + 设置 `OTEL_EXPORTER_OTLP_LOGS_ENDPOINT` 以指定 CloudWatch OTLP 日志端点：`https://logs.[AWSRegion].amazonaws.com/v1/logs`

     例如：

     ```
     export OTEL_EXPORTER_OTLP_LOGS_ENDPOINT="https://logs.us-west-2.amazonaws.com/v1/logs"
     ```
   + 设置 `OTEL_EXPORTER_OTLP_LOGS_HEADERS` 以指定日志导出到的目标日志组和日志流（注意：这些必须在运行 ADOT **之前**创建）：`x-aws-log-group=[CW-LOG-GROUP-NAME],x-aws-log-stream=[CW-LOG-STREAM-NAME]`

     例如：

     ```
     export OTEL_EXPORTER_OTLP_LOGS_HEADERS=x-aws-log-group=MyLogGroup,x-aws-log-stream=default
     ```
   + 将 `OTEL_LOGS_EXPORTER` 设置为 `otlp`（此为可选设置，如果未设置此环境变量，则使用默认值）。
   + 将 `OTEL_EXPORTER_OTLP_LOGS_PROTOCOL` 变量设置为 `http/protobuf`（此为可选设置，如果未设置此环境变量，则使用默认值）。

1. 您的应用程序现在应已启用 ADOT JavaScript 插桩并正常运行，且会生成追踪跨度和日志文件。跨度将存储在 `aws/spans` CloudWatch 日志组中，而日志将存储在 `OTEL_EXPORTER_OTLP_LOGS_HEADERS` 标题指定的日志组中。您还可以在 CloudWatch 跟踪和指标控制台中查看与跨度相关的日志及指标。

1. 使用上一步中列出的环境变量启动应用程序。以下是启动脚本的示例。

   将 `$SVC_NAME` 替换为您的应用程序的名称。此变量将显示为应用程序的名称。

   ```
   OTEL_METRICS_EXPORTER=none \
   OTEL_TRACES_EXPORTER=otlp \
   OTEL_EXPORTER_OTLP_TRACES_PROTOCOL=http/protobuf \
   OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=https://xray.us-east-1.amazonaws.com/v1/traces \
   OTEL_LOGS_EXPORTER=otlp \
   OTEL_EXPORTER_OTLP_LOGS_PROTOCOL=http/protobuf \
   OTEL_EXPORTER_OTLP_LOGS_ENDPOINT=https://logs.us-east-1.amazonaws.com/v1/logs \
   OTEL_EXPORTER_OTLP_LOGS_HEADERS=x-aws-log-group=MyLogGroup,x-aws-log-stream=default 
   OTEL_RESOURCE_ATTRIBUTES="service.name=$YOUR_SVC_NAME" \
   node --require '@aws/aws-distro-opentelemetry-node-autoinstrumentation/register' your-application.js
   ```

------
#### [ Python ]

**注意**  
必须采用 **0.10.0 或更高版本的 ADOT Python** 并且已安装 **`botocore`**，才能使用这些功能。

1. 下载最新版本的 AWS Distro for OpenTelemetry Python 自动插桩。通过运行以下 命令安装它。

   ```
   pip install aws-opentelemetry-distro
   ```

   您可以在 [aws-otel-python-instrumentation 版本](https://github.com/aws-observability/aws-otel-python-instrumentation/releases)发布页面查看所有已发布版本的详细信息。

1. 要启用直接向 OTLP 端点发送遥测数据的其他导出器并充分发挥其优势，请在启动应用程序之前配置以下环境变量：

   **对于跟踪和日志配置，必须设置以下环境变量：**
   + `OTEL_PYTHON_DISTRO` 到 `aws_distro`
   + `OTEL_PYTHON_CONFIGURATOR` 到 `aws_configurator`

   **跟踪：**
   + 设置 `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT` 以指定 X-Ray OTLP 跟踪端点：`https://xray.[AWSRegion].amazonaws.com/v1/traces`

     例如：

     ```
     export OTEL_EXPORTER_OTLP_TRACES_ENDPOINT="https://xray.us-west-2.amazonaws.com/v1/traces"
     ```
   + 将 `OTEL_TRACES_EXPORTER` 设置为 `otlp`（此为可选设置，如果未设置此环境变量，则使用默认值）。
   + 将 `OTEL_EXPORTER_OTLP_TRACES_PROTOCOL` 变量设置为 `http/protobuf`（此为可选设置，如果未设置此环境变量，则使用默认值）。
   + 设置 `OTEL_RESOURCE_ATTRIBUTES` 变量以将以下信息指定为键值对。这些环境变量供 Application Signals 使用，并会被转换为 X-Ray 跟踪注释和 CloudWatch 指标维度。
     + （可选）`service.name` 设置服务的名称。这将作为应用程序的服务名称在 Application Signals 控制面板中显示。如果您不提供此键的值，将使用默认值 `UnknownService`。
     + （可选）`deployment.environment` 设置应用程序运行所在的环境。这将显示为应用程序的**托管**环境。
     + （可选）要启用跟踪日志关联，请在 `OTEL_RESOURCE_ATTRIBUTES` 中为应用程序的日志组设置其他环境变量 `aws.log.group.names`。这样，应用程序的跟踪和指标便可与这些特定日志组的相关日志条目相关联。对于此变量，将 `$YOUR_APPLICATION_LOG_GROUP` 替换为应用程序的日志组名称。如果您有多个日志组，则可以使用和号（`&`）分隔它们，如以下示例所示：`aws.log.group.names=log-group-1&log-group-2`。要启用指标与日志关联的功能，设置此当前环境变量已足够。有关更多信息，请参阅[启用指标与日志关联](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Application-Signals-MetricLogCorrelation.html)。要启用跟踪与日志关联，您还需要更改应用程序中的日志记录配置。有关更多信息，请参阅[启用跟踪与日志关联](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Application-Signals-TraceLogCorrelation.html)。

   **日志：**
   + 将 `OTEL_PYTHON_LOGGING_AUTO_INSTRUMENTATION_ENABLED` 设置为 `true`
   + 设置 `OTEL_EXPORTER_OTLP_LOGS_ENDPOINT` 以指定 CloudWatch OTLP 日志端点：`https://logs.[AWSRegion].amazonaws.com/v1/logs`

     例如：

     ```
     export OTEL_EXPORTER_OTLP_LOGS_ENDPOINT="https://logs.us-west-2.amazonaws.com/v1/logs"
     ```
   + 设置 `OTEL_EXPORTER_OTLP_LOGS_HEADERS` 以指定日志导出到的目标日志组和日志流（注意：这些必须在运行 ADOT **之前**创建）：`x-aws-log-group=[CW-LOG-GROUP-NAME],x-aws-log-stream=[CW-LOG-STREAM-NAME]`

     例如：

     ```
     export OTEL_EXPORTER_OTLP_LOGS_HEADERS=x-aws-log-group=MyLogGroup,x-aws-log-stream=default
     ```
   + 将 `OTEL_LOGS_EXPORTER` 设置为 `otlp`（此为可选设置，如果未设置此环境变量，则使用默认值）。
   + 将 `OTEL_EXPORTER_OTLP_LOGS_PROTOCOL` 变量设置为 `http/protobuf`（此为可选设置，如果未设置此环境变量，则使用默认值）。

1. 您的应用程序现在应已启用 ADOT Python 插桩并正常运行，且会生成追踪跨度和日志文件。跨度将存储在 `aws/spans` CloudWatch 日志组中，而日志将存储在 `OTEL_EXPORTER_OTLP_LOGS_HEADERS` 标题指定的日志组中。您还可以在 CloudWatch 跟踪和指标控制台中查看与跨度相关的日志及指标。

1. 使用上一步中列出的环境变量启动应用程序。以下是启动脚本的示例。

   将 `$SVC_NAME` 替换为您的应用程序的名称。此变量将显示为应用程序的名称。

   将 `$PYTHON_APP` 替换为您的应用程序的位置和名称。

   ```
   OTEL_METRICS_EXPORTER=none \
   OTEL_TRACES_EXPORTER=otlp \
   OTEL_EXPORTER_OTLP_TRACES_PROTOCOL=http/protobuf \
   OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=https://xray.us-east-1.amazonaws.com/v1/traces \
   OTEL_LOGS_EXPORTER=otlp \
   OTEL_EXPORTER_OTLP_LOGS_PROTOCOL=http/protobuf \
   OTEL_EXPORTER_OTLP_LOGS_ENDPOINT=https://logs.us-east-1.amazonaws.com/v1/logs \
   OTEL_EXPORTER_OTLP_LOGS_HEADERS=x-aws-log-group=MyLogGroup,x-aws-log-stream=default
   OTEL_PYTHON_LOGGING_AUTO_INSTRUMENTATION_ENABLED=true
   OTEL_RESOURCE_ATTRIBUTES="service.name=$YOUR_SVC_NAME" \
   opentelemetry-instrument python $MY_PYTHON_APP.py
   ```

------
#### [ .Net ]

**注意**  
必须采用 **1.8.0 或更高版本的 ADOT .NET**，才能使用这些功能。
目前不支持压缩。
当前不支持日志。

下载最新版本适用于 OpenTelemetry 的 AWS Distro .NET 自动仪表化工具包。您可以在 [aws-otel-dotnet-instrumentation 版本](https://github.com/aws-observability/aws-otel-dotnet-instrumentation/releases)发布页面查看所有已发布版本的详细信息。

要启用直接向 OTLP 端点发送遥测数据的其他导出器并充分发挥其优势，请在启动应用程序之前配置以下环境变量（将 `OTEL_RESOURCE_ATTRIBUTES` 环境变量中的 `dotnet-service-name` 替换为您选择的服务名称）：

**跟踪：**
+ **必须**将 `OTEL_TRACES_EXPORTER` 设置为 `none`
+ **必须**将 `OTEL_AWS_SIG_V4_ENABLED` 设置为 `true`

  此功能**在 .NET 中不会自动启用**。该环境变量是专门为了在 .NET 插桩中明确标识该使用案例而专门要求设置的。此要求仅针对 .NET，**不适用于其他支持的语言**。

以下是适用于 Linux 的设置示例。

```
export INSTALL_DIR=OpenTelemetryDistribution
export CORECLR_ENABLE_PROFILING=1
export CORECLR_PROFILER={918728DD-259F-4A6A-AC2B-B85E1B658318}
export CORECLR_PROFILER_PATH=${INSTALL_DIR}/linux-x64/OpenTelemetry.AutoInstrumentation.Native.so
export DOTNET_ADDITIONAL_DEPS=${INSTALL_DIR}/AdditionalDeps
export DOTNET_SHARED_STORE=${INSTALL_DIR}/store
export DOTNET_STARTUP_HOOKS=${INSTALL_DIR}/net/OpenTelemetry.AutoInstrumentation.StartupHook.dll
export OTEL_DOTNET_AUTO_HOME=${INSTALL_DIR}

export OTEL_DOTNET_AUTO_PLUGINS="AWS.Distro.OpenTelemetry.AutoInstrumentation.Plugin, AWS.Distro.OpenTelemetry.AutoInstrumentation"
export OTEL_TRACES_EXPORTER=none
export OTEL_AWS_SIG_V4_ENABLED=true

export OTEL_RESOURCE_ATTRIBUTES=service.name=dotnet-service-name
export OTEL_METRICS_EXPORTER=none
export OTEL_LOGS_EXPORTER=none
export OTEL_EXPORTER_OTLP_TRACES_PROTOCOL=http/protobuf
export OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=https://xray.us-east-1.amazonaws.com/v1/traces
```

以下是适用于 Windows Server 的设置示例：

```
$env:INSTALL_DIR = "OpenTelemetryDistribution" 
$env:CORECLR_ENABLE_PROFILING = 1 
$env:CORECLR_PROFILER = "{918728DD-259F-4A6A-AC2B-B85E1B658318}" 
$env:CORECLR_PROFILER_PATH = Join-Path $env:INSTALL_DIR "win-x64/OpenTelemetry.AutoInstrumentation.Native.dll" 
$env:DOTNET_ADDITIONAL_DEPS = Join-Path $env:INSTALL_DIR "AdditionalDeps" 
$env:DOTNET_SHARED_STORE = Join-Path $env:INSTALL_DIR "store" 
$env:DOTNET_STARTUP_HOOKS = Join-Path $env:INSTALL_DIR "net/OpenTelemetry.AutoInstrumentation.StartupHook.dll" 
$env:OTEL_DOTNET_AUTO_HOME = $env:INSTALL_DIR 
$env:OTEL_DOTNET_AUTO_PLUGINS = "AWS.Distro.OpenTelemetry.AutoInstrumentation.Plugin, AWS.Distro.OpenTelemetry.AutoInstrumentation"

$env:OTEL_TRACES_EXPORTER=none
$env:OTEL_AWS_SIG_V4_ENABLED=true

$env:OTEL_RESOURCE_ATTRIBUTES=service.name=dotnet-service-name
$env:OTEL_METRICS_EXPORTER=none
$env:OTEL_LOGS_EXPORTER=none
$env:OTEL_EXPORTER_OTLP_TRACES_PROTOCOL=http/protobuf
$env:OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=https://xray.us-east-1.amazonaws.com/v1/traces
```

1. 使用上一步中列出的环境变量启动应用程序。

1. （可选）或者，您可以使用提供的安装脚本来帮助安装和设置 AWS Distro for OpenTelemetry .NET 自动检测包。

   对于 Linux，请从 GitHub 发布页面下载并安装 Bash 安装脚本：

   ```
   # Download and Install
   curl -L -O https://github.com/aws-observability/aws-otel-dotnet-instrumentation/releases/latest/download/aws-otel-dotnet-install.sh
   chmod +x ./aws-otel-dotnet-install.sh
   ./aws-otel-dotnet-install.sh
   # Instrument
   . $HOME/.otel-dotnet-auto/instrument.shexport OTEL_RESOURCE_ATTRIBUTES=service.name=dotnet-service-name
   ```

   对于 Windows Server，请从 GitHub 发布页面下载并安装 PowerShell 安装脚本：

   ```
   # Download and Install
   $module_url = "https://github.com/aws-observability/aws-otel-dotnet-instrumentation/releases/latest/download/AWS.Otel.DotNet.Auto.psm1"
   $download_path = Join-Path $env:temp "AWS.Otel.DotNet.Auto.psm1"
   Invoke-WebRequest -Uri $module_url -OutFile $download_path
   Import-Module $download_path
   Install-OpenTelemetryCore
   # Instrument
   Import-Module $download_path
   Register-OpenTelemetryForCurrentSession -OTelServiceName "dotnet-service-name"
   Register-OpenTelemetryForIIS
   ```

   您可以在[官方 NuGet 存储库](https://www.nuget.org/packages/AWS.Distro.OpenTelemetry.AutoInstrumentation)中找到 AWS Distro for OpenTelemetry .NET 自动检测包的 NuGet 包。请务必查看[自述文件](https://github.com/aws-observability/aws-otel-dotnet-instrumentation/blob/main/src/AWS.Distro.OpenTelemetry.AutoInstrumentation/nuget-readme.md)以获取说明。

------