使用 OpenTelemetry编辑

您可以使用 OpenTelemetry 通过 Elasticsearch Python 客户端监控 Elasticsearch 请求的性能和行为。Python 客户端附带内置的 OpenTelemetry 插桩,默认情况下会发出 分布式跟踪跨度。这样,使用 手动 OpenTelemetry 插桩自动 OpenTelemetry 插桩 的应用程序将得到包含有关 Elasticsearch 请求执行情况的更多信息的额外跨度的丰富。

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

Distributed trace with Elasticsearch spans

通常,OpenTelemetry 自动插桩模块附带对 HTTP 级通信的插桩支持。在这种情况下,除了逻辑 Elasticsearch 客户端请求之外,还会为客户端发出的物理 HTTP 请求捕获跨度。下图显示了安装 ``opentelemetry-instrumentation-urllib3`` 包后同时包含 Elasticsearch 跨度(蓝色)和相应的 HTTP 级跨度(红色)的跟踪

Distributed trace with Elasticsearch spans

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

Distributed trace with Elasticsearch spans

第一个节点不可用并导致 HTTP 错误,而对第二个节点的重试成功。这两个 HTTP 请求都包含在逻辑 Elasticsearch 请求跨度(蓝色)中。

设置 OpenTelemetry 插桩编辑

当使用 手动 Python OpenTelemetry 插桩OpenTelemetry Python 代理 时,默认情况下启用 Python 客户端的 OpenTelemetry 插桩,并使用全局 OpenTelemetry SDK 和全局跟踪器提供程序。如果您刚开始使用 OpenTelemetry 插桩,以下博客文章提供了使用 Elastic 堆栈摄取和探索跟踪数据的详细说明

与社区插桩的比较编辑

社区 OpenTelemetry Elasticsearch 插桩 也对客户端进行插桩并发送 OpenTelemetry 跟踪,但它是在 Elasticsearch 的 OpenTelemetry 语义约定之前开发的,因此跟踪属性与其他 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)的情况下,开销也是微不足道的,在绝大多数情况下可以忽略不计。在边缘情况下,如果存在明显的开销,则可以 显式禁用插桩 以消除对性能的任何潜在影响。