대규모 분산 시스템의 성능을 분석하고 문제를 진단, 처리하는 플랫폼입니다.
내부적으로 서버맵, 실시간 활성 스레드 차트, 요청 / 응답 차트, API 호출 상세 기록, 서버의 상태를 실시간으로 시각화하여 볼 수 있는 기능을 제공합니다.
구성에 대해 간략히 살펴 보면 다음의 플로우로 진행됩니다.
1. Pinpoint Agent 대상이 되는 서버에서 Pinpoint Collector로 데이터 전달
2. Pinpoint Collector에서 Hbase 저장소로 데이터 적재
3. Pinpoint Web 모니터링 화면에서 시각화 기능 제공
Pinpoint Agent에서는 모니터링 정보를 수집하여, Manager 서버인 Pinpoint Collector로 데이터를 전송합니다.
Agent는 데이터 전송을 위해 추상화된 인터셉터를 이용하여 클래스 로드 시점에 애플리케이션 코드를 가로채 성능 정보와 분산 트랜잭션 추적에 필요한 코드를 주입합니다.
Spring 서버의 경우 javaagent 명령어를 사용하기 때문에 JVM 실행 중 클래스 로딩 및 실행을 모니터링하고, 조작할 수 있으며 코드의 수정이 불필요합니다.
여러 개의 스프링 서버를 모니터링 하고 싶은 경우, 각 서버 구동 시 javaagent 인자를 포함시켜 추적 데이터를 전달할 수 있도록 합니다.
javaagent란
-javaagent:<jarpath>[=<options>]
JVM에서 동작하는 Java 애플리케이션으로 JVM의 다양한 이벤트를 전달받거나 정보 질의, 바이트코드 제어 등을 수행할 수 있습니다.
dockerfile
...
ENTRYPOINT [
"nohup",
"java",
"-jar",\
"-javaagent:./pinpoint/pinpoint-bootstrap-2.5.0.jar",\
...
]
와 같은 식으로 작성 가능합니다.
참조: https://catsbi.oopy.io/6136946a-9139-4541-b2af-2af93bb634a5
Pinpoint Collector는 Agent로부터 전달받은 정보를 Hbase에 적재하는 역할입니다.
이 때 데이터 전송 시 UDP를 사용하여 서비스에 네트워크 우선권을 부여합니다.
Spring Controller의 정보를 기록합니다.
HttpClient.execute() 메서드의 호출을 가로채 HttpGet에 TraceId를 설정한다.
태그된 요청이 TomcatB로 전송됩니다.
Spring Controller 정보를 기록하고, 요청 메시지 처리를 종료한다.
Tomcat B 요청 처리가 끝나면 Agent는 추적 데이터를 Pinpoint Controller에 보내 HBase에 저장합니다.
Tomcat B Http 호출이 종료된 후 TomcatA의 요청 처리도 종료됩니다. Pinpoint Agent는 추적 데이터를 Pionpoint Collector로 전송해 HBase에 저장합니다.
Web은 추적 데이터를 Hbase에서 읽고, 트리를 정렬해 콜 스택을 생성합니다.