作者:来自 Elastic Riccardo Magliocchetti
宣布 OpenTelemetry Python Elastic 分发的第一个 alpha 版本。在本篇博文中了解使用 OpenTelemetry 来检测 Python 应用程序是多么简单。
我们很高兴地宣布 OpenTelemetry Python 的 Elastic Distribution 的 alpha 版本。该项目是一个定制的 OpenTelemetry 发行版,它允许我们配置更好的默认值,以便将 OpenTelemetry 与 Elastic 云产品结合使用。
背景
Elastic 正在将 OpenTelemetry (OTel) 标准化,以实现可观察性和安全性数据收集。作为这项工作的一部分,我们正在提供 OpenTelemetry 语言 SDK 的发行版。我们最近发布了 Java、.NET 和 Node.js 的 alpha 发行版。我们的 Android 和 iOS SDK 从一开始就基于 OpenTelemetry。OpenTelemetry Python 的 Elastic Distribution 是最新添加的。
设计选择
我们选择提供一个精简的发行版,默认情况下不会安装所有检测,而是提供安装工具。我们利用 OpenTelemetry Python 项目提供的 opentelemetry-bootstrap 工具来扫描你环境中安装的软件包并识别我们能够检测的库。此工具可以报告可用的检测,也可以选择安装它们。这使你可以避免安装不需要的软件包或不感兴趣的跟踪工具库。
入门
要开始使用 OpenTelemetry Python 的 Elastic Distribution,你需要在项目环境中安装 elastic-opentelemetry 包。我们将在示例中使用 pip,但你可以自由使用你选择的任何 Python 包和环境管理器。
pip install elastic-opentelemetry
安装我们的发行版后,你还可以使用 opentelemetry-bootstrap 命令。运行它:
opentelemetry-bootstrap
上面的命令将将列出你的检测的所有可用包,例如,你可以期待以下内容:
opentelemetry-instrumentation-asyncio==0.46b0
opentelemetry-instrumentation-dbapi==0.46b0
opentelemetry-instrumentation-logging==0.46b0
opentelemetry-instrumentation-sqlite3==0.46b0
opentelemetry-instrumentation-threading==0.46b0
opentelemetry-instrumentation-urllib==0.46b0
opentelemetry-instrumentation-wsgi==0.46b0
opentelemetry-instrumentation-grpc==0.46b0
opentelemetry-instrumentation-requests==0.46b0
opentelemetry-instrumentation-system-metrics==0.46b0
opentelemetry-instrumentation-urllib3==0.46b0
它还提供了一个命令选项来自动安装软件包:
opentelemetry-bootstrap --action=install
建议每次发布应用程序的新版本时都运行此命令,以便你可以安装或修改代码的任何检测包。
需要一些环境变量来提供检测服务所需的配置。这些变量主要涉及跟踪的目的地,但也用于轻松识别你的服务。需要服务名称才能将你的服务与其他服务区分开来。然后,你需要提供 authorization 标头,以便与 Elastic Observability 云和发送数据的 Elastic 云端点进行身份验证。
你从 Elastic 云无服务器项目获得的 API 密钥必须是 URL 编码的,你可以使用以下 Python 代码片段执行此操作:
from urllib.parse import quote
quote("ApiKey <your api key>)
一旦你拥有所有配置值,你可以通过环境变量导出,如下所示:
export OTEL_RESOURCE_ATTRIBUTES=service.name=<service-name>
export OTEL_EXPORTER_OTLP_HEADERS="Authorization=<url encoded apikey header value>"
export OTEL_EXPORTER_OTLP_ENDPOINT=<your elastic cloud url>
我们已经完成了配置,最后一个难题是使用 opentelemetry-instrument(提供零代码检测的包装器)包装你的服务调用。零代码(或自动)检测意味着发行版将设置 OpenTelemetry SDK 并为你启用所有先前安装的检测。不幸的是,零代码检测并不涵盖所有库,有些库(尤其是 Web 框架)需要最少的手动配置。
对于使用 gunicorn 运行的 Web 服务,它可能看起来像:
opentelemetry-instrument gunicorn main:app
结果是一个使用行业标准 OpenTelemetry 的可观察应用程序 — 提供许多流行 Python 库的高质量检测、可移植的 API 以避免供应商锁定和一个活跃的社区。
使用 Elastic Observability,你可以期待一些开箱即用的好处:丰富的跟踪查看、服务地图、集成指标和日志分析等。
下一步是什么?
Elastic 致力于帮助 OpenTelemetry 取得成功,并帮助我们的客户在其系统中有效地使用 OpenTelemetry。去年,我们捐赠了 ECS,并继续致力于将其与 OpenTelemetry 语义约定集成。最近,我们正在努力将基于 eBPF 的分析器捐赠给 OpenTelemetry。我们为许多语言 SDK 和其他 OpenTelemetry 项目做出了贡献。
在 Python 生态系统中,我们是 opentelemetry-python 和 opentelemetry-python-contrib 存储库的活跃审阅者和贡献者。
OpenTelemetry Python 的 Elastic Distribution 目前为 alpha 版本。请试用它,并让我们知道它是否适合你。请在此处关注最新版本。你可以在项目问题跟踪器上与我们互动。
我们渴望了解你的用例,以帮助你在可观察性之旅中取得成功。
本文中描述的任何特性或功能的发布和时间均由 Elastic 自行决定。任何当前不可用的特性或功能可能无法按时交付或根本无法交付。
原文:Introducing Elastic Distribution for OpenTelemetry Python — Elastic Observability Labs