使用 OpenTelemetry
编辑使用 OpenTelemetry
编辑您可以使用 OpenTelemetry 来监控通过 Elasticsearch Python 客户端发起的 Elasticsearch 请求的性能和行为。Python 客户端带有内置的 OpenTelemetry 检测功能,默认情况下会发出分布式追踪跨度。这样,使用手动 OpenTelemetry 检测或自动 OpenTelemetry 检测的应用程序将被额外添加包含有关 Elasticsearch 请求执行情况的有用信息的跨度。
Python 客户端中的原生检测遵循OpenTelemetry Elasticsearch 语义约定。特别是,客户端中的检测覆盖了 Elasticsearch 请求的逻辑层。为每个通过 Python 客户端处理的服务创建单个跨度。下图显示了一个记录处理两个不同 Elasticsearch 请求的跟踪:一个 info
请求和一个 search
请求。
通常,OpenTelemetry 自动检测模块会提供对 HTTP 级别通信的检测支持。在这种情况下,除了逻辑 Elasticsearch 客户端请求外,还将捕获客户端发出的物理 HTTP 请求的跨度。下图显示了一个安装了 `opentelemetry-instrumentation-urllib3` 包后,同时具有 Elasticsearch 跨度(蓝色)和相应的 HTTP 级别跨度(红色)的跟踪。
通过逻辑 Elasticsearch 跨度和物理 HTTP 跨度的组合,可以了解高级 Python 客户端行为,例如节点轮询和请求重试。以下示例显示了具有两个节点的场景中的 search
请求
第一个节点不可用并导致 HTTP 错误,而重试到第二个节点成功。两个 HTTP 请求都被逻辑 Elasticsearch 请求跨度(蓝色)包含。
设置 OpenTelemetry 检测
编辑当使用手动 Python OpenTelemetry 检测或OpenTelemetry Python 代理时,默认情况下会启用 Python 客户端的 OpenTelemetry 检测,并使用带有全局追踪器提供程序的全局 OpenTelemetry SDK。如果您刚开始使用 OpenTelemetry 检测,以下博客文章提供了使用 Elastic Stack 摄取和探索追踪数据的分步说明
与社区检测的比较
编辑社区 OpenTelemetry Elasticsearch 检测也会检测客户端并发送 OpenTelemetry 追踪,但在 OpenTelemetry Elasticsearch 语义约定之前开发,因此追踪属性与其他 OpenTelemetry Elasticsearch 客户端检测不一致。为了避免两次追踪相同的请求,请确保仅使用一个检测,要么卸载 opentelemetry-instrumentation-elasticsearch Python 包,要么禁用原生检测。
配置 OpenTelemetry 检测
编辑您可以通过环境变量配置此 OpenTelemetry 检测。以下是可用的配置选项。
启用/禁用 OpenTelemetry 检测
编辑通过此配置选项,您可以启用(默认)或禁用内置的 OpenTelemetry 检测。
默认: true
环境变量 |
|
捕获搜索请求正文
编辑默认情况下,出于数据隐私考虑,内置的 OpenTelemetry 检测不会捕获请求正文。如果您希望收集此信息,则可以使用此选项启用从 Elasticsearch 搜索请求的请求正文中捕获搜索查询。选项是捕获原始搜索查询或根本不捕获。
默认: omit
有效选项: omit
, raw
环境变量 |
|
开销
编辑OpenTelemetry 检测(与任何其他监控方法一样)可能会在 CPU、内存和/或延迟方面产生轻微的开销。仅当启用检测(默认)并且目标应用程序中存在活动的 OpenTelemetry SDK 时,才会发生开销。当检测被禁用或目标应用程序中没有活动的 OpenTelemetry SDK 时,使用客户端时不会出现监控开销。
即使在启用检测并被 OpenTelemetry SDK 积极使用的情况下,开销也是最小的,并且在绝大多数情况下可以忽略不计。在出现明显开销的极端情况下,可以显式禁用检测,以消除对性能的任何潜在影响。