프로젝트 소개

BTrace는 실행 중인 Java 애플리케이션을 동적으로 계측하여 대상의 재시작이나 재컴파일 없이 동작을 관찰할 수 있도록 런타임에 추적 코드를 주입합니다. 이 프로젝트는 프로덕션 안전성을 강조합니다. 스크립트가 검증되며, README에는 검증된 스크립트는 애플리케이션을 크래시시킬 수 없다고 명시되어 있습니다. 오버헤드는 바이트코드 주입을 통해 낮게 유지된다고 설명됩니다. 지원 런타임: BTrace 3.0은 Java 8~25+에서 실행되며, Java 17보다 오래된 JVM에 대한 실행은 더 이상 권장되지 않습니다(3.x에서는 경고와 함께 여전히 작동하며 4.0에서 제거 예정). 마이그레이션 가이드에서 2.x에서의 업그레이드를 다룹니다. README에 강조된 기능: - 메서드 진입/종료, 타이밍, 필드 접근 및 할당을 위한 프로브. - 어노테이션이 달린 Java 클래스로 작성되는 메서드 타이밍, 예외 추적, 커스텀 프로브(예: @Self 및 @Duration 매개변수가 있는 @OnMethod). - 빠른 디버깅을 위한 DTrace 스타일 원라이너: 위치(@entry, @return, @error), 액션(print, count, time, stack), 필터(지속 시간 임계값, 인자 비교), 와일드카드 또는 정규식 클래스/메서드 패턴. 설치 및 패키징 옵션으로는 JBang(권장, 게시된 카탈로그로 무설치), SDKMan, 수동 바이너리 아카이브, RPM/DEB 패키지, Docker 이미지(Debian, Alpine, Distroless 변형)가 있습니다. fat 에이전트 JAR 빌드는 Spark, Hadoop, Kubernetes 같은 환경을 위한 단일 JAR 배포를 지원하며, 선택한 확장을 내장하기 위한 Gradle 플러그인(io.btrace.fat-agent)이 있습니다. Maven 스크립트 컴파일 플러그인은 별도 저장소에 있습니다. 확장 기능은 격리된 구현과 함께 안정적인 부트스트랩 API를 통해 기능을 추가합니다. 레거시 libs/profiles 메커니즘은 제거되었으며 통합은 확장으로 패키징되어야 합니다. 권한 모델은 기본 권한(MESSAGING, AGGREGATION, JFR_EVENTS, PROFILING), 표준 권한(FILE_READ, SYSTEM_PROPS, THREAD_INFO, MEMORY_INFO), 특권 권한(FILE_WRITE, NETWORK, THREADS, NATIVE, EXEC, REFLECTION, CLASSLOADER, UNLIMITED_MEMORY)을 구분합니다. 특권 부여는 에이전트 옵션이나 정책 파일을 통해 설정되며, 허용/거부 목록이 확장 연결을 제어하고 차단된 구현은 SHIM으로 대체되어 프로브가 안전하게 계속 작동합니다. btracex CLI는 확장 및 정책을 검사하고 관리하며, 허용/거부 상태를 탐색하고 전환하기 위한 대화형 터미널 UI를 포함합니다. 문서에는 빠른 참조, 시작하기 튜토리얼, 전체 튜토리얼, 원라이너 가이드, 확장 개발 가이드 및 문서 허브가 포함됩니다. 커뮤니티 채널은 Slack, Gitter, GitHub Issues입니다. 기여하려면 Oracle Contributor Agreement에 서명해야 합니다. Apache 2.0 라이선스이며 ASM, JCTools, hppcrt로 빌드되었습니다.