콘텐츠로 이동

Parca Agent - 항상 켜진 eBPF 연속 프로파일링 치트시트

Parca Agent - 항상 켜진 eBPF 연속 프로파일링 치트시트

Parca Agent는 eBPF 기반 연속 프로파일러입니다. 문제가 의심될 때 프로파일러를 부착하는 대신, 이는 노드의 모든 프로세스에서 스택 추적을 샘플링합니다. 항상 그렇게, 약 1% 오버헤드에서 제로 응용 프로그램 계측으로. 이는 일반적인 워크플로를 반전시킵니다: 인시던트를 프로파일러 하에서 재현하는 대신, 인시던트 창 동안 실제로 실행 중이던 것을 조사합니다. 이는 CPU (및 지원되는 런타임에 대해 메모리)를 줄 번호까지 속성화하고 Parca 서버 또는 모든 Prometheus 호환 프로파일 저장소로 프로파일을 전송합니다.

요구사항

  • eBPF/BTF 지원 Linux 커널 (5.4+, 최신 선호)
  • Root / privileged 컨테이너
  • Parca 서버 (또는 호환 저장소)를 통해 프로파일을 수신합니다

설치

방법명령어
바이너리GitHub Releases에서 다운로드
Dockerdocker run --privileged ghcr.io/parca-dev/parca-agent:latest
KubernetesDaemonSet으로 배포 (매니페스트 제공)
서버별도로 프로파일을 저장/쿼리할 parca 실행
확인parca-agent --version

실행

sudo parca-agent \
  --node=my-node-1 \
  --remote-store-address=parca.internal:7070 \
  --remote-store-insecure
플래그목적
--node프로파일에 첨부된 노드 레이블
--remote-store-address프로파일을 전송할 위치
--http-address로컬 UI/메트릭 엔드포인트 (:7071)
--profiling-duration샘플링 창 (기본값 10s)
--log-level상세도

Kubernetes DaemonSet

측면참고
배포노드당 하나의 에이전트
권한privileged: true, hostPID
발견pod/container/namespace로 자동 레이블링
오버헤드일반적으로 ~1% CPU
저장소프로파일은 노드가 아닌 Parca 서버로 이동

언어 지원

런타임스택 언와인딩
C/C++/Rust/Go네이티브 (DWARF 또는 프레임 포인터)
JavaJIT 심볼 해석
Python / Ruby인터프리터 인식 언와인딩
Node.js런타임 언와인딩을 통해 지원됨
심볼이 있는 모든 바이너리제거되지 않았을 때 최상의 결과

혼합 언어 스택이 하나의 프로파일로 해석되므로 다언어 서비스에 정확히 필요한 것입니다.

프로파일 쿼리

Parca의 UI (및 API)를 사용하면 메트릭처럼 프로파일을 분할할 수 있습니다:

쿼리 차원
시간 범위인시던트 주변 5분
레이블namespace="prod", pod=~"api-.*"
비교두 시간 범위 (배포 전/후) 차이
함수심볼로 필터링
# 개념적: 스파이크 중 하나의 서비스에 대한 CPU 프로파일
cpu_samples{namespace="prod", container="api"}  [14:05 → 14:10]

킬러 기능: 비교

사용방법
회귀 사냥릴리스 전후 프로파일 차이
인시던트 분석인시던트 창과 기본값의 차이
최적화 증명핫 함수가 축소되었음을 표시

연속 프로파일링은 이를 가능하게 합니다. “이전” 프로파일이 이미 존재하므로 — 원할 것으로 예측할 필요가 없습니다.

Parca Agent vs 관련 프로파일러

측면Parca AgentperfPyroscopeasync-profiler
모델항상 켜짐, 플릿 전체온디맨드, 실행당항상 켜짐온디맨드, JVM
계측없음 (eBPF)없음에이전트/SDK 옵션JVM 에이전트
다국어예 (네이티브)JVM만
최적 대상프로덕션 연속 프로파일링심층 로컬 분석연속 프로파일링JVM 정확도

Pyroscope과 같은 범주; 심층 일회성 분석이 필요하면 perf 또는 async-profiler를 사용합니다.

리소스