OpenTelemetry Java 代理使 Java 應用程序能夠自動生成和捕獲遙測數(shù)據(jù)。本文將全面概述了 OpenTelemetry Java 代理,包括它的工作原理。但首先,讓我們一下了解 OpenTelemetry 是什么。
什么是OpenTelemetry?
OpenTelemetry 是一組代碼 , 一組 API、SDK、工具和集成,它可以幫你生成、發(fā)出、收集、處理和導出 Telemetry 數(shù)據(jù)。
使用 OpenTelemetry 捕獲的遙測數(shù)據(jù)可以讓你的系統(tǒng)和應用程序具有可觀察性。它還會標準化這個過程。你使用 OpenTelemetry 收集的數(shù)據(jù)與供應商無關,可以用多種格式導出。
OpenTelemetry 不附帶后端分析工具。對于 Telemetry 數(shù)據(jù)的存儲、分析和可視化,你還可以使用像SigNoz這樣的全??捎^察性平臺。
我們如何使用 OpenTelemetry 生成 Telemetry數(shù)據(jù)?
Telemetry 數(shù)據(jù)是使用稱為檢測的過程生成的。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 數(shù)據(jù)。你需要將其附加到任何 Java 8+ 應用程序。我們將在下面了解有關 Java 代理的更多信息。
opentelemetry-java-contribOpenTelemetry java 提供這個 repo 來涵蓋不適合 opentelemetry-java 和 opentelemetry-java-instrumentation 范圍的基于 JVM 的應用程序和工作流。
什么是 OpenTelemetry Java 代理?
OpenTelemetry 有一個非常方便的 Java JAR 代理,可以附加到任何 Java 8+ 應用程序以檢測 Java 應用程序。Java JAR 代理可以檢測許多流行的庫和框架,并開箱即用地對其進行檢測以生成遙測數(shù)據(jù)。
OpenTelemetry 收集器捕獲生成的 Telemetry 數(shù)據(jù),然后可以將其導出為所需的格式。如果你用的是 SigNoz,那么就可以使用默認的 OTLP 導出器。Java 代理和導出器可以通過命令行配置一些環(huán)境變量。你無需對代碼進行任何更改,這就是為什么開始使用 OpenTelemetry Java 代理如此方便的原因。
如何使用 OpenTelemetry Java 代理?
需要為要監(jiān)視的每個主機下載和分發(fā) Java 代理。
使用 OpenTelemetry Java 代理的步驟:
- 下載最新的 Java JAR 代理并將其分發(fā)到每個受監(jiān)控的主機和服務。
- 準備環(huán)境變量,例如受監(jiān)控服務的服務名稱和將導出數(shù)據(jù)的端點
- 運行時將代理附加到應用程序的 jar 中
如果你想要將數(shù)據(jù)導出到SigNoz等可觀察性工具,則必須指定托管 SigNoz 的主機的 IP 地址。SigNoz 在端口號 4317 偵聽傳入數(shù)據(jù)。因此請記住允許傳入請求到 SigNoz 所在的端口號 4317。
要處理的一些環(huán)境變量的示例:
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 代理將動態(tài)注入字節(jié)碼以從許多流行的庫和框架中捕獲遙測數(shù)據(jù)。讓我們看看列表中包含的一些庫和框架是什么。
OpenTelemetry Java 代理支持的庫和框架列表
OpenTelemetry Java 代理支持的用于自動檢測的庫和框架包括:
- Akka HTTP 10.0+
- Apache HttpClient 2.0+
- AWS Lambda 1.0+
- AWS 開發(fā)工具包 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 是一個與供應商無關的工具庫。因此遙測數(shù)據(jù)是可移植的。您可以將其配置為以多種不同格式導出。像SigNoz這樣的工具支持默認的 OTLP 格式,是發(fā)送遙測數(shù)據(jù)的完美選擇。它還帶有一個可視化層,您可以在其中可視化圖表,例如流行的 RED 指標和使用火焰圖和甘特圖的分布式跟蹤。