프로젝트 MVP 개발 이후 개발한 코드의 병목지점과 장애 발생 구간을 모니터링하기 위해 Pinpoint를 도입하였습니다.
이번 글에서는 Pinpoint를 도입하며 발생하였던 이모저모를 소개하겠습니다.
환경
- API 서버 (AWS)
- ECS/EC2를 활용한 도커 기반
- t2.micro
- Pinpoint 서버 (GCP)
- n2-highmem-2
* GCP의 경우 처음 가입하면 제공하는 3개월에 300달러의 자원을 사용할 수 있는 크레딧을 사용하였습니다.
Pinpoint Agent
설치
wget https://repo1.maven.org/maven2/com/navercorp/pinpoint/pinpoint-agent/3.0.0/pinpoint-agent-3.0.0.tar.gz
tar -zxvf pinpoint-agent-3.0.0.tar.gz
저는 2.5.1부터 Spring Boot 3 지원하여 가장 최신 버전인 3.0.0을 다운로드하였습니다.
설정
다운로드한 pinpoint-agent 디렉터리의 pinpoint-root.config를 보면 profile을 설정하지 않으면 기본으로 release로 실행됩니다.
pinpoint.profiler.profiles.active=release
profiles 디렉터리를 살펴보면 release, local이 제공되어 있고 프로젝트에 적합한 profile을 생성할 수도 있습니다.
하지만 저는 별도의 profile을 만들기보다는 release의 일부 설정들을 변경하여 사용하기로 하였습니다.
release/pinpoint-config 설정
profiler.transport.grpc.collector.ip
: pinpoint collecter의 IP를 설정합니다.
profiler.sampling.counting.sampling-rate
: 모든 요청을 추적하려면 해당 값을 1로 변경하여야 한다.
* 값에 따른 추적 비율 예제
eg. 1: 100% 20: 5% 50: 2% 100: 1%
Pinpoint Collector, Web etc
설치 및 실행
도커를 활용하여 Agent와 동일한 3.0.0을 설치하였습니다.
git clone https://github.com/pinpoint-apm/pinpoint-docker.git
cd pinpoint-docker
docker-compose -f docker-compose.yml -f docker-compose-metric.yml up -d
* 2.5.0 이전과 이후의 도커를 활용한 설치 및 실행 방법의 일부 변경이 있습니다.
# 2.5.0 이전 방법
git clone https://github.com/pinpoint-apm/pinpoint-docker.git
cd pinpoint-docker
docker-compose pull && docker-compose up -d
ECS
볼륨 마운트 작업 정의
{
"containerDefinitions": [
{
...
"mountPoints": [
{
"sourceVolume": "pinpoint-agent",
"containerPath": "/pinpoint-agent"
}
],
...
],
...
"volumes": [
{
"name": "pinpoint-agent",
"host": {
"sourcePath": "/home/ec2-user/pinpoint-agent-3.0.0"
}
}
],
...
}
volumes.name
: mountPoints.sourceVolume 파라미터에서 참조되는 값
volumes.host.sourcePath
: 볼륨 마운트할 디렉터리의 인스턴스 상 경로
mountPoints.sourceVolume
: 탑재할 볼륨의 이름
mountPoints.containerPath
: 볼륨을 탑재할 컨테이너의 경로
* 태스크 정의 콘솔 화면에서 설정 모습
Amazon ECS 작업 정의에서 바인드 탑재 지정 문서
DockerFile 설정
...
ENTRYPOINT java -jar -javaagent:/pinpoint-agent/pinpoint-bootstrap.jar -Dpinpoint.profiler.profiles.active=$PROFILE -Dpinpoint.applicationName=$APP_NAME app.jar
AgentId & ApplicationName
-Dpinpoint.agentId=
-Dpinpoint.applicationName=
위의 파라미터 설정을 통해 agentId와 applicationName을 설정할 수 있다.
* agentId의 경우 설정하지 않는다면 자동으로 생성해 주기 때문에 설정하지 않아도 좋을 것 같습니다.
Pinpoint Agent와 정상 실행 시 로그
Intellij에서 Pinpoint Agent와 함께 실행하기
1. Pinpoint Agent jar의 위치를 확인한다. *pwd 명령어로 쉽게 확인 가능
2. 실행 설정 변경을 선택한다.
3. Modify Options에서 Add VM options를 활성화 한다.
4. Pinpoint 옵션을 추가한다.
-javaagent:$핀포인트jar위치
-Dpinpoint.applicationName=$APP_NAME
-Dpinpoint.profiler.profiles.active=$PROFILE:local
'개발' 카테고리의 다른 글
MC/DC 커버리지 (0) | 2024.12.01 |
---|---|
네임드 락을 활용한 동시성 제어 (2) | 2024.09.08 |
jOOQ 사용기 (1) | 2024.07.23 |
FEW MVP 기능을 구현하며 (0) | 2024.07.14 |
이미지를 지원하는 Swagger 만들기 - multipart/form-data 요청을 직접 추가 (0) | 2024.06.28 |