修补库以检测下游调用 - Amazon X-Ray
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

修补库以检测下游调用

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

支持的库
  • botocoreboto3 - 检测 Amazon SDK for Python (Boto) 客户端。

  • pynamodb - 检测 Amazon DynamoDB 客户端的 PynamoDB 版本。

  • aiobotocoreaioboto3 - 检测适用于 Python 的集成了 asyncio 的开发工具包客户端。

  • requestsaiohttp - 检测高级别 HTTP 客户端。

  • httplibhttp.client - 检测低级别 HTTP 客户端和使用这些客户端的更高级别的库。

  • sqlite3 - 检测 SQLite 客户端。

  • mysql-connector-python - 检测 MySQL 客户端。

  • pg8000 - 检测 Pure-Python PostgreSQL 接口。

  • psycopg2 - 检测 PostgreSQL 数据库适配器。

  • pymongo - 检测 MongoDB 客户端。

  • pymysql - 检测基于 PyMySQL 的客户端以用于 MySQL 和 MariaDB。

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

注意

如果使用 SQLAlchemy ORM,您可以导入 SQLAlchemy 会话的开发工具包版本和查询类,检测您的 SQL 查询。有关说明,请参阅使用 SQLAlchemy ORM

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

例 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。为此,您需要提供单个元素列表。

例 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)
注意

在某些情况下,用于修补库的键与库名称不匹配。有些键可作为一个或多个库的别名。

库别名

跟踪异步工作的上下文

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

注意

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

例 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)