JVM을위한 OpenTeLetret 트레이싱 안내서
내가 OpenTeLemetry의 열렬한 팬이라는 것을 알 수 있습니다. 나는 최근에 Yow의 마스터 클래스 개발을 마쳤다! 연말에 회의. 개발 중에 프로그래밍 언어의 구성과 결과에 큰 차이가 있음을 알았습니다. 더 나쁜 것은 동일한 프로그래밍 언어 내의 프레임 워크에 차이가 있습니다.
이 게시물에서는 JVM의 다른 제로 코드 OpentElemetry 접근법을 가장 널리 퍼져있는 것과 비교하고 싶습니다.
- 마이크로 미터 추적이있는 스프링 부팅
- OpenTeLemetry 에이전트가있는 스프링 부팅
- OpenTelemetry 스프링 부트 스타터
- Quarkus
- OpenTeLemetry 에이전트와 함께 Quarkus
공통점
나는 건축을 매우 간단하게 유지합니다.
원격 서비스와 데이터베이스 모두에서 반응성 데이터 액세스를 사용하여 Kotlin Coroutines를 조금씩 향상시킵니다. 일반 구조는 다음과 같습니다.
val products = coroutineScope {
val ping = async {
// Call the ping service
}
val products = async {
// Query the database
}
println("Received ping response: ${ping.await()}")
products.await()
}
각 스택의 기능은 다음과 같습니다.
Quarkus |
봄 부츠 |
|
---|---|---|
편물 |
폭동 |
웹 플럭스 |
HTTP 클라이언트 |
휴식 클라이언트 |
|
데이터베이스 액세스 패턴 |
기록 |
저장소 |
데이터베이스 액세스 |
Panache와 반응하는 최대 절전 모드 |
R2DBC |
OpenTelemetry 에이전트를 실행합니다
OpenTelemetry Java 에이전트는 OpenTelemetry와 관련하여 내가 사용한 첫 번째 접근법입니다.
필요한 구성은 JVM을 실행할 때 에이전트를 설정하는 것입니다.
java -javaagent:opentelemetry-javaagent.jar -jar otel-boot-agent.jar
이 에이전트는 Spring Boot, Quarkus, KTOR, Spark 및 기타 여러 가지를 포함한 많은 프레임 워크 및 라이브러리를 지원합니다. 응용 프로그램 흐름이 지원되는 프레임 워크/라이브러리를 찾으면 스팬을 기록합니다.
에이전트는 표준 OpenTeLetry 환경 변수를지지합니다.
services:
otel-boot-agent:
build: otel-boot-agent
environment:
OTEL_SERVICE_NAME: OTEL Boot Agent #1
OTEL_EXPORTER_OTLP_ENDPOINT: #2
OTEL_METRICS_EXPORTER: none #3
OTEL_LOGS_EXPORTER: none #3
- OpenTelemetry 서비스 이름
- OpenTelemetry 종말점; Spring Boot는 HTTP를 사용합니다
- 메트릭이나 로그가 아닙니다
Spring Boot 응용 프로그램에서 엔드 포인트를 호출 할 때 Jaeger 추적은 다음과 같습니다.
그리고 여기 Quarkus에있는 것이 있습니다.
Spring Boot에는 저장소 호출을 표시하는 추가 스팬이 있습니다. 레코드 패턴을 사용하여 데이터에 액세스하기 때문에 Quarkus에는 그러한 것이 없습니다.
에이전트는 두 프레임 워크에서 SQL 쿼리를 출력합니다. 즉,,, SELECT product.* FROM product
. Java 에이전트는 상자 밖에서 작동합니다.
스프링 부팅에서 마이크로 미터 추적
Spring Boot는 마이크로 미터 추적을 통해 전용 OpenTelemetry 지원을 제공합니다.
마이크로 미터 추적은 가장 인기있는 트레이서 라이브러리를위한 간단한 외관을 제공하므로 공급 업체 잠금 장치없이 JVM 기반 애플리케이션 코드를 기기 할 수 있습니다. 추적 노력의 휴대 성을 극대화하면서 추적 수집 활동에 오버 헤드를 거의 추가하지 않도록 설계되었습니다.
마이크로 미터 추적 종속성 자체 외에도 추가가 필요합니다.
- 스프링 부트 액추에이터
- 브리지 – 오피스 텔레미트
- 수출업자 – 오피니티 측정
구성은 OpenTeLecry 표준을 따르지 않습니다.
services:
otel-boot-micrometer:
environment:
SPRING_APPLICATION_NAME: OTEL Micrometer #1-2
MANAGEMENT_OTLP_TRACING_ENDPOINT: /v1/traces #1-3
- OpenTelemrety 사양과 다른 값
- 스프링 응용 프로그램 이름은 OpenTelemetry 서비스 이름 역할을합니다.
- API 종말점으로의 전체 경로
위의 설정은 데이터베이스 호출을 등록하지 않습니다. 이를 해결하려면 추가 종속성이 필요합니다 : R2DBC 프록시.
새로운 트레이스에는 데이터베이스 범위가 포함되어 있습니다.
또 다른 문제를 알 수 있습니다. 서비스에 대한 통화와 데이터베이스는 순차적이며 평행이어야합니다. 컨텍스트 전파가 코 루틴 범위에 올바르게 처리되지 않는 스프링 부츠에서 비롯됩니다. 봄 팀의 근본적인 작업입니다. 관심이 있으시면 GitHub 문제를 구독하십시오.
OpenTelemetry 스프링 부트 스타터
OpenTelemetry 프로젝트는 스프링 부트 스타터를 제공합니다. 단일 의존성 만 필요하며 다른 스타터와 마찬가지로 Spring Boot Magic은 구성을 관리합니다.
io.opentelemetry.instrumentation
opentelemetry-spring-boot-starter
결과는 말이되지 않지만 시련된 문제를 포함하여 이전의 문제와 매우 유사합니다.
Quarkus
첫 번째 섹션에서 OpenTeLemetry 에이전트를 사용한 결과를 보았습니다. 에이전트없이 OpenTeLemetry를 사용하는 것은 매우 간단합니다. 단일 의존성이 필요합니다.
io.quarkus
quarkus-opentelemetry
Quarkus 접두사 정기적 인 OpenTeLecry 환경 변수 이름이 있습니다 QUARKUS_
:
services:
otel-quarkus:
environment:
QUARKUS_OTEL_SERVICE_NAME: OTEL Quarkus #1
QUARKUS_OTEL_EXPORTER_OTLP_TRACES_ENDPOINT: #2
- OpenTelemetry 서비스 이름
- OpenTelemetry 종말점; Quarkus는 Grpc를 사용합니다
결과는 예상대로 다음과 같습니다.
논의
OpenTeLemetry 접근 방식은 구성 및 결과 모두에서 크게 다릅니다. 기술적 또는 조직적 이유로 Java 에이전트를 사용하지 않는 한 OpenTelemetry 에이전트를 먼저 사용하는 것이 좋습니다. 가장 일반적인 라이브러리를 포함하여 상자에서 버릴 수있는 모든 것을 처리합니다. 그 사실을 제외하고, 당신은 당신이 사용하고있는 스택에 대한 깊은 지식이 필요합니다. 결과는 실제로 일어나는 일을 나타내지 않을 것입니다.
이 게시물의 전체 소스 코드는 Github에서 찾을 수 있습니다.
더 나아가려면 :
원래 2025 년 8 월 3 일에 Java Geek에서 출판
Post Comment