Brave는 분산 추적 계측 라이브러리입니다. Brave는 일반적으로 생산 요청을 가로채서 타이밍 데이터를 수집하고 추적 컨텍스트를 연관시키고 전파합니다. 일반적으로 추적 데이터는 Zipkin 서버로 전송되지만 타사 플러그인을 사용하여 Amazon X-Ray와 같은 대체 서비스로 전송할 수 있습니다.
이 리포지토리에는 종속성이 없는 Java 라이브러리와 프로덕션 서비스에 사용되는 공통 구성 요소에 대한 계측이 포함되어 있습니다. 예를 들어 여기에는 Servlet용 추적 필터와 Apache Log4J용 로그 상관 관계가 포함됩니다.
간단한 웹 애플리케이션을 추적하는 방법에 대한 예제 프로젝트를 살펴볼 수 있습니다.
Brave의 종속성 없는 추적 라이브러리는 JRE6+에서 작동합니다. 이는 계측이 작업 시간을 측정하고 이를 설명하는 태그를 추가하는 데 사용하는 기본 API입니다. 이 라이브러리에는 X-B3-TraceId
헤더를 구문 분석하는 코드도 포함되어 있습니다.
대부분의 사용자는 추적 코드를 직접 작성하지 않습니다. 오히려 다른 사람들이 작성한 도구를 재사용합니다. 직접 제작하기 전에 장비 및 Zipkin 목록을 확인하세요. JDBC, Servlet 및 Spring과 같은 일반적인 추적 라이브러리가 이미 존재합니다. 여기에 작성된 계측은 테스트 및 벤치마킹되었습니다.
레거시 애플리케이션을 추적하려는 경우 Spring XML Configuration에 관심이 있을 수 있습니다. 이를 통해 사용자 정의 코드 없이 추적을 설정할 수 있습니다.
추적 ID를 로그 파일에 넣거나 스레드 로컬 동작을 변경할 수 있습니다. SLF4J와 같은 도구와의 통합을 위해 컨텍스트 라이브러리를 살펴보십시오.
모든 Brave 라이브러리는 추적되거나 통합되는 항목의 최소 Java 버전과 일치하며 타사 종속성을 추가하지 않습니다. 목표는 프로젝트의 선택에 영향을 주지 않고 다른 사람이 내린 종속성 결정에 프로젝트를 종속시키지 않는 것입니다.
예를 들어 기본 보고 라이브러리인 zipkin-sender-urlconnection을 포함하더라도 Brave에는 json, 로깅, protobuf 또는 thrift 종속성이 전이적으로 포함되지 않습니다. 이는 애플리케이션이 SLF4J, Gson 또는 Guava의 특정 버전을 선택하더라도 걱정할 필요가 없음을 의미합니다. 또한 json, thrift 또는 protobuf의 기본 보고를 포함한 전체 종속성 트리는 512KiB 미만의 jar입니다.
이전 JRE 및 이전 Android 런타임을 허용하지만 일부 애플리케이션을 제한할 수 있는 1.6의 플로어 Java 버전이 있습니다. 예를 들어, Servlet 2.5는 Java 1.5에서 작동하지만 Brave가 1.6이므로 JRE 1.6 이상을 사용할 때까지 Servlet 2.5 애플리케이션을 추적할 수 없습니다.
모든 통합은 관련 라이브러리를 "제공된" 범위로 설정합니다. 이렇게 하면 Brave가 선택한 버전을 방해하지 않습니다.
일부 라이브러리는 자주 업데이트되어 API 드리프트가 발생합니다. 어떤 경우에는 이로 인한 영향을 줄이기 위해 버전 범위를 테스트합니다. 예를 들어 여러 라이브러리 버전에 대해 gRPC 및 Kafka를 테스트합니다.
모든 아티팩트는 그룹 ID "io.zipkin.brave"에 게시됩니다. 우리는 모든 구성 요소에 공통 릴리스 버전을 사용합니다.
스냅샷은 Maven Central과 동기화되는 Sonatype에 업로드됩니다.
마스터에 커밋한 후 스냅샷이 Sonatype에 업로드됩니다.
여러 개의 Brave 구성요소를 사용하는 경우 버전을 한곳에 정렬하는 것이 좋습니다. 이를 통해 충돌에 대한 걱정을 덜고 더욱 안전하게 업그레이드할 수 있습니다.
이를 위해 Maven 계측 BOM(Bill of Materials)을 사용할 수 있습니다.
전. 종속성 섹션에서 다음과 같이 BOM을 가져옵니다.
< dependencyManagement >
< dependencies >
< dependency >
< groupId >io.zipkin.brave</ groupId >
< artifactId >brave-bom</ artifactId >
< version >${brave.version}</ version >
< type >pom</ type >
< scope >import</ scope >
</ dependency >
</ dependencies >
</ dependencyManagement >
이제 지원되는 계측을 선택할 때 버전을 중단할 수 있습니다. 또한 간접적으로 사용하는 경우에도 버전이 정렬됩니다.
< dependency >
< groupId >io.zipkin.brave</ groupId >
< artifactId >brave-instrumentation-okhttp3</ artifactId >
</ dependency >
위의 내용을 적용하면 brave.version
속성을 사용하여 종속성 버전을 일관되게 재정의할 수 있습니다. 이는 새로운 기능이나 수정 사항을 테스트하는 데 가장 일반적으로 사용됩니다.
참고: 버전을 재정의하는 경우 버전이 업데이트 중인 버전과 유효한지(동일하거나 이후 버전인지) 항상 다시 확인하세요. 이렇게 하면 클래스 충돌을 피할 수 있습니다.