https://loy124.tistory.com/407
(agent 전 사전 셋팅은 위 게시글을 참고한다.)
django 환경에서 pinpoint 를 적용하려고 보니 공식 github 제외하고 작성되어있는 자료가 없어 Django도 적용시킨후 작성해 보았다.
https://github.com/pinpoint-apm/pinpoint-c-agent
PHP, Django, C 에 대한 pinpoint agent 적용은 해당 pinpoint-c-agent를 사용하면 된다.
pinpoint-c-agent의 방식은 다음과 같다.
Python, php, C등의 코드에 라이브러리 식으로 설치 -> collector-agent에 전송 -> collector-agent -> pinpoint-collector 에 전달하는 방식이다.
즉 기존 spring boot에서는 java-agent로 같이 실행해주면 되는것에 비해 한단계 거치는 과정이 더 있다.
일단 먼저 collector-agent를 설치해서 실행하고 그 후 Django에 pinpointPy를 연결하는 순서로 진행하겠다.
collector-agent 구성하기
collector-agent는 각 Python, php, C로 되어있는 코드의 정보들을 모아서 pinpont-collector에 전달할수 있는 역활을 하고있다. 이제 해당 collect-agent를 위한 env.list 를 만들어주겠다.
vi env.list
export PP_COLLECTOR_AGENT_SPAN_IP=collector의 주소
export PP_COLLECTOR_AGENT_SPAN_PORT=9993
export PP_COLLECTOR_AGENT_AGENT_IP=collector의 주소
export PP_COLLECTOR_AGENT_AGENT_PORT=9991
export PP_COLLECTOR_AGENT_STAT_IP=collector의 주소
export PP_COLLECTOR_AGENT_STAT_PORT=9992
export PP_COLLECTOR_AGENT_ISDOCKER=false
export PP_LOG_DIR=/tmp/
export PP_Log_Level=INFO
export PP_ADDRESS=0.0.0.0@9999
IP주소 변경하기
- PP_COLLECTOR_AGENT_SPAN_IP
- PP_COLLECTOR_AGENT_AGENT_IP
- PP_COLLECTOR_AGENT_STAT_IP
위 IP에는 모두 collector의 주소를 넣어주면 된다.(이전 게시글에서 설치한 collector 서버의 주소)
PP_ADDRESS
수신받을 collector-agent의 주소다. 뒤에 Django에서 설정할 주소의 IP및 포트값과 일치하면 된다.
0.0.0.0은 localhost로 현재 IP를 의미한다.
여기까지 작성하고 나서 작성한 env.list 를 기반으로 docker를 기동시켜주면 된다.
docker run -itd -p 9999:9999 --env-file ./env.list ghcr.io/pinpoint-apm/pinpoint-c-agent/collector-agent:0.4.15
여기까지 진행하면 collector에 전송할 agent의 구성은 완료되었다.
Django에 pinpoint를 위한 구성하기
pip install pinpointPy==1.3.1 혹은 requirements.txt에
pinpointPy==1.3.1
해당 내용을 추가해준다.
이제 setting.py로 이동해 내용을 추가해준다.
setting.py
from pinpointPy import set_agent, monkey_patch_for_pinpoint, use_thread_local_context
use_thread_local_context()
monkey_patch_for_pinpoint()
set_agent("agentId", "appName",
'tcp:localhost:9999', -1)
app = Flask(__name__)
app.wsgi_app = PinPointMiddleWare(app,app.wsgi_app)
monkey_patch_for_pinpoint 설정 변경하기
pinpoint-c-agent는 mysql/redis/mongoDB에 대해서만 지원을하고 postgresql에 대해서는 지원하지 않는다.
따라서 mysql및 다른 db를 사용하지 않을경우 False로 꺼주면 되겠다.
현재 최신버전의 pinpointPY에서는 코드가 수정되어 postgresql에 대한 지원을 한다. (1.3.1 버전 기준)
monkey_patch_for_pinpoint()
set_agent 설정 변경하기
set _agent 사용시 app_id및 app_name은 개인 설정에 따라 원하는 이름을 부여하면 되고
coolect_agent_host 는 아까 작성했던 PP_ADDRESS 와 주소값을 맞춰주면된다.
set_agent("agentId", "appName", 'PP_ADDRESS주소:포트', -1)
나는 설정값을 이런식으로 작성해 주었다.
set_agent("pro-backend", " pro-backend ", 'tcp:127.0.0.1:9999', -1)
여기까지 작성하고 django를 재 기동해주고 나서 pinpoint-web에 접속하면
django 에 설치한 pinpointPy -> collectorAgent -> collector -> hbase -> pinpoint-web 을 통해 조회가 가능하게 된다.
간단한 사용 법
Server Map
상호 연결 요소를 시각화해서 나타낸다.
Call Stack
분산환경 모든 트랜잭션에 대한 병목현상/ 실패지점 파악 가능
Apdex는 Application Performance Index (애플리케이션 성능 지표인데) 드래그를 해서 조회가 가능하다.
'프로젝트 > 버그, 성능개선' 카테고리의 다른 글
postgresql INDEX를 활용한 성능 개선 ( 조회, 검색 ) (0) | 2024.09.25 |
---|---|
guincorn 메모리 누수 현상 해결하기 ( gunicorn memory leak ) (0) | 2024.09.25 |
spring boot pinpoint agent 설치하기 (3) | 2024.02.11 |
APM 도구 pinpoint 설치하기 (0) | 2024.02.10 |
주요 APM 도구 분석하기 (0) | 2024.02.03 |