配置 Python 收集器
安装 Instana Python 收集器后,您无需手动配置即可进行监控。 它会自动开始收集与 Python 流程相关的关键指标和分布式跟踪。 不过,您可以根据具体要求配置各个组件。
常规配置
Instana Python 包旨在成为完全无接触的 Python 监视自动解决方案,但在需要时仍完全可配置。 以下选项可用于配置此软件包。
启用 AutoProfile
AutoProfile 会自动且持续地向 Instana 生成和报告流程概要文件。 在 " 分析剖面 "部分了解有关剖面的更多信息。
要启用 AutoProfile,请设置环境变量 INSTANA_AUTOPROFILE=true。 AutoProfile 仅支持手动安装。 确保 Instana 传感器在主线程中初始化。
建立主机代理通信
Instana Python 软件包会尝试通过 IP 127.0.0.1 与 Instana 代理通信,对于容器化环境,则通过主机的默认网关进行通信。 如果这些位置都没有代理,可以使用环境变量来配置在哪里查找 Instana 主机代理。
环境变量必须在运行进程的环境中设置。
export INSTANA_AGENT_HOST = '127.0.0.1'
export INSTANA_AGENT_PORT = '42699'
另请参阅:
设置服务名称
默认情况下,Instana 会尽最大努力为您的服务进行适当命名。 如果出于某种原因想要自定义服务的命名方式,可以通过设置环境变量来实现:
export INSTANA_SERVICE_NAME=myservice
另请参阅一般参考:语言传感器的环境变量
设置进程名称
使用 INSTANA_PROCESS_NAME 来为表示 Python 进程的基础结构实体设置定制标签。
数据包配置
Instana 软件包中包含一个运行时配置模块,用于管理各种组件的配置。
随着软件包的发展,还会增加更多的选项。
from instana.configurator import config
# To enable tracing context propagation across Asyncio ensure_future and create_task calls
# Default is false
config['asyncio_task_context_propagation']['enabled'] = True
调试和更多冗余
将 INSTANA_DEBUG 设置为非零值可获得更多日志输出,这通常对开发和故障排除非常有用。
export INSTANA_DEBUG="true"
另请参阅一般参考:语言传感器的环境变量
禁用自动仪器
此 Instana 软件包中包含在装入包时初始化的自动检测。 此检测向 Instana 仪表板提供分布式跟踪信息。 要查看自动仪器的完整列表,请参阅支持的版本文档。
通过设置环境变量 INSTANA_DISABLE_AUTO_INSTR可抑制加载内置于跟踪器中的仪器。
export INSTANA_DISABLE_AUTO_INSTR="true"
追踪根出口跨度而不包含入口跨度
默认情况下,Instana Python Tracer 仅捕获具有活动入口跨度(entry span)的出口跨度(exit span)。 然而,在某些情况下,您需要追踪那些没有对应入口跨度而出现的出口跨度。
要配置 Tracer Python 以追踪独立退出跨度,请 INSTANA_ALLOW_ROOT_EXIT_SPAN 将环境变量设置为 1 或 true ,如下所示:
export INSTANA_ALLOW_ROOT_EXIT_SPAN=1
此功能在以下场景中非常实用:
- 来自不受支持的消息库的传入消息。
- 通过不受支持的协议(如原始 Transmission Control Protocol TCP或 WebSocket )发起的请求。
- 由其他应用程序内部启动的定时任务。
- 脚本 Python 的执行。
Kubernetes
在该平台的某些情况下, Python 传感器可能无法自动定位和联系 Instana 主机代理。 要解决这个问题,请参阅文档中的配置代理网络访问 Kubernetes 部分。
另请参阅:
框架
您可以配置 Instana Python 收集器,以监控和收集来自以下框架的数据:
Django (手册)
设置 AUTOWRAPT_BOOTSTRAP=instana 环境变量后,必须自动检测 Django 框架并对其进行检测。 如果出于某种原因,您希望或需要手动检测 Django,那么可以改为将 instana.instrumentation.django.middleware.InstanaMiddleware 添加到 settings.py中的 MIDDLEWARE 列表:
import os
import instana
# ... <snip> ...
MIDDLEWARE = [
'instana.instrumentation.django.middleware.InstanaMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
Pyramid
从 Instana Python 3.0.0 开始,金字塔仪器将自动运行。
从 1.22.0 到 2.5.3 版开始,Instana Python 软件包包括对 Pyramid 的手动支持。 要为基于 Pyramid 的应用程序添加可见性,请完成以下步骤:
- 确保
instana软件包已添加到requirements.txt,并已安装到虚拟环境或容器中。 - 将
import instana添加到 Pyramid 应用程序的__init__.py文件开头。 - 将 Instana Instrumentation Tween 添加到配置中。
import instana
with Configurator(settings=settings) as config:
# ...
config.include('instana.instrumentation.pyramid.tweens')
# ...
下图显示了 Pyramid 配置中 Instana 仪器的示例:

如果在 production.ini 配置中设置了 pyramid.tweens 选项,请确保 instana.instrumentation.pyramid.tweens.InstanaTweenFactory 是以下列表中的第一个条目:
pyramid.tweens =
instana.instrumentation.pyramid.tweens.InstanaTweenFactory
# other tweens
WSGI 和 ASGI 堆栈
Instana Python 软件包包括网络服务器网关接口(WSGI)和异步服务器网关接口(ASGI)中间件,可添加到任何兼容堆栈中。 各种堆栈均可使用自动添加功能,但对于 Instana 尚未提供自动支持的堆栈,也可以手动添加。
安装 Instana Python 软件包后,使用以下命令:
import instana
from instana.middleware import InstanaWSGIMiddleware
# or
from instana.middleware import InstanaASGIMiddleware
# Wrap the wsgi app in Instana middleware (InstanaWSGIMiddleware)
wsgiapp = InstanaWSGIMiddleware(MyWSGIApplication())
Instana 正在努力实现所有主要框架的自动仪器化,但与此同时,对于 Instana 尚未提供自动支持的堆栈,请查看一些特定的快速入门指南。
瓶 WSGI
使用以下命令对 Bottle WSGI 进行检测:
# Import Instana and the Instana WSGI middleware wrapper
import instana
from instana.middleware import InstanaWSGIMiddleware
from bottle import Bottle, run
app = Bottle()
@app.route('/hello')
def hello():
return "Hello World!"
# Wrap the application with the Instana WSGI Middleware
app = InstanaWSGIMiddleware(app)
# Alternative method for reference
# app = InstanaWSGIMiddleware(bottle.default_app())
run(app, host='localhost', port=8080)
CherryPy WSGI
使用以下命令对 CherryPy WSGI 进行检测:
import cherrypy
# Import Instana and the Instana WSGI middleware wrapper
import instana
from instana.middleware import InstanaWSGIMiddleware
# My CherryPy application
class Root(object):
@cherrypy.expose
def index(self):
return "hello world"
cherrypy.config.update({'engine.autoreload.on': False})
cherrypy.server.unsubscribe()
cherrypy.engine.start()
# Wrap the application with the Instana WSGI Middleware
wsgiapp = InstanaWSGIMiddleware(cherrypy.tree.mount(Root()))
在本例中,我们使用 uwsgi 作为网络服务器,并以
uwsgi --socket 127.0.0.1:8080 --enable-threads --protocol=http --wsgi-file mycherry.py --callable wsgiapp -H ~/.local/share/virtualenvs/cherrypyapp-C1BUba0z
其中 ~/.local/share/virtualenvs/cherrypyapp-C1BUba0z 是从 pipenv 到本地 virtualenv 的路径
猎鹰 WSGI
Falcon 框架也可以通过 WSGI 封装器进行工具化:
import falcon
# Import Instana and the Instana WSGI middleware wrapper
import instana
from instana.middleware import InstanaWSGIMiddleware
app = falcon.API()
# ...
# Wrap the application with the Instana WSGI Middleware
app = InstanaWSGIMiddleware(app)
然后,以启动堆栈 uwsgi --http :9000 --enable-threads --module=myfalcon.app 为例
基于 Gevent 的应用程序
Instana 支持基于 gevent 1.4 及更高版本的应用程序。
如果手动导入 Instana Python 包,那么请确保首先执行 gevent 导入和 Monkey 修补。
from gevent import monkey
monkey.patch_all()
import instana # <--- after the gevent monkey patching of stdlib
在 Instana Python Tracer 2.5.0 之前,基于 gevent 的应用程序不得使用不修改代码激活软件包的方法(该方法使用 AUTOWRAPT_BOOTSTRAP 环境变量)。 由于 gevent 的一阶猴子修补要求(如前所述),这种方法行不通。 在这种情况下,请使用更改代码激活方法。
从 Instana Python Tracer 2.5.0 开始,当使用 AutoTrace 网络钩子或无需更改代码的激活方法时,跟踪器会自动执行 monkey.patch_all() 。 您可以通过设置 INSTANA_GEVENT_MONKEY_OPTIONS 环境变量。 使用这个以逗号分隔的列表,您可以指定要从猴子补丁中包含或排除的模块,作为 MONKEY OPTIONS 给 gevent 的 gevent.monkey.main 功能。
下面的示例显示了为猴子补丁定制模块的可用选项:
export INSTANA_GEVENT_MONKEY_OPTIONS='--no-socket, --dns, --no-time, --select, --no-ssl'
export INSTANA_GEVENT_MONKEY_OPTIONS='no-socket, dns, no-time, select, no-ssl'
export INSTANA_GEVENT_MONKEY_OPTIONS='no-socket,dns,no-time,select,no-ssl'
如果将 Django 与 gevent 和 Instana 自动跟踪一起使用,请确保在自动跟踪启动前设置 DJANGO_SETTINGS_MODULE 环境变量。 有关 DJANGO_SETTINGS_MODULE 环境变量的更多信息,请参阅 Django 文档。
如果这种自定义程度仍然不够,则可使用更改代码激活法激活软件包。
工具
您可以配置 Instana Python 收集器,以监控和收集来自不同工具的数据。
Web 服务器
以下配置可用于监控不同的网络服务器:
uWSGI 网络服务器
确保为 uwsgi 启用 enable-threads 。
线程
Python 仪器会创建一个轻量级后台线程,定期收集和报告进程指标。 默认情况下,在 uWSGI 下禁用 GIL 和线程。 如果要对在 uWSGI, 下运行的应用程序进行检测,请确保通过 --enable-threads 命令(或 INI 风格的 enable-threads = true )启用线程。 更多信息,请参阅 uWSGI 文档。
uWSGI 例子命令行
uwsgi --socket 0.0.0.0:5000 --protocol=http -w wsgi -p 4 --enable-threads
uWSGI 示例:INI 文件
[uwsgi]
http = :5000
master = true
processes = 4
enable-threads = true # required
Gunicorn 网络服务器
要对在 Gunicorn 下运行的应用程序进行检测,请确保将 --preload 作为参数。
预装入
Python 仪器会创建一个轻量级后台线程,定期收集和报告进程指标。 默认情况下,在 Gunicorn 中分叉 Worker 后的应用程序代码进程。 如果要对在 Gunicorn 下运行的应用程序进行检测,请确保通过 --preload 命令启用预加载。 更多信息,请参阅 Gunicorn 文档。
Gunicorn 示例命令行
要在预加载的情况下运行 Gunicorn,请使用本例中显示的以下命令:
gunicorn -w 4 --preload "file:app"
Gunicorn 示例配置文件
要在配置文件中使用 Gunicorn,请在 Python 文件中使用以下变量。 在 Gunicorn 命令中添加 -c file_name.py 。
bind = "0.0.0.0:8000"
workers = 4
preload_app = true # required
最终用户监视 (EUM)
Instana 提供深度终端用户监控,将服务器端跟踪与浏览器事件联系起来,为您提供从服务器到浏览器的完整视图。
更多详情,请参阅最终用户监控页面。
忽略端点
从 Python Tracer 3.3.0 开始,您可以使用该功能过滤掉不必要的跟踪或调用,以减少总体数据摄取量。 例如,您可以排除对特定端点的跟踪,如 redis.get。
此功能适用于以下受支持的库:
| 库 | Instana Python 软件包版本 |
|---|---|
| Redis | >= 3.3.0 |
| DynamoDB | >= 3.3.0 |
| Kafka | >= 3.5.0 |
过滤规则
过滤范围的规则如下:
- 当一个跨度被忽略时,所有后续的下游跨度也将被忽略。
- 使用通配符
*忽略所有端点或方法。 - 端点值(如 Kafka 主题名称)在不同服务中保持一致。
- 方法名称可能因编程语言和技术而异。 请参考 Instana 用户界面来确定您服务的正确方法和端点。
以下 Instana UI 屏幕截图为识别正确的配置方法和端点提供了可视化参考:

忽略端点功能仅支持精确的方法名称。 请确保使用正确的要过滤的方法名称。 本文档使用来自 - Python send 包 Kafka 的 方法。
配置端点排除
您可以通过以下任一选项启用端点排除功能:
如果同时使用一种以上的方法, Python Tracer 会按以下顺序优先处理:环境变量、代码内配置和代理配置。
环境变量
您可以通过以下环境变量配置忽略的端点,以按服务过滤端点:
INSTANA_IGNORE_ENDPOINTS_PATH通过外部YAML文件配置过滤规则。INSTANA_IGNORE_ENDPOINTS仅根据方法名排除代码段。
使用 INSTANA_IGNORE_ENDPOINTS_PATH
通过此环境变量,您可以像以下示例所示,通过外部 YAML 文件配置过滤规则:
INSTANA_IGNORE_ENDPOINTS_PATH=/absolute/path/to/config.yaml
在上例中,文件 config.yaml 必须采用绝对路径,并遵循指定的配置结构。
按方法过滤
要指定要排除的端点,请设置 INSTANA_IGNORE_ENDPOINTS 环境变量:
tracing:
ignore-endpoints:
redis:
- get
- type
dynamodb:
- query
kafka:
- send
此配置过滤以下跨度:
GET以及TYPE命令用于 RedisQUERY命令用于 DynamoDBSEND方法用于 Kafka 以及所有下游跨度
按方法和端点过滤
要指定要排除的端点,请设置 INSTANA_IGNORE_ENDPOINTS 环境变量:
tracing:
ignore-endpoints:
kafka:
- methods: ["consume"]
endpoints: ["topic1", "topic2"]
- methods: ["consume", "send"]
endpoints: ["topic3"]
- methods: ["*"] # Applied to all methods
endpoints: ["topic4"]
- methods: ["consume"]
endpoints: ["*"] # Applied to all endpoints
此配置过滤以下跨度:
CONSUME方法用于topic1和topic2在 Kafka 以及所有下游跨度CONSUME以及 Kafka 在topic3所有下游SEND跨度中的方法- 所有位于
topic4中的(*)方法 Kafka 以及所有下游跨度 CONSUME对所有(*)主题及其 Kafka 所有下游跨度的方法
您可以在同一个配置文件中同时使用两种过滤选项(仅方法过滤和方法与端点过滤)。
此配置与代理 configuration.yaml 结构兼容。
使用 INSTANA_IGNORE_ENDPOINTS
通过此环境变量,您可以仅根据方法名排除跨度,如下例所示:
INSTANA_IGNORE_ENDPOINTS=redis:get,type
此配置过滤以下跨度:
GET以及TYPE命令用于 Redis
要 Redis 完全过滤,可使用以下配置:
INSTANA_IGNORE_ENDPOINTS=redis
要过滤多个服务,可以使用以下配置:
INSTANA_IGNORE_ENDPOINTS=redis:get,type;dynamodb:query,scan;kafka:send
此配置过滤以下跨度:
GET以及TYPE命令在 RedisQUERY以及SCAN命令在 DynamoDBSEND命令在 Kafka
代码内配置
要使用代码内配置方法忽略端点,请将以下配置传递到 src/instana/configurator.py 文件:
config["tracing"]["ignore_endpoints"] = { "redis": ["get", "type"] }
此配置将排除 包 Redis 中的 和 TYPE 命令 GET 的跟踪。
要忽略包 Redis 中的所有端点,请将以下配置传递给文件 src/instana/configurator.py :
config["tracing"]["ignore_endpoints"] = { "redis": [] }
要过滤多个服务,可以使用以下配置:
config["tracing"]["ignore_endpoints"] = {
"redis": ["get", "type"],
"dynamodb": ["query", "scan"],
"kafka": ["send"]
}
此配置过滤以下跨度:
GET以及TYPE命令在 RedisQUERY以及SCAN命令在 DynamoDBSEND方法在 Kafka 以及所有下游跨度中
以下示例展示了按方法和端点进行过滤:
config["tracing"]["ignore_endpoints"] = {
"kafka": [
{ methods: ["consume"], endpoints: ["topic1", "topic2"] },
{ methods: ["send"], endpoints: ["topic3"] }
]
}
此配置过滤以下跨度:
CONSUME方法用于topic1和topic2在 Kafka 以及所有下游跨度SEND方法用于topic3在所有下游 Kafka 跨度中
您可以在同一配置中同时使用两种过滤选项(仅方法过滤和方法与端点过滤)。
代理配置
要使用代理配置方法排除端点,请在代理 configuration.yaml 文件中添加 ignore-endpoints 配置。 更多信息,请参阅忽略端点部分。
配置 Kafka 跟踪相关性标头
通过痕迹相关性,跨度在分布式跨度创建之间保持关联关系。 例如,当启用跟踪相关性时,生产者跨度和消费者跨度将具有相同的跟踪ID。 当禁用跟踪关联时,生产者和消费者的跨度具有不同的跟踪ID,导致它们之间无法建立关联。
要完全禁用 Kafka 跟踪相关性,您可以使用以下任何配置选项:
环境变量:将环境变量设置
INSTANA_KAFKA_TRACE_CORRELATION为false。系统属性:使用以下配置:
config["tracing"]["kafka"] = { "trace_correlation": False }代理配置: 在Instana主机代理级别配置跟踪 Kafka 关联选项。
有关更多信息,请参阅 Kafka 标题迁移。