본문 바로가기
Infra

(APM/Newrelic/Spring) Spring App 모니터링 적용 - Newrelic

by Developer RyanKim 2019. 9. 11.

https://newrelic.com/devops/what-is-devops

 

What Is DevOps - Explained | New Relic

Learn how this modern software development methodology can help your organization improve collaboration across IT teams, accelerate deploy cycles, and deliver better customer experiences.

newrelic.com

- NewRelic 관점에서 데브옵스의 정의에 관한 글

자사 서비스는 MSA SpringBoot로 구성되어있고,
서버는 AWS EC2 인스턴스 여러개를 사용하며
빌드와 배포에 Jenkins, AWS CodeDeploy를 사용합니다.

 

각 인스턴스의 서비스들을 효과적으로 모니터링할 APM 적용의 필요성을 느꼈고 NewRelic APM을 적용하기로 하였습니다! (많이 비싸답니다... ㅎㅎ)

참고 : https://docs.newrelic.com/docs/apm/new-relic-apm/getting-started/introduction-new-relic-apm

 

  • APM 기능을 세팅하기 위해 필요한 파일
  1. newrelic.jar : APM 기능을 수행하는 jar 파일
  2. newrelic.yml : jar 실행 시점에 필요한 환경변수들을 세팅하는 파일
  3. newrelic.yml의 필수 설정 
    1. app_name : 어플리케이션의 이름. 이 이름을 단위로 모니터링이 수행된다.
    2. license_key  : newrelic 계정에 부여된 key. 

 

- 기본적으로 쉽게 NewRelic을 적용하는 방법은 jar파일을 받고, newrelic.yml으로 필요한 설정을 한뒤에
java run 실행시 -javaagent 옵션으로 함께 실행하는 방법이 있습니다.

예시)

java -javaagent:{경로}/newrelic.jar -jar {경로}/myapp.jar

* 주의!

1. -jar 옵션이 -javaagent 뒤에 있어야 한다.

2. newrelic.yml의 위치가 newrelic.jar의 디렉토리와 같은 곳에 있어야 한다.

 


하지만 제가 원한 것은 빌드 & 배포시에 자동으로 Newrelic이 세팅되는 것이었습니다.
아래 제가 설정했던 과정을 남깁니다. 

 

 

  • 프로젝트 배포시 자동으로 NewRelic APM이 설정되는 과정

    배포시에 실행되는 스크립트(start.sh)에 설정과정 삽입

  • start.sh 삽입 내용
mkdir ./newrelic
wget -P ./newrelic {{s3의경로}}/newrelic.jar
wget -P ./newrelic {{s3의경로}}/newrelic.yml
sed -i 's/INSERT_APP_NAME_HERE/{{my_app}}/g' ./newrelic/newrelic.yml
sed -i 's/INSERT_LICENSE_KEY_HERE/{{my_license_key}}/g' ./newrelic/newrelic.yml
java -javaagent:./newrelic/newrelic.jar -jar {{경로}}/{{my_app}}.jar > /dev/null 2>&1 &
exit 0

 

  * newrelic.yml app_name을 해당 application의 이름으로 바꾸도록 해야함

  * newrelic.yml를 프로젝트에 저장하지않고 s3에서 가져오도록 한것은 모든 프로젝트 설정의 동기화를 위함

  * 모든 application의 newrelic.yml 파일의 license_key는 동일하나 배포시 변경되도록한 이유는 보안을 위함

 

  • 적용 화면

 
  • 추후 고도화

현재 prod 배포 환경은 위 설정이 적용된 start.sh를 실행하여 application을 시작하지만 beta는 그렇지 않다.

(beta : Dockerfile의 스크립트를 실행하여 docker bulid 수행)

따라서 추후 prod 또한 docker 환경으로 전환 시 newrelic의 적용은 달라져야하고, 다음과 같은 방법이 있을 듯 하다.

  1. build.gradle의 dependency 추가 및 yml 파일 설정
  2. Dockerfile의 스크립트에 위 start.sh에 명시된 동작과 같은 내용 추가 

다음글: Newrelic Alert 적용
https://lion-king.tistory.com/40


읽어주셔서 감사합니다~

 

by RyanKim

댓글