OpenTelemetry Java 代理使 Java 应用程序能够自动生成和捕获遥测数据。本文将全面概述了 OpenTelemetry Java 代理,包括它的工作原理。但首先,让我们一下了解 OpenTelemetry 是什么。
什么是OpenTelemetry?
OpenTelemetry 是一组代码 , 一组 API、SDK、工具和集成,它可以帮你生成、发出、收集、处理和导出 Telemetry 数据。
使用 OpenTelemetry 捕获的遥测数据可以让你的系统和应用程序具有可观察性。它还会标准化这个过程。你使用 OpenTelemetry 收集的数据与供应商无关,可以用多种格式导出。
OpenTelemetry 不附带后端分析工具。对于 Telemetry 数据的存储、分析和可视化,你还可以使用像SigNoz这样的全栈可观察性平台。
我们如何使用 OpenTelemetry 生成 Telemetry数据?
Telemetry 数据是使用称为检测的过程生成的。OpenTelemetry 为手动和自动检测提供检测库。这些库特定于它们所使用的语言。设置检测的说明也因编程语言而异。
OpenTelemetry 将检测库定义为支持另一个库的可观察性的库。
OpenTelemetry Java 库
对于 Java 应用程序,OpenTelemetry 提供了三个存储库:
opentelemetry-java这个 repo 是主要的 OpenTelemetry Java SDK 并提供用于手动检测的组件。顶级组件包括 OpenTelemetry API、扩展、SDK、用于 OpenTracing 和 OpenCensus 的桥接层。
opentelemetry-java-instrumentation这是opentelemetry-java的兄弟项目,提供一体化、易于安装的自动检测 Java 代理。OpenTelemetry Java 代理使您能够从许多流行的库和框架中捕获 Telemetry 数据。你需要将其附加到任何 Java 8+ 应用程序。我们将在下面了解有关 Java 代理的更多信息。
opentelemetry-java-contribOpenTelemetry java 提供这个 repo 来涵盖不适合 opentelemetry-java 和 opentelemetry-java-instrumentation 范围的基于 JVM 的应用程序和工作流。
什么是 OpenTelemetry Java 代理?
OpenTelemetry 有一个非常方便的 Java JAR 代理,可以附加到任何 Java 8+ 应用程序以检测 Java 应用程序。Java JAR 代理可以检测许多流行的库和框架,并开箱即用地对其进行检测以生成遥测数据。
OpenTelemetry 收集器捕获生成的 Telemetry 数据,然后可以将其导出为所需的格式。如果你用的是 SigNoz,那么就可以使用默认的 OTLP 导出器。Java 代理和导出器可以通过命令行配置一些环境变量。你无需对代码进行任何更改,这就是为什么开始使用 OpenTelemetry Java 代理如此方便的原因。
如何使用 OpenTelemetry Java 代理?
需要为要监视的每个主机下载和分发 Java 代理。
使用 OpenTelemetry Java 代理的步骤:
- 下载最新的 Java JAR 代理并将其分发到每个受监控的主机和服务。
- 准备环境变量,例如受监控服务的服务名称和将导出数据的端点
- 运行时将代理附加到应用程序的 jar 中
如果你想要将数据导出到SigNoz等可观察性工具,则必须指定托管 SigNoz 的主机的 IP 地址。SigNoz 在端口号 4317 侦听传入数据。因此请记住允许传入请求到 SigNoz 所在的端口号 4317。
要处理的一些环境变量的示例:
OTEL_TRACES_EXPORTER=otlp
OTEL_METRICS_EXPORTER=none
OTEL_EXPORTER_OTLP_ENDPOINT=<IP of SigNoz Backend>:4317
OTEL_RESOURCE_ATTRIBUTES="service.name=SERVICE_NAME"
让我们看看当你想要运行附加到应用程序的 Java 代理时命令的样子:
OTEL_METRICS_EXPORTER=none
OTEL_EXPORTER_OTLP_ENDPOINT="http://<IP of SigNoz>:4317"
OTEL_RESOURCE_ATTRIBUTES=service.name=javaApp
java -javaagent:/path/to/opentelemetry-javaagent-all.jar -jar target/*.jar
Java 代理 JAR 文件的路径需要替换为下载文件的位置。例如,对于我的本地,命令如下所示:
OTEL_METRICS_EXPORTER=none
OTEL_EXPORTER_OTLP_ENDPOINT="http://<IP of SigNoz>:4317"
OTEL_RESOURCE_ATTRIBUTES=service.name=javaApp
java -javaagent:/Users/Downloads/to/opentelemetry-javaagent-all.jar -jar target/*.jar
有了这个,OpenTelemetry Java 代理将动态注入字节码以从许多流行的库和框架中捕获遥测数据。让我们看看列表中包含的一些库和框架是什么。
OpenTelemetry Java 代理支持的库和框架列表
OpenTelemetry Java 代理支持的用于自动检测的库和框架包括:
- Akka HTTP 10.0+
- Apache HttpClient 2.0+
- AWS Lambda 1.0+
- AWS 开发工具包 1.11.x 和 2.2.0+
- Cassandra 驱动程序 3.0+
- 弹性搜索 API 5.0+
- Elasticsearch REST 客户端 5.0+
- gRPC 1.6+
- JDBC Java 8+
- 绝地武士 1.4+
- 卡夫卡 0.11+
- Kubernetes 客户端 7.0+
- MongoDB 驱动程序 3.1+
- OkHttp 3.0+
- RabbitMQ 客户端 2.7+
- Spark Web 框架 2.3+
- Spring Web 服务 2.0+
- Vert.x 3.0+
Java 代理支持的一些流行应用服务器包括 Glassfish、JBoss EAP、Jetty、Payara、Tomcat、TomEE、Weblogic 和 Wildfly。
你可以在opentelemetry-java-instrumentation GitHub存储库中找到 OpenTelemetry Java 代理支持的受支持库和框架的完整列表。
结论
OpenTelemetry Java Jar 代理提供了一种快速方便的方法来使您的 Java 应用程序具有可观察性。通过对许多流行库进行开箱即用的检测,Java 代理可以成为使用 OpenTelemetry 检测应用程序的良好起点。
如前所述,OpenTelemetry 是一个与供应商无关的工具库。因此遥测数据是可移植的。您可以将其配置为以多种不同格式导出。像SigNoz这样的工具支持默认的 OTLP 格式,是发送遥测数据的完美选择。它还带有一个可视化层,您可以在其中可视化图表,例如流行的 RED 指标和使用火焰图和甘特图的分布式跟踪。