使用 OpenTelemetry

编辑

您可以使用 OpenTelemetry 来监控通过 Elasticsearch Python 客户端发起的 Elasticsearch 请求的性能和行为。Python 客户端带有内置的 OpenTelemetry 检测功能,默认情况下会发出分布式追踪跨度。这样,使用手动 OpenTelemetry 检测自动 OpenTelemetry 检测的应用程序将被额外添加包含有关 Elasticsearch 请求执行情况的有用信息的跨度。

Python 客户端中的原生检测遵循OpenTelemetry Elasticsearch 语义约定。特别是,客户端中的检测覆盖了 Elasticsearch 请求的逻辑层。为每个通过 Python 客户端处理的服务创建单个跨度。下图显示了一个记录处理两个不同 Elasticsearch 请求的跟踪:一个 info 请求和一个 search 请求。

Distributed trace with Elasticsearch spans

通常,OpenTelemetry 自动检测模块会提供对 HTTP 级别通信的检测支持。在这种情况下,除了逻辑 Elasticsearch 客户端请求外,还将捕获客户端发出的物理 HTTP 请求的跨度。下图显示了一个安装了 `opentelemetry-instrumentation-urllib3` 包后,同时具有 Elasticsearch 跨度(蓝色)和相应的 HTTP 级别跨度(红色)的跟踪。

Distributed trace with Elasticsearch spans

通过逻辑 Elasticsearch 跨度和物理 HTTP 跨度的组合,可以了解高级 Python 客户端行为,例如节点轮询和请求重试。以下示例显示了具有两个节点的场景中的 search 请求

Distributed trace with Elasticsearch spans

第一个节点不可用并导致 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

环境变量

OTEL_PYTHON_INSTRUMENTATION_ELASTICSEARCH_ENABLED

捕获搜索请求正文
编辑

默认情况下,出于数据隐私考虑,内置的 OpenTelemetry 检测不会捕获请求正文。如果您希望收集此信息,则可以使用此选项启用从 Elasticsearch 搜索请求的请求正文中捕获搜索查询。选项是捕获原始搜索查询或根本不捕获。

默认: omit

有效选项: omit, raw

环境变量

OTEL_PYTHON_INSTRUMENTATION_ELASTICSEARCH_CAPTURE_SEARCH_QUERY

开销

编辑

OpenTelemetry 检测(与任何其他监控方法一样)可能会在 CPU、内存和/或延迟方面产生轻微的开销。仅当启用检测(默认)并且目标应用程序中存在活动的 OpenTelemetry SDK 时,才会发生开销。当检测被禁用或目标应用程序中没有活动的 OpenTelemetry SDK 时,使用客户端时不会出现监控开销。

即使在启用检测并被 OpenTelemetry SDK 积极使用的情况下,开销也是最小的,并且在绝大多数情况下可以忽略不计。在出现明显开销的极端情况下,可以显式禁用检测,以消除对性能的任何潜在影响。