인포레터에서 최신 DevOps 트렌드를 격주로 만나보세요!
프로파일링
Teleport는 Go의 진단 기능을 활용하여 프로파일링 데이터를 수집하고 내보냅니다.
프로파일은 CPU의 급증 원인, 메모리 누수의 출처 또는 교착 상태의 이유를 식별하는 데 도움이 됩니다.
디버그 서비스 사용하기
Teleport 디버그 서비스는 관리자가 시작 시 pprof 엔드포인트를 활성화하지 않고도 진단 프로파일을 수집할 수 있게 해줍니다.
기본적으로 활성화된 이 서비스는 로컬 전용 접근을 보장하며 동일한 인스턴스 내에서만 사용할 수 있습니다.
teleport debug profile
은 pprof 프로파일 목록을 수집합니다.
이 명령은 압축된 tarball(.tar.gz
)을 STDOUT에 출력합니다.
이를 tar
로 압축 해제하거나 결과를 파일로 전달합니다.
기본적으로 goroutine
, heap
및 profile
프로파일을 수집합니다.
수집된 각 프로파일은 tarball 내에 해당하는 파일을 갖게 됩니다.
예를 들어, goroutine,trace,heap
을 수집하면 goroutine.pprof
, trace.pprof
, heap.pprof
파일이 생성됩니다.
기본 프로파일을 수집하고 파일로 저장합니다.
teleport debug profile > pprof.tar.gztar 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
)에 텔레포트 구성이 배치되어 있지 않은 경우,
-c/--config
플래그를 사용하여 CLI 명령에 그 위치를 지정해야 합니다.
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.pproftrace 프로파일을 시각화합니다
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
추적
추적 프로파일은 사용자가 지정한 기간 동안 Go 런타임에 의해 수집된 스케줄링, 시스템 호출, 가비지 컬렉션, 힙 크기 및 기타 이벤트를 캡처합니다:
프로파일을 파일로 다운로드:
curl -o trace.out http://127.0.0.1:3000/debug/pprof/trace?seconds=5프로파일 시각화
go tool trace trace.out
추가 읽기
- Go 생태계에서의 진단에 대한 더 많은 정보: https://go.dev/doc/diagnostics
- Go의 프로파일링 엔드포인트: https://golang.org/pkg/net/http/pprof/
- Go 프로그램 프로파일링에 대한 심층 탐구: https://go.dev/blog/pprof