프로파일링·트레이싱 구성
프로파일링·트레이싱 구성 (Configure profiling and tracing to troubleshoot Grafana)
grafana-server 프로세스가 시작할 때 특정 진단을 활성화하도록 설정할 수 있어요. 이는 특정 성능 문제를 조사할 때 유용하며, 기본적으로 활성화해 두는 것은 권장하지 않습니다. 프로파일링 활성화, 트레이싱 활성화, OTLP 파일로 트레이스 내보내기 방법을 다룹니다.
출처: 문서
본문
grafana-server 프로세스를 시작할 때 특정 진단을 활성화하도록 설정할 수 있어요. 특정 성능 문제를 조사할 때 유용하며, 기본적으로 활성화하는 것은 권장되지 않습니다.
프로파일링 켜고 프로파일 수집하기 (Turn on profiling and collect profiles)
grafana-server 는 다음 커맨드라인 옵션으로 시작할 수 있어요:
-profile: 프로파일링 활성화-profile-addr: 기본 HTTP 주소(localhost) 재정의-profile-port:pprof디버깅 엔드포인트가 제공되는 기본 HTTP 포트(6060) 재정의-profile-block-rate: blocking profile에 보고되는 goroutine blocking 이벤트 비율 제어. 호환성을 위해 기본값1(모든 이벤트 추적)-profile-mutex-rate: mutex profile에 보고되는 mutex contention 이벤트 비율 제어. 기본값0(이벤트 추적 안 함)
비율이 높을수록(값이 작을수록) 정상 운영에 오버헤드가 더 추가됩니다. block과 mutex 프로파일링 없이 프로파일링만 활성화해 실행하면 약간의 오버헤드만 추가되며 연속 프로파일링(continuous profiling) 에 적합해요. 10-5(10%-20%)처럼 약간의 block·mutex 프로파일링 비율을 추가하는 것은 일반적으로 괜찮습니다.
프로파일링 활성화:
./grafana server -profile -profile-addr=0.0.0.0 -profile-port=8080
block·mutex 프로파일링을 20% 비율로 활성화:
./grafana server -profile -profile-addr=0.0.0.0 -profile-port=8080 -profile-block-rate=5 -profile-mutex-rate=5
pprof 디버깅 엔드포인트는 Grafana HTTP 서버와 다른 포트에서 제공됩니다. http://<profile-addr><profile-port>/debug/pprof 를 탐색해 사용 가능한 디버깅 엔드포인트를 확인하세요. 연속 프로파일링 시나리오에 더 적합한 추가적인 godeltaprof 엔드포인트도 있습니다: /debug/pprof/delta_heap, /debug/pprof/delta_block, /debug/pprof/delta_mutex.
환경 변수로 프로파일링 설정 구성·재정의:
export GF_DIAGNOSTICS_PROFILING_ENABLED=true
export GF_DIAGNOSTICS_PROFILING_ADDR=0.0.0.0
export GF_DIAGNOSTICS_PROFILING_PORT=8080
export GF_DIAGNOSTICS_PROFILING_BLOCK_RATE=5
export GF_DIAGNOSTICS_PROFILING_MUTEX_RATE=5
일반적으로 프로파일링 데이터 수집·분석에는 Go command pprof 를 사용합니다. Go/pprof 명령이 없는 환경에서는 curl 등으로 프로파일을 수집할 수도 있어요.
높은 메모리 사용/메모리 누수 분석: 메모리 사용량이 높거나 메모리 누수 가능성이 있을 때 여러 heap profile을 수집해 나중에 비교하는 것이 유용해요. 각 프로파일 수집 사이에 30초 정도 기다려 메모리 소비가 증가하도록 하는 것이 좋아요.
curl http://<profile-addr>:<profile-port>/debug/pprof/heap > heap1.pprof
sleep 30
curl http://<profile-addr>:<profile-port>/debug/pprof/heap > heap2.pprof
pprof 도구로 두 heap profile을 비교:
go tool pprof -http=localhost:8081 --base heap1.pprof heap2.pprof
높은 CPU 사용량 분석: CPU 사용량이 높을 때 30초 정도 기간 동안 CPU profile을 수집하는 것이 좋아요.
curl 'http://<profile-addr>:<profile-port>/debug/pprof/profile?seconds=30' > profile.pprof
pprof 도구로 분석:
go tool pprof -http=localhost:8081 profile.pprof
트레이싱 사용 (Use tracing)
grafana-server 는 다음 인자로 시작할 수 있어요:
-tracing: 트레이싱 활성화-tracing-file: 트레이스 결과가 쓰이는 기본 트레이스 파일(trace.out) 재정의
예:
./grafana server -tracing -tracing-file=/tmp/trace.out
환경 변수로 설정 구성·재정의:
export GF_DIAGNOSTICS_TRACING_ENABLED=true
export GF_DIAGNOSTICS_TRACING_FILE=/tmp/trace.out
웹 브라우저에서 트레이스 보기(Go 설치 필요):
go tool trace <trace file>
트레이스 파일 분석 방법은 Go command trace를 참고하세요.
트레이스를 파일로 내보내기 (Export traces to a file)
Grafana는 컬렉터나 트레이싱 백엔드 없이, 자체 분산 트레이스를 OpenTelemetry Protocol(OTLP) JSON 형식의 로컬 파일에 쓸 수 있어요. 백엔드를 설정하지 않고 디버깅용 트레이스를 얻는 데 도움이 됩니다. exporter를 켜고, 문제를 재현한 뒤 파일을 수집·공유하세요.
참고: 이 exporter를 영구 구성으로 사용하지 마세요. Grafana 문제를 해결하는 데만 사용하고 끄세요.
이것은 이전 섹션의 -tracing 옵션과 다릅니다. 그 옵션은 go tool trace 용 저수준 Go 런타임 실행 트레이스를 쓰는 반면, 파일 exporter는 Grafana가 Jaeger 또는 OTLP 엔드포인트로 보내는 것과 동일한 OpenTelemetry 스팬을 발행하며, 이는 요청이 Grafana를 통해 어떻게 흐르는지 설명합니다.
켜려면 [tracing.opentelemetry.file] 섹션에 path를 설정하세요. Grafana는 tracing.opentelemetry.jaeger 또는 tracing.opentelemetry.otlp 엔드포인트를 구성하지 않은 경우에만 이 exporter를 사용합니다. Grafana는 디스크 공간을 보호하기 위해 각 캡처를 파일 크기와 기간으로 제한합니다.
[tracing.opentelemetry.file]
path = /var/lib/grafana/traces/capture.json
사용 가능한 옵션은 설정 참조의 [tracing.opentelemetry.file] 섹션을 참고하세요. 캡처된 파일을 보려면 Grafana에서 Explore 로 이동해 Tempo 데이터 소스를 선택하고 Import trace 를 선택합니다.