Infograb logo
프로파일링

Teleport는 Go의 진단 기능을 활용하여 프로파일링 데이터를 수집하고 내보냅니다. 프로파일은 CPU에서의 스파이크 원인, 메모리 누수 소스 또는 교착 상태의 이유를 식별하는 데 도움이 됩니다.

디버그 서비스 사용

Teleport 디버그 서비스는 관리자가 시작 시 pprof 엔드포인트를 활성화하지 않고 진단 프로파일을 수집할 수 있도록 합니다. 기본적으로 활성화된 이 서비스는 로컬 전용 액세스를 보장하며, 동일한 인스턴스 내부에서만 사용할 수 있습니다.

teleport debug profile은 pprof 프로파일 목록을 수집합니다. 그 결과는 STDOUT에 압축된 tarball(.tar.gz)로 출력됩니다. tar를 사용하여 압축을 해제하거나 결과를 파일로 전달할 수 있습니다.

기본적으로 goroutine, heapprofile 프로파일을 수집합니다.

수집된 각 프로파일은 tarball 내부에 해당 파일을 갖게 됩니다. 예를 들어 goroutine,trace,heap를 수집하면 goroutine.pprof, trace.pprofheap.pprof 파일이 생성됩니다.

기본 프로파일을 수집하고 파일에 저장합니다.

teleport debug profile > pprof.tar.gz
tar xvf pprof.tar.gz

기본 프로파일을 수집하고 압축 해제합니다.

teleport debug profile | tar xzv -C ./

"trace" 및 "mutex" 프로파일을 수집하고 파일에 저장합니다.

teleport debug profile trace,mutex > pprof.tar.gz

프로파일링 시간을 초로 설정하여 프로파일을 수집합니다.

teleport debug profile -s 20 trace > pprof.tar.gz
텔레포트 구성 경로 지정하기

기본 경로(/etc/teleport.yaml)에 텔레포트 구성이 없으면, CLI 명령에 -c/--config 플래그를 사용하여 그 위치를 지정해야 합니다.

Kubernetes 클러스터에서 Teleport를 실행 중인 경우 대화형 세션 없이 로컬 디렉토리로 직접 프로파일을 수집할 수 있습니다:

kubectl -n teleport exec my-pod -- teleport debug profile > pprof.tar.gz

내용을 추출한 후에는 go tool 명령어를 사용하여 탐색하고 시각화할 수 있습니다:

터미널 대화형 탐색기를 엽니다

go tool pprof heap.pprof

웹 시각화기를 엽니다

go tool pprof -http : heap.pprof

트레이스 프로파일을 시각화합니다

go tool trace trace.pprof

진단 엔드포인트 사용

프로파일링 엔드포인트는 --debug 플래그가 제공된 경우에만 활성화됩니다.

Teleport의 진단 HTTP 엔드포인트는 기본적으로 비활성화되어 있습니다. 다음을 통해 활성화할 수 있습니다:

--diag-addr 플래그가 설정된 teleport 인스턴스를 시작하여 진단 엔드포인트가 수신 대기할 로컬 주소를 지정하세요:

sudo teleport start --debug --diag-addr=127.0.0.1:3000

teleport 인스턴스의 구성 파일(/etc/teleport.yaml가 기본값임)을 편집하여 다음을 포함하세요:

teleport:
    diag_addr: 127.0.0.1:3000

디버그 로그를 활성화하려면:

log:
    severity: DEBUG

Teleport가 이제 진단 엔드포인트를 제공하는지 확인하세요:

curl http://127.0.0.1:3000/healthz

프로파일 수집

Go의 표준 프로파일링 엔드포인트는 http://127.0.0.1:3000/debug/pprof/에서 제공됩니다. 프로파일을 검색하려면 원하는 프로파일 유형에 해당하는 엔드포인트에 요청을 보내야 합니다. 문제를 디버깅할 때 일정 기간 동안 프로파일 시리즈를 수집하는 것이 유용합니다.

CPU

CPU 프로파일은 사용자 지정 기간 동안 수집된 실행 통계를 보여줍니다:

프로파일을 파일로 다운로드합니다:

curl -o cpu.profile http://127.0.0.1:3000/debug/pprof/profile?seconds=30

프로파일을 시각화합니다

go tool pprof -http : cpu.profile

Goroutine

Goroutine 프로파일은 시스템에서 실행 중인 모든 goroutine에 대한 스택 추적을 보여줍니다:

프로파일을 파일로 다운로드합니다:

curl -o goroutine.profile http://127.0.0.1:3000/debug/pprof/goroutine

프로파일을 시각화합니다

go tool pprof -http : goroutine.profile

Heap

Heap 프로파일은 시스템에 할당된 객체를 보여줍니다:

프로파일을 파일로 다운로드합니다:

curl -o heap.profile http://127.0.0.1:3000/debug/pprof/heap

프로파일을 시각화합니다

go tool pprof -http : heap.profile

Trace

Trace 프로파일은 스케줄링, 시스템 호출, 가비지 수집, 힙 크기 및 Go 런타임에서 수집한 기타 이벤트를 사용자가 지정한 기간 동안 캡처합니다:

프로파일을 파일로 다운로드합니다:

curl -o trace.out http://127.0.0.1:3000/debug/pprof/trace?seconds=5

프로파일을 시각화합니다

go tool trace trace.out

추가 자료

Teleport 원문 보기