OpenTelemetry Java 代理使 Java 應(yīng)用程序能夠自動(dòng)生成和捕獲遙測(cè)數(shù)據(jù)。本文將全面概述了 OpenTelemetry Java 代理,包括它的工作原理。但首先,讓我們一下了解 OpenTelemetry 是什么。
什么是OpenTelemetry?
OpenTelemetry 是一組代碼 , 一組 API、SDK、工具和集成,它可以幫你生成、發(fā)出、收集、處理和導(dǎo)出 Telemetry 數(shù)據(jù)。
使用 OpenTelemetry 捕獲的遙測(cè)數(shù)據(jù)可以讓你的系統(tǒng)和應(yīng)用程序具有可觀察性。它還會(huì)標(biāo)準(zhǔn)化這個(gè)過(guò)程。你使用 OpenTelemetry 收集的數(shù)據(jù)與供應(yīng)商無(wú)關(guān),可以用多種格式導(dǎo)出。
OpenTelemetry 不附帶后端分析工具。對(duì)于 Telemetry 數(shù)據(jù)的存儲(chǔ)、分析和可視化,你還可以使用像SigNoz這樣的全??捎^察性平臺(tái)。
我們?nèi)绾问褂?OpenTelemetry 生成 Telemetry數(shù)據(jù)?
Telemetry 數(shù)據(jù)是使用稱為檢測(cè)的過(guò)程生成的。OpenTelemetry 為手動(dòng)和自動(dòng)檢測(cè)提供檢測(cè)庫(kù)。這些庫(kù)特定于它們所使用的語(yǔ)言。設(shè)置檢測(cè)的說(shuō)明也因編程語(yǔ)言而異。
OpenTelemetry 將檢測(cè)庫(kù)定義為支持另一個(gè)庫(kù)的可觀察性的庫(kù)。
OpenTelemetry Java 庫(kù)
對(duì)于 Java 應(yīng)用程序,OpenTelemetry 提供了三個(gè)存儲(chǔ)庫(kù):
opentelemetry-java這個(gè) repo 是主要的 OpenTelemetry Java SDK 并提供用于手動(dòng)檢測(cè)的組件。頂級(jí)組件包括 OpenTelemetry API、擴(kuò)展、SDK、用于 OpenTracing 和 OpenCensus 的橋接層。
opentelemetry-java-instrumentation這是opentelemetry-java的兄弟項(xiàng)目,提供一體化、易于安裝的自動(dòng)檢測(cè) Java 代理。OpenTelemetry Java 代理使您能夠從許多流行的庫(kù)和框架中捕獲 Telemetry 數(shù)據(jù)。你需要將其附加到任何 Java 8+ 應(yīng)用程序。我們將在下面了解有關(guān) Java 代理的更多信息。
opentelemetry-java-contribOpenTelemetry java 提供這個(gè) repo 來(lái)涵蓋不適合 opentelemetry-java 和 opentelemetry-java-instrumentation 范圍的基于 JVM 的應(yīng)用程序和工作流。
什么是 OpenTelemetry Java 代理?
OpenTelemetry 有一個(gè)非常方便的 Java JAR 代理,可以附加到任何 Java 8+ 應(yīng)用程序以檢測(cè) Java 應(yīng)用程序。Java JAR 代理可以檢測(cè)許多流行的庫(kù)和框架,并開箱即用地對(duì)其進(jìn)行檢測(cè)以生成遙測(cè)數(shù)據(jù)。
OpenTelemetry 收集器捕獲生成的 Telemetry 數(shù)據(jù),然后可以將其導(dǎo)出為所需的格式。如果你用的是 SigNoz,那么就可以使用默認(rèn)的 OTLP 導(dǎo)出器。Java 代理和導(dǎo)出器可以通過(guò)命令行配置一些環(huán)境變量。你無(wú)需對(duì)代碼進(jìn)行任何更改,這就是為什么開始使用 OpenTelemetry Java 代理如此方便的原因。
如何使用 OpenTelemetry Java 代理?
需要為要監(jiān)視的每個(gè)主機(jī)下載和分發(fā) Java 代理。
使用 OpenTelemetry Java 代理的步驟:
- 下載最新的 Java JAR 代理并將其分發(fā)到每個(gè)受監(jiān)控的主機(jī)和服務(wù)。
- 準(zhǔn)備環(huán)境變量,例如受監(jiān)控服務(wù)的服務(wù)名稱和將導(dǎo)出數(shù)據(jù)的端點(diǎn)
- 運(yùn)行時(shí)將代理附加到應(yīng)用程序的 jar 中
如果你想要將數(shù)據(jù)導(dǎo)出到SigNoz等可觀察性工具,則必須指定托管 SigNoz 的主機(jī)的 IP 地址。SigNoz 在端口號(hào) 4317 偵聽傳入數(shù)據(jù)。因此請(qǐng)記住允許傳入請(qǐng)求到 SigNoz 所在的端口號(hào) 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"
讓我們看看當(dāng)你想要運(yùn)行附加到應(yīng)用程序的 Java 代理時(shí)命令的樣子:
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 文件的路徑需要替換為下載文件的位置。例如,對(duì)于我的本地,命令??如下所示:
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
有了這個(gè),OpenTelemetry Java 代理將動(dòng)態(tài)注入字節(jié)碼以從許多流行的庫(kù)和框架中捕獲遙測(cè)數(shù)據(jù)。讓我們看看列表中包含的一些庫(kù)和框架是什么。
OpenTelemetry Java 代理支持的庫(kù)和框架列表
OpenTelemetry Java 代理支持的用于自動(dòng)檢測(cè)的庫(kù)和框架包括:
- Akka HTTP 10.0+
- Apache HttpClient 2.0+
- AWS Lambda 1.0+
- AWS 開發(fā)工具包 1.11.x 和 2.2.0+
- Cassandra 驅(qū)動(dòng)程序 3.0+
- 彈性搜索 API 5.0+
- Elasticsearch REST 客戶端 5.0+
- gRPC 1.6+
- JDBC Java 8+
- 絕地武士 1.4+
- 卡夫卡 0.11+
- Kubernetes 客戶端 7.0+
- MongoDB 驅(qū)動(dòng)程序 3.1+
- OkHttp 3.0+
- RabbitMQ 客戶端 2.7+
- Spark Web 框架 2.3+
- Spring Web 服務(wù) 2.0+
- Vert.x 3.0+
Java 代理支持的一些流行應(yīng)用服務(wù)器包括 Glassfish、JBoss EAP、Jetty、Payara、Tomcat、TomEE、Weblogic 和 Wildfly。
你可以在opentelemetry-java-instrumentation GitHub存儲(chǔ)庫(kù)中找到 OpenTelemetry Java 代理支持的受支持庫(kù)和框架的完整列表。
結(jié)論
OpenTelemetry Java Jar 代理提供了一種快速方便的方法來(lái)使您的 Java 應(yīng)用程序具有可觀察性。通過(guò)對(duì)許多流行庫(kù)進(jìn)行開箱即用的檢測(cè),Java 代理可以成為使用 OpenTelemetry 檢測(cè)應(yīng)用程序的良好起點(diǎn)。
如前所述,OpenTelemetry 是一個(gè)與供應(yīng)商無(wú)關(guān)的工具庫(kù)。因此遙測(cè)數(shù)據(jù)是可移植的。您可以將其配置為以多種不同格式導(dǎo)出。像SigNoz這樣的工具支持默認(rèn)的 OTLP 格式,是發(fā)送遙測(cè)數(shù)據(jù)的完美選擇。它還帶有一個(gè)可視化層,您可以在其中可視化圖表,例如流行的 RED 指標(biāo)和使用火焰圖和甘特圖的分布式跟蹤。