프로젝트 소개

Grafana Pyroscope는 애플리케이션 성능 데이터를 수집하고 분석하기 위한 오픈 소스 지속적 프로파일링 플랫폼입니다. 이 플랫폼의 목표는 리소스 소비를 가시화하는 것입니다. 전체 시스템에서 CPU, 메모리 및 I/O 동작을 조사한 다음, 특정 서비스, 함수 또는 단일 코드 라인까지 범위를 좁혀 분석할 수 있습니다. README에 설명된 일반적인 사용 사례는 선제적 대응과 사후 대응 모두를 포함합니다. 선제적으로는 팀이 리소스 소비를 줄이고, 애플리케이션 성능을 개선하거나, 지연 시간 문제가 발생하기 전에 이를 방지할 수 있습니다. 사후 대응으로는 활성 CPU, 메모리 또는 I/O 병목 현상을 디버깅하기 위한 라인 수준의 세부 정보를 제공하여 인시던트를 신속하게 해결하는 것을 목표로 합니다. 아키텍처 이 프로젝트는 크게 세 부분으로 구성됩니다: - Pyroscope Server: 프로파일링 데이터를 저장 및 처리하고 쿼리를 제공합니다. - 클라이언트 및 인스트루멘테이션: Pyroscope 언어 SDK(push), Grafana Alloy(pull 또는 push), 또는 OpenTelemetry eBPF 프로파일러와 같은 OpenTelemetry 호환 소스의 OTLP를 통해 서버로 프로파일이 전달됩니다. - Grafana Profiles Drilldown: 프로파일링 데이터를 시각화하고 분석하기 위한 쿼리리스 인터페이스로, 이전에는 Explore Profiles로 알려져 있었습니다. Pyroscope 2.0은 새로운 v2 아키텍처를 기본값으로 설정합니다. 프로파일이 오브젝트 스토리지에 직접 기록되어 인메모리 인제스터(ingesters)와 로컬 디스크의 필요성이 제거되었으며, 프로젝트 측은 이를 통해 운영이 단순해지고 대규모 환경에서 리소스 사용량이 감소한다고 설명합니다. 컴팩션 워커(Compaction workers)는 백그라운드에서 작은 세그먼트를 더 큰 블록으로 병합하며, 쿼리는 오브젝트 스토리지 전체로 분산되어 Grafana Profiles Drilldown에서 플레임 그래프(flame graphs)를 생성합니다. 기존 v1 배포 환경은 플래그를 통해 v2를 선택하고 마이그레이션할 수 있으며, README에는 릴리스 노트, 아키텍처 개요 및 마이그레이션 가이드 링크가 포함되어 있습니다. 인스트루멘테이션 및 언어 지원 Go, Java, Python, Ruby, Node.js, .NET 및 Rust에 대한 SDK 문서와 예제가 제공됩니다. SDK 기반의 push 외에도, README는 pull 또는 push 수집을 위한 Grafana Alloy, Grafana Alloy를 통한 eBPF 기반 자동 인스트루멘테이션, 그리고 OpenTelemetry 호환 프로파일러로부터의 OTLP 수집 방법을 안내합니다. 프로젝트는 지원되는 언어 목록과 각 언어에 적용되는 프로파일링 유형을 문서화하고 있습니다. 시작하기 서버는 여러 가지 방법으로 로컬에서 실행할 수 있습니다: - Docker: docker run -it -p 4040:4040 grafana/pyroscope - macOS/Linux의 Homebrew: brew install pyroscope-io/brew/pyroscope 실행 후 brew services start pyroscope 실행 - 바이너리: 최신 릴리스에서 OS 및 아키텍처에 맞는 아카이브를 다운로드하여 압축을 풀고 ./pyroscope 실행 서버는 4040 포트에서 리스닝합니다. 또한 README에는 Kubernetes/Helm 배포, Linux 패키지, 소스 빌드 및 전체 서버 설정에 관한 문서가 참조되어 있습니다. Grafana Play에서 호스팅되는 라이브 데모를 이용할 수 있으며, Profiles Drilldown은 Grafana Cloud/OSS에 기본적으로 설치되어 프로파일을 탐색하는 기본 방법으로 설명됩니다. 커뮤니티 및 라이선스 이 프로젝트는 AGPLv3 라이선스 하에 있으며, CI 및 Go Report Card 배지를 보유하고, 릴리스 및 Docker 이미지를 게시하며, Go 패키지 참조를 제공합니다. 리포지토리에는 기여자 가이드가 포함되어 있으며, README에는 Brendan Gregg의 Flame Graphs, rbspy, py-spy, phpspy 샘플링 프로파일러, flamebearer, speedscope, 그리고 Linux 커널의 BPF 기반 프로파일링을 가능하게 한 기여 작업 등 플랫폼의 기반이 된 작업들에 대한 감사가 명시되어 있습니다. 원하는 통합 기능에 대한 피드백은 GitHub 이슈와 Grafana Slack을 통해 수렴하고 있습니다.