需要了解的有关 OpenTelemetry Java 代理的所有信息

2021-08-25 11:05:58 浏览数 (4286)

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 指标和使用火焰图和甘特图的分布式跟踪。

用户界面
火焰图