支持的技术

编辑

Elastic APM Python Agent 支持以下框架

对于其他框架和自定义 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 Agent 自动检测各种第三方模块和标准库模块。

调度

编辑
Celery
编辑

我们支持以下 Celery 版本

  • 4.x(已弃用)
  • 5.x

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

数据库

编辑

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

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

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

模板引擎

编辑

Django 模板语言

编辑

库:Django(有关支持的版本,请参阅Django

检测方法

  • django.template.Template.render

收集的跟踪数据

  • 模板名称

Jinja2

编辑

库:jinja2

检测方法

  • jinja2.Template.render

收集的跟踪数据

  • 模板名称