使用 OpenTelemetry
编辑使用 OpenTelemetry编辑
您可以使用 OpenTelemetry 通过 Elasticsearch Python 客户端监控 Elasticsearch 请求的性能和行为。Python 客户端附带内置的 OpenTelemetry 插桩,默认情况下会发出 分布式跟踪跨度。这样,使用 手动 OpenTelemetry 插桩 或 自动 OpenTelemetry 插桩 的应用程序将得到包含有关 Elasticsearch 请求执行情况的更多信息的额外跨度的丰富。
Python 客户端中的原生插桩遵循 Elasticsearch 的 OpenTelemetry 语义约定。特别是,客户端中的插桩涵盖了 Elasticsearch 请求的逻辑层。将为每个请求创建一个跨度,该跨度由服务通过 Python 客户端进行处理。下图显示了一个跟踪,它记录了两个不同 Elasticsearch 请求的处理过程:一个 info
请求和一个 search
请求。
通常,OpenTelemetry 自动插桩模块附带对 HTTP 级通信的插桩支持。在这种情况下,除了逻辑 Elasticsearch 客户端请求之外,还会为客户端发出的物理 HTTP 请求捕获跨度。下图显示了安装 ``opentelemetry-instrumentation-urllib3`` 包后同时包含 Elasticsearch 跨度(蓝色)和相应的 HTTP 级跨度(红色)的跟踪
节点轮询和请求重试等高级 Python 客户端行为通过逻辑 Elasticsearch 跨度和物理 HTTP 跨度的组合来揭示。以下示例显示了具有两个节点的场景中的 search
请求
第一个节点不可用并导致 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
环境变量 |
|
捕获搜索请求正文编辑
默认情况下,出于数据隐私方面的考虑,内置的 OpenTelemetry 插桩不会捕获请求正文。如果您希望收集此信息,则可以使用此选项启用从 Elasticsearch 搜索请求的请求正文中捕获搜索查询。选项是捕获原始搜索查询或根本不捕获它。
默认值: omit
有效选项: omit
, raw
环境变量 |
|
开销编辑
OpenTelemetry 插桩(与任何其他监控方法一样)可能会在 CPU、内存和/或延迟方面带来轻微的开销。仅当启用插桩(默认)并且目标应用程序中存在活动的 OpenTelemetry SDK 时,才会出现开销。当禁用插桩或目标应用程序中没有活动的 OpenTelemetry SDK 时,使用客户端时预计不会出现监控开销。
即使在启用插桩并积极使用(由 OpenTelemetry SDK)的情况下,开销也是微不足道的,在绝大多数情况下可以忽略不计。在边缘情况下,如果存在明显的开销,则可以 显式禁用插桩 以消除对性能的任何潜在影响。