

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 修补库以检测下游调用
修补库

**注意**  
X-Ray SDK/Daemon 维护通知 — 2026 年 2 月 25 日， Amazon X-Ray SDKs/Daemon 将进入维护模式，在该模式下，X-Ray SDK 和 Daemon 的发布 Amazon 将仅限于解决安全问题。有关支持时间表的更多信息，请参阅 [X-Ray SDK 和 Daemon Support 时间表](xray-sdk-daemon-timeline.md)。我们建议迁移到 OpenTelemetry。有关迁移到的更多信息 OpenTelemetry，请参阅[从 X-Ray 仪器迁移到 OpenTelemetry 仪器](https://docs.amazonaws.cn/xray/latest/devguide/xray-sdk-migration.html)。

要检测下游调用，请使用适用于 Pyhon 的 X-Ray 开发工具包修补您的应用程序使用的库。适用于 Python 的 X-Ray 开发工具包可以修补以下库。

**支持的库**
+ `[botocore](https://pypi.python.org/pypi/botocore)`，`[boto3](https://pypi.python.org/pypi/boto3)`— 仪器 Amazon SDK for Python (Boto) 客户。
+ `[pynamodb](https://pypi.python.org/pypi/pynamodb/)` - 检测 Amazon DynamoDB 客户端的 PynamoDB 版本。
+ `[aiobotocore](https://pypi.python.org/pypi/aiobotocore)`、`[aioboto3](https://pypi.python.org/pypi/aioboto3)` - 检测 SDK for Python 客户端的 [asyncio](https://docs.python.org/3/library/asyncio.html) 集成版本。
+ `[requests](https://pypi.python.org/pypi/requests)`、`[aiohttp](https://pypi.python.org/pypi/aiohttp)` - 检测高级别 HTTP 客户端。
+ `[httplib](https://docs.python.org/2/library/httplib.html)`、[https://docs.python.org/3/library/http.client.html](https://docs.python.org/3/library/http.client.html) - 检测低级别 HTTP 客户端和使用这些客户端的更高级别的库。
+ `[sqlite3](https://docs.python.org/3/library/sqlite3.html)`— 仪器 SQLite 客户。
+ `[mysql-connector-python](https://pypi.python.org/pypi/mysql-connector-python)` - 检测 MySQL 客户端。
+ `[pg8000](https://pypi.org/project/pg8000/)` - 检测 Pure-Python PostgreSQL 接口。
+ `[psycopg2](https://pypi.org/project/psycopg2/)` - 检测 PostgreSQL 数据库适配器。
+ `[pymongo](https://pypi.org/project/pymongo/)` - 检测 MongoDB 客户端。
+ `[pymysql](https://pypi.org/project/PyMySQL/)`— 针对 My PyMy SQL 和 MariaDB 的基于 SQL 的客户端。

如果您使用已修补的库，适用于 Pyhon 的 X-Ray 开发工具包会为调用创建子分段，并记录请求和响应中的信息。必须通过开发工具包中间件或 Amazon Lambda提供分段，以供开发工具包创建子分段。

**注意**  
如果您使用 SQLAlchemy ORM，则可以通过导入 SDK 版本的会话和查询类 SQLAlchemy来检测 SQL 查询。有关说明，请参阅[使用 SQLAlchemy ORM](https://github.com/aws/aws-xray-sdk-python/blob/master/README.md#use-sqlalchemy-orm)。

要修补所有可用的库，请使用 `aws_xray_sdk.core` 中的 `patch_all` 函数。某些库（例如 `httplib` 和 `urllib`）可能需要通过调用 `patch_all(double_patch=True)` 启用双重修补。

**Example main.py - 修补所有支持的库**  

```
import boto3
import botocore
import requests
import sqlite3

from aws_xray_sdk.core import xray_recorder
from aws_xray_sdk.core import patch_all

patch_all()
```

要修补单个库，请使用库名称的元组调用 `patch`。为此，您需要提供单个元素列表。

**Example main.py - 修补特定的库**  

```
import boto3
import botocore
import requests
import mysql-connector-python

from aws_xray_sdk.core import xray_recorder
from aws_xray_sdk.core import patch

libraries = (['botocore'])
patch(libraries)
```

**注意**  
在某些情况下，用于修补库的键与库名称不匹配。有些键可作为一个或多个库的别名。  
`httplib` – `[httplib](https://docs.python.org/2/library/httplib.html)` 和 [https://docs.python.org/3/library/http.client.html](https://docs.python.org/3/library/http.client.html)
`mysql` – `[mysql-connector-python](https://pypi.python.org/pypi/mysql-connector-python)`

## 跟踪异步工作的上下文


对于集成了 `asyncio` 的库，或者要[为异步函数创建子分段](xray-sdk-python-subsegments.md)，您还必须使用异步上下文配置适用于 Pyhon 的 X-Ray 开发工具包。导入 `AsyncContext` 类，并将它的一个实例传递到 X-Ray 记录器。

**注意**  
Web 框架支持库（例如 AIOHTTP）不未通过 `aws_xray_sdk.core.patcher` 模块处理。它们将不会出现在支持的库的 `patcher` 目录中。

**Example main.py - 修补程序 aioboto3**  

```
import asyncio
import aioboto3
import requests

from aws_xray_sdk.core.async_context import AsyncContext
from aws_xray_sdk.core import xray_recorder
xray_recorder.configure(service='my_service', context=AsyncContext())
from aws_xray_sdk.core import patch

libraries = (['aioboto3'])
patch(libraries)
```