pyroscope高可用需微服务部署,含ingester、querier等独立组件,适配中大型微服务及多区域场景;须用helm部署于k8s,对接对象存储与高可用数据库,并接入全网应用实现连续剖析。

明确高可用目标与适用场景
全网代码剖析不等于简单部署多个节点,而是要求数据采集不中断、查询服务不间断、故障时自动恢复。这适用于中大型微服务架构、多区域业务系统或对SLA有严格要求的生产环境。单节点或单二进制模式无法满足——它们缺乏组件隔离、无故障转移能力,也不支持跨实例数据聚合。
选择微服务模式并规划核心组件分布
Pyroscope高可用集群必须采用微服务部署模式,将Ingester、Querier、Store Gateway、Distributor和Metastore拆分为独立可扩缩的服务。各组件职责与部署建议如下:
- Ingester:负责接收Agent上报的性能数据。建议每区域至少2副本,通过Kubernetes Deployment+Pod反亲和性避免同节点单点失效
- Distributor:做数据路由与负载均衡。需与Ingester同区域部署,启用一致性哈希分片,确保相同应用的数据路由到同一Ingester组
- Store Gateway:提供长期存储访问。应对接对象存储(如S3/MinIO),并配置多可用区复制;本地磁盘仅作临时缓存
- Querier:执行火焰图生成、范围查询等计算。无状态,可水平扩展,建议跨AZ部署且通过Service Mesh统一入口
- Metastore:存储索引、租户、标签元数据。必须使用高可用数据库(如PostgreSQL主从集群或TiDB),禁止用本地SQLite
基于Helm完成Kubernetes集群部署
使用Grafana官方Helm Chart(v0.12+)是当前最稳定的方式。关键操作包括:
- 创建专用命名空间:
kubectl create namespace pyroscope-ha - 添加并更新仓库:
helm repo add grafana https://grafana.github.io/helm-charts && helm repo update - 准备values.yaml,重点配置以下项:
-
ingester.replicaCount: 3、querier.replicaCount: 4 -
storeGateway.storage.type: "s3",并填入s3.bucketName、s3.region、s3.endpoint等认证参数 -
metastore.postgresql.enabled: true,并指向已有的高可用PostgreSQL实例 -
auth.enabled: true,配合JWT或OIDC实现多租户隔离
-
- 执行安装:
helm install pyroscope-ha grafana/pyroscope -n pyroscope-ha -f values.yaml
接入全网应用并启用连续剖析
高可用集群的价值最终体现在终端应用的覆盖广度与数据质量上:
- 为每个服务注入对应语言的Pyroscope Agent(如Java用
-javaagent:pyroscope.jar,Go用pyroscope.Start()),确保PYROSCOPE_SERVER_ADDRESS指向Querier Service的ClusterIP或Ingress地址 - 统一设置
PYROSCOPE_APPLICATION_NAME为服务名+环境标签(如auth-service-prod),便于后续按维度聚合分析 - 在Grafana中安装
grafana-pyroscope-app插件,配置数据源为Pyroscope Querier的HTTP地址,即可查看全网火焰图、对比不同服务/版本的CPU热点分布 - 开启采样率自适应(
profiling.sampling.rate.auto=true),避免突发流量压垮Ingester
/readyz接口返回200。











