본문 바로가기

프로젝트/버그, 성능개선

pinpoint django agent 적용하기

반응형

 

https://loy124.tistory.com/407

 

APM 도구 pinpoint 설치하기

https://loy124.tistory.com/406 주요 APM 도구 분석하기 목적 개발을 진행하다보면 내가 남기는 로그와 부가 요소만으로는 성능 개선에 한계를 느끼는 경우가 많다. 따라서 실시간으로 애플리케이션의

loy124.tistory.com

(agent 전 사전 셋팅은 위 게시글을 참고한다.)

 

 

 

 

 

django 환경에서 pinpoint 를 적용하려고 보니 공식 github 제외하고 작성되어있는 자료가 없어 Django도 적용시킨후 작성해 보았다. 

 

https://github.com/pinpoint-apm/pinpoint-c-agent

 

GitHub - pinpoint-apm/pinpoint-c-agent: It is an agent written by C++, PHP, python languages. And we hope to support other langu

It is an agent written by C++, PHP, python languages. And we hope to support other languages by this agent. Until now, it supports [PHP],[C/C++], [PYTHON] and [GO]. - GitHub - pinpoint-apm/pinpoint...

github.com

 

PHP, Django, C 에 대한 pinpoint agent 적용은 해당 pinpoint-c-agent를 사용하면 된다. 

 

pinpoint-c-agent의 방식은 다음과 같다. 

 

pinpoint 구조

 

 

 

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.1.0 혹은 requirements.txt에 

pinpointPy==1.1.0

 

해당 내용을 추가해준다. 

 

이제 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 설정 변경하기 

monkey_patch_for_pinpoint 함수 구조

 

pinpoint-c-agent는 mysql/redis/mongoDB에 대해서만 지원을하고 postgresql에 대해서는 지원하지 않는다. 

따라서 mysql및 다른 db를 사용하지 않을경우 False로 꺼주면 되겠다.

 

나는 mongo,mysql 관련은 사용하지 않아 False를 통해 off 처리를 해주었다. 

monkey_patch_for_pinpoint(False, False, True, True, True, False, False, False)

 

 

set_agent 설정 변경하기 

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 (애플리케이션 성능 지표인데) 드래그를 해서 조회가 가능하다.

 

 

 

 

반응형

'프로젝트 > 버그, 성능개선' 카테고리의 다른 글

spring boot pinpoint agent 설치하기  (3) 2024.02.11
APM 도구 pinpoint 설치하기  (0) 2024.02.10
주요 APM 도구 분석하기  (0) 2024.02.03