Open NineTIN opened 10 months ago
@NineTIN
안녕하세요. codeBase 위치가 잘못되었을 경우 메소드 스캔이 이루어지지 않을 수 있습니다. 참고하시면 좋을만한 Configuration 가이드 전달드립니다.
해당 설정 확인 후에도 정상적으로 동작하지 않는다면 scavenger.conf 파일 공유 부탁드리겠습니다.
@sohyun-ku
안녕하세요
답변 감사드립니다.
Configuration 가이드를 참고하여 codeBase
를 설정 해보았으나
해결이 되지않아 scavenger.conf
를 첨부 드립니다.
번거롭게 합니다만 확인 부탁드리겠습니다. 감사합니다.
@NineTIN 안녕하세요. ( )
공유주신 설정과 로그상으로는 정보가 너무 제한적이라 확인이 어렵긴합니다...
로그상으로는 설정파일은 잘읽었으나 에이전트가 bootJar를 탐색할 때 com.example.application
패키지에 위치한 클래스(메소드)를 읽지 못했다로 보이긴합니다..
혹시 재현가능한 환경(jar와 사용하시는 jdk버전)을 공유주시기는 어려우실까요??
@taeyeon-Kim 안녕하세요, 더 자세한 정보를 제공하지 못해 죄송합니다. 문제가 재현되는 프로젝트를 아래 리포지토리에 업로드해두었습니다. 확인해주시면 감사하겠습니다.
그런데 여러 가지를 시도해본 결과, gradle의 bootJar 설정을 제거하니 정상적으로 스캔되는 현상을 발견해서 추가로 알려드립니다. 🤔
@NineTIN 넵 확인했습니다.
혹시 bootJar task에 launchScript()
를 추가하셔야하는 이유가 있을까요??
jar파일을 직접 실행하고 있지않고 java -jar
로 수행하고 계시다면 해당 설정은 필요없어 보여 제거하면 될 것 같습니다.
@taeyeon-Kim
특별한 이유는 없이, 스프링 애플리케이션을 데몬 서비스로 등록하여 사용할 수 있게 하는 옵션 정도로 생각하고 자연스럽게 추가했던 것 같습니다.
말씀하신 대로 java -jar
로 애플리케이션을 실행하고 있으니 launchScript()
는 제거하도록 하겠습니다.
확인해주셔서 감사합니다.
그런데 한 가지 마음에 걸리는 점이 있습니다.
launchScript()
는 데몬 서비스 사용을 강제하는 옵션이 아니라고 알고 있는데, 이 설정이 Scavenger에 어떤 영향을 끼쳤다는 말씀이실까요?
@NineTIN
launchScript()
추가 시 agent의 codeBase 탐색과정에서 클래스 파일 정보를 가져오지 못하는 이슈가 있는 것으로 확인했습니다.
해당 옵션이 꼭 필요한 케이스가 아니라면 우선 제외 후 사용 부탁드립니다. ( )
@NineTIN
안녕하세요. 해당 설정이 어떠한 영향을 끼쳤는지 간략하게 설명 드리자면, launchScript()
를 추가하신 뒤에 생성된 jar를 보시면 일반적인 jar가 아니고 셸 스크립트가 앞부분에 추가되어 있는 형태인 것을 확인하실 수 있습니다. 이는 systemd 등에 데몬 서비스로 등록할 때 자바의 경로를 찾는 등의 수고를 덜기 위해 직접 실행 가능하도록 해당 과정이 포함된 셸 스크립트가 생성되는 것인데요.
Scavenger는 탐색 과정에서 확장자가 jar인 파일을 마주치게 되면 해당 파일을 압축 파일로 취급하여 클래스 파일들을 추출하려는 시도를 하게 되는데, 이 과정에서 정상적인 압축 파일이 아니라 판단하여 해당 파일을 무시하게 됩니다.
launchScript()
설정을 사용하여 생성된 jar가 몇몇 툴들과 호환되지 않을 수 있다는 내용은 Spring Boot의 문서에도 간략하게 언급되어 있습니다.
안녕하세요. Scavenger 도입을 검토 중인데, Spring Boot 애플리케이션에 Scavenger Agent를 적용했을 때 아래와 같은 메시지가 나타나며 메소드들을 찾을 수 없다고 합니다.
package명이나 jar 파일의 위치, conf 파일 설정 등을 확인해보았지만, 이렇다 할 문제는 발견되지 않았습니다. 어떤 상황에서 메소드 스캔이 이루어지지 않는지와 이를 해결할 수 있는 방법에 대해 알려주실 수 있나요? 감사합니다.