支持的技术编辑

Elastic APM Python 代理支持以下框架

对于其他框架和自定义 Python 代码,代理公开了一组用于集成的 API

Python编辑

支持以下 Python 版本

  • 3.6
  • 3.7
  • 3.8
  • 3.9
  • 3.10
  • 3.11
  • 3.12

Django编辑

我们支持以下 Django 版本

  • 1.11
  • 2.0
  • 2.1
  • 2.2
  • 3.0
  • 3.1
  • 3.2
  • 4.0
  • 4.2
  • 5.0

对于即将推出的 Django 版本,我们通常的目标是从第一个候选版本开始确保兼容性。

我们目前不支持在 ASGI 模式下运行的 Django。

Flask编辑

我们支持以下 Flask 版本

  • 0.10(已弃用)
  • 0.11(已弃用)
  • 0.12(已弃用)
  • 1.0
  • 1.1
  • 2.0
  • 2.1
  • 2.2
  • 2.3
  • 3.0

Aiohttp 服务器编辑

我们支持以下 aiohttp 版本

  • 3.0+

Tornado编辑

我们支持以下 tornado 版本

  • 6.0+

Sanic编辑

我们支持以下 sanic 版本

  • 20.12.2+

Starlette/FastAPI编辑

我们支持以下 Starlette 版本

  • 0.13.0+

任何使用受支持 Starlette 版本的 FastAPI 版本也应该受支持。

GRPC编辑

我们支持以下 grpcio 版本

  • 1.24.0+

自动仪表编辑

Python APM 代理附带了各种第三方模块和标准库模块的自动仪表。

调度编辑

Celery编辑

我们支持以下 Celery 版本

  • 3.x
  • 4.x

Celery 任务将仅在 Django 和 Flask 中自动记录。

数据库编辑

Elasticsearch编辑

已检测方法

  • elasticsearch.transport.Transport.perform_request
  • elasticsearch.connection.http_urllib3.Urllib3HttpConnection.perform_request
  • elasticsearch.connection.http_requests.RequestsHttpConnection.perform_request
  • elasticsearch._async.transport.AsyncTransport.perform_request
  • elasticsearch_async.connection.AIOHttpConnection.perform_request

此外,仪表还包装了 Elasticsearch 客户端类的以下方法

  • elasticsearch.client.Elasticsearch.delete_by_query
  • elasticsearch.client.Elasticsearch.search
  • elasticsearch.client.Elasticsearch.count
  • elasticsearch.client.Elasticsearch.update

收集的跟踪数据

  • 查询字符串(如果可用)
  • 请求正文中的 query 元素(如果可用)
  • 响应状态码
  • 受影响的行数(如果可用)

我们建议您仅将关键字参数与 elasticsearch-py 一起使用,如 elasticsearch-py 文档 中所述。如果您使用位置参数,我们将无法从请求正文中收集 query 元素。

SQLite编辑

已检测方法

  • sqlite3.connect
  • sqlite3.dbapi2.connect
  • pysqlite2.dbapi2.connect

已检测的 connect 方法返回一个包装的连接/游标,它检测实际的 Cursor.execute 调用。

收集的跟踪数据

  • 参数化 SQL 查询

MySQLdb编辑

库:MySQLdb

已检测方法

  • MySQLdb.connect

已检测的 connect 方法返回一个包装的连接/游标,它检测实际的 Cursor.execute 调用。

收集的跟踪数据

  • 参数化 SQL 查询

mysql-connector编辑

库:mysql-connector-python

已检测方法

  • mysql.connector.connect

已检测的 connect 方法返回一个包装的连接/游标,它检测实际的 Cursor.execute 调用。

收集的跟踪数据

  • 参数化 SQL 查询

pymysql编辑

库:pymysql

已检测方法

  • pymysql.connect

已检测的 connect 方法返回一个包装的连接/游标,它检测实际的 Cursor.execute 调用。

收集的跟踪数据

  • 参数化 SQL 查询

aiomysql编辑

库:aiomysql

已检测方法

  • aiomysql.cursors.Cursor.execute

收集的跟踪数据

  • 参数化 SQL 查询

PostgreSQL编辑

库:psycopg2psycopg2-binary (>=2.9)

已检测方法

  • psycopg2.connect

已检测的 connect 方法返回一个包装的连接/游标,它检测实际的 Cursor.execute 调用。

收集的跟踪数据

  • 参数化 SQL 查询

aiopg编辑

库:aiopg (>=1.0)

已检测方法

  • aiopg.cursor.Cursor.execute
  • aiopg.cursor.Cursor.callproc

收集的跟踪数据

  • 参数化 SQL 查询

asyncpg编辑

库:asyncpg (>=0.20)

已检测方法

  • asyncpg.connection.Connection.execute
  • asyncpg.connection.Connection.executemany

收集的跟踪数据

  • 参数化 SQL 查询

PyODBC编辑

库:pyodbc,(>=4.0)

已检测方法

  • pyodbc.connect

已检测的 connect 方法返回一个包装的连接/游标,它检测实际的 Cursor.execute 调用。

收集的跟踪数据

  • 参数化 SQL 查询

MS-SQL编辑

库:pymssql,(>=2.1.0)

已检测方法

  • pymssql.connect

已检测的 connect 方法返回一个包装的连接/游标,它检测实际的 Cursor.execute 调用。

收集的跟踪数据

  • 参数化 SQL 查询

MongoDB编辑

库:pymongo>=2.9,<3.8

已检测方法

  • pymongo.collection.Collection.aggregate
  • pymongo.collection.Collection.bulk_write
  • pymongo.collection.Collection.count
  • pymongo.collection.Collection.create_index
  • pymongo.collection.Collection.create_indexes
  • pymongo.collection.Collection.delete_many
  • pymongo.collection.Collection.delete_one
  • pymongo.collection.Collection.distinct
  • pymongo.collection.Collection.drop
  • pymongo.collection.Collection.drop_index
  • pymongo.collection.Collection.drop_indexes
  • pymongo.collection.Collection.ensure_index
  • pymongo.collection.Collection.find_and_modify
  • pymongo.collection.Collection.find_one
  • pymongo.collection.Collection.find_one_and_delete
  • pymongo.collection.Collection.find_one_and_replace
  • pymongo.collection.Collection.find_one_and_update
  • pymongo.collection.Collection.group
  • pymongo.collection.Collection.inline_map_reduce
  • pymongo.collection.Collection.insert
  • pymongo.collection.Collection.insert_many
  • pymongo.collection.Collection.insert_one
  • pymongo.collection.Collection.map_reduce
  • pymongo.collection.Collection.reindex
  • pymongo.collection.Collection.remove
  • pymongo.collection.Collection.rename
  • pymongo.collection.Collection.replace_one
  • pymongo.collection.Collection.save
  • pymongo.collection.Collection.update
  • pymongo.collection.Collection.update_many
  • pymongo.collection.Collection.update_one

收集的跟踪数据

  • 数据库名称
  • 方法名称

Redis编辑

库:redis (>=2.8)

已检测方法

  • redis.client.Redis.execute_command
  • redis.client.Pipeline.execute

收集的跟踪数据

  • Redis 命令名称

aioredis编辑

库:aioredis (<2.0)

已检测方法

  • aioredis.pool.ConnectionsPool.execute
  • aioredis.commands.transaction.Pipeline.execute
  • aioredis.connection.RedisConnection.execute

收集的跟踪数据

  • Redis 命令名称

Cassandra编辑

库:cassandra-driver (>=3.4,<4.0)

已检测方法

  • cassandra.cluster.Session.execute
  • cassandra.cluster.Cluster.connect

收集的跟踪数据

  • CQL 查询

Python Memcache编辑

库:python-memcached (>=1.51)

已检测方法

  • memcache.Client.add
  • memcache.Client.append
  • memcache.Client.cas
  • memcache.Client.decr
  • memcache.Client.delete
  • memcache.Client.delete_multi
  • memcache.Client.disconnect_all
  • memcache.Client.flush_all
  • memcache.Client.get
  • memcache.Client.get_multi
  • memcache.Client.get_slabs
  • memcache.Client.get_stats
  • memcache.Client.gets
  • memcache.Client.incr
  • memcache.Client.prepend
  • memcache.Client.replace
  • memcache.Client.set
  • memcache.Client.set_multi
  • memcache.Client.touch

收集的跟踪数据

  • 目标(地址和端口)

pymemcache编辑

库:pymemcache (>=3.0)

已检测方法

  • pymemcache.client.base.Client.add
  • pymemcache.client.base.Client.append
  • pymemcache.client.base.Client.cas
  • pymemcache.client.base.Client.decr
  • pymemcache.client.base.Client.delete
  • pymemcache.client.base.Client.delete_many
  • pymemcache.client.base.Client.delete_multi
  • pymemcache.client.base.Client.flush_all
  • pymemcache.client.base.Client.get
  • pymemcache.client.base.Client.get_many
  • pymemcache.client.base.Client.get_multi
  • pymemcache.client.base.Client.gets
  • pymemcache.client.base.Client.gets_many
  • pymemcache.client.base.Client.incr
  • pymemcache.client.base.Client.prepend
  • pymemcache.client.base.Client.quit
  • pymemcache.client.base.Client.replace
  • pymemcache.client.base.Client.set
  • pymemcache.client.base.Client.set_many
  • pymemcache.client.base.Client.set_multi
  • pymemcache.client.base.Client.stats
  • pymemcache.client.base.Client.touch

收集的跟踪数据

  • 目标(地址和端口)

kafka-python编辑

库: kafka-python (>=2.0)

已检测方法

  • kafka.KafkaProducer.send,
  • kafka.KafkaConsumer.poll,
  • kafka.KafkaConsumer.\__next__

收集的跟踪数据

  • 目标(地址和端口)
  • 主题(如果适用)

外部 HTTP 请求编辑

标准库编辑

库: urllib2 (Python 2) / urllib.request (Python 3)

已检测方法

  • urllib2.AbstractHTTPHandler.do_open / urllib.request.AbstractHTTPHandler.do_open

收集的跟踪数据

  • HTTP 方法
  • 请求的 URL

urllib3编辑

库: urllib3

已检测方法

  • urllib3.connectionpool.HTTPConnectionPool.urlopen

此外,我们还检测了以下库中 urllib3 的捆绑实例

  • requests
  • botocore

这两个库在更新的版本中都“解除了” urllib3,我们建议使用最新版本。

收集的跟踪数据

  • HTTP 方法
  • 请求的 URL

requests编辑

已检测方法

  • requests.sessions.Session.send

收集的跟踪数据

  • HTTP 方法
  • 请求的 URL

AIOHTTP 客户端编辑

已检测方法

  • aiohttp.client.ClientSession._request

收集的跟踪数据

  • HTTP 方法
  • 请求的 URL

httpx编辑

已检测方法

  • `httpx.Client.send

收集的跟踪数据

  • HTTP 方法
  • 请求的 URL

服务编辑

AWS Boto3 / Botocore编辑

库: boto3 (>=1.0)

已检测方法

  • botocore.client.BaseClient._make_api_call

收集所有服务的跟踪数据

  • AWS 区域(例如 eu-central-1
  • AWS 服务名称(例如 s3
  • 操作名称(例如 ListBuckets

此外,某些服务还会收集更具体的数据

AWS Aiobotocore编辑

库: aiobotocore (>=2.2.0)

已检测方法

  • aiobotocore.client.BaseClient._make_api_call

收集所有服务的跟踪数据

  • AWS 区域(例如 eu-central-1
  • AWS 服务名称(例如 s3
  • 操作名称(例如 ListBuckets

此外,某些服务还会收集更具体的数据

S3编辑
  • 存储桶名称
DynamoDB编辑
  • 表名
SNS编辑
  • 主题名称
SQS编辑
  • 队列名称

模板引擎编辑

Django 模板语言编辑

库: Django (请参阅Django了解支持的版本)

已检测方法

  • django.template.Template.render

收集的跟踪数据

  • 模板名称

Jinja2编辑

库: jinja2

已检测方法

  • jinja2.Template.render

收集的跟踪数据

  • 模板名称