https://newrelic.com/devops/what-is-devops
- 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 기능을 세팅하기 위해 필요한 파일
- newrelic.jar : APM 기능을 수행하는 jar 파일
- newrelic.yml : jar 실행 시점에 필요한 환경변수들을 세팅하는 파일
- newrelic.yml의 필수 설정
- app_name : 어플리케이션의 이름. 이 이름을 단위로 모니터링이 수행된다.
- 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의 적용은 달라져야하고, 다음과 같은 방법이 있을 듯 하다.
- build.gradle의 dependency 추가 및 yml 파일 설정
- Dockerfile의 스크립트에 위 start.sh에 명시된 동작과 같은 내용 추가
다음글: Newrelic Alert 적용
https://lion-king.tistory.com/40
읽어주셔서 감사합니다~
by RyanKim
'Infra' 카테고리의 다른 글
[Rancher] Rancher 모든 Docker container 재구축 방법 (0) | 2020.05.18 |
---|---|
(AWS/CloudWatch) EC2 인스턴스 디스크 사용량 알림/모니터링 구현 (3) | 2020.02.28 |
(APM/Newrelic/Spring) Spring App 모니터링 적용2 - Newrelic Alert (0) | 2019.09.11 |
(AWS/Jenkins/Maven/Gradle) Nexus 3.0을 활용하여 사설 저장소 구축하기 (0) | 2018.07.17 |
댓글