Parca Agent - 항상 켜진 eBPF 연속 프로파일링 치트시트
Parca Agent는 eBPF 기반 연속 프로파일러입니다. 문제가 의심될 때 프로파일러를 부착하는 대신, 이는 노드의 모든 프로세스에서 스택 추적을 샘플링합니다. 항상 그렇게, 약 1% 오버헤드에서 제로 응용 프로그램 계측으로. 이는 일반적인 워크플로를 반전시킵니다: 인시던트를 프로파일러 하에서 재현하는 대신, 인시던트 창 동안 실제로 실행 중이던 것을 조사합니다. 이는 CPU (및 지원되는 런타임에 대해 메모리)를 줄 번호까지 속성화하고 Parca 서버 또는 모든 Prometheus 호환 프로파일 저장소로 프로파일을 전송합니다.
요구사항
- eBPF/BTF 지원 Linux 커널 (5.4+, 최신 선호)
- Root / privileged 컨테이너
- Parca 서버 (또는 호환 저장소)를 통해 프로파일을 수신합니다
설치
| 방법 | 명령어 |
|---|
| 바이너리 | GitHub Releases에서 다운로드 |
| Docker | docker run --privileged ghcr.io/parca-dev/parca-agent:latest |
| Kubernetes | DaemonSet으로 배포 (매니페스트 제공) |
| 서버 | 별도로 프로파일을 저장/쿼리할 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 또는 프레임 포인터) |
| Java | JIT 심볼 해석 |
| 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 Agent | perf | Pyroscope | async-profiler |
|---|
| 모델 | 항상 켜짐, 플릿 전체 | 온디맨드, 실행당 | 항상 켜짐 | 온디맨드, JVM |
| 계측 | 없음 (eBPF) | 없음 | 에이전트/SDK 옵션 | JVM 에이전트 |
| 다국어 | 예 | 예 (네이티브) | 예 | JVM만 |
| 최적 대상 | 프로덕션 연속 프로파일링 | 심층 로컬 분석 | 연속 프로파일링 | JVM 정확도 |
Pyroscope과 같은 범주; 심층 일회성 분석이 필요하면 perf 또는 async-profiler를 사용합니다.
리소스