Sentry · 自托管错误与性能监控平台
Sentry 是自托管的应用错误追踪与性能监控平台。本部署以官方 getsentry/sentry 镜像运行,拆成 web(HTTP 前端)、worker(异步任务消费)、cron(定时任务调度)三个 Deployment,外加一个 ArgoCD Sync Hook 形式的初始化 Job,共同运行在独立的 sentry 命名空间内。
它不自带数据后端:事件存储与查询依赖集群里独立部署的 PostgreSQL、Redis、Kafka 和 Snuba(ClickHouse 查询层),Sentry 各组件通过 ConfigMap 与 ExternalSecret 注入的连接信息访问这些中间件。
部署形态
三个长驻 Deployment 共用同一镜像与同一份配置/数据卷,仅启动命令不同(sentry run web / worker / cron)。
- Name
- 命名空间
- Description
- sentry(独立 namespace,非按 category 命名)
- Name
- 工作负载
- Description
- 3 个 Deployment(web / worker / cron)+ 1 个初始化 Job
- Name
- 镜像
- Description
- getsentry/sentry:24.11.0(三组件与 init Job 同版本)
- Name
- 副本数
- Description
- web 2、worker 2、cron 1
- Name
- 调度
- Description
- nodeSelector workload=app,全部组件落在 app 节点
- Name
- 端口
- Description
- web 容器 9000(name http)
- Name
- 存储
- Description
- PVC sentry-data,10Gi,storageClass nfs-client,accessMode ReadWriteOnce,挂载到三组件的 /data(filestore 落在 /data/files)
- Name
- 滚动策略
- Description
- web maxUnavailable 0 / maxSurge 1
- Name
- 资源配额
- Description
- namespace ResourceQuota:requests cpu 4 / memory 8Gi,limits cpu 8 / memory 16Gi;LimitRange 默认 request 100m/128Mi、limit 500m/512Mi
web 单容器请求 200m/512Mi、上限 1000m/2Gi;worker 与之相同;cron 较轻,请求 100m/256Mi、上限 500m/1Gi。
sentry-init 带 argocd.argoproj.io/hook: Sync 与 hook-delete-policy: BeforeHookCreation,每次 ArgoCD 同步时执行 sentry upgrade --noinput 跑数据库迁移,完成后 ttlSecondsAfterFinished: 300 自动清理。配置与依赖
配置来自 ConfigMap sentry-config(挂载到 /etc/sentry,由 env SENTRY_CONF 指向),同时提供 sentry.conf.py 与 config.yml 两份文件。连接所需的主机/端口/口令均通过环境变量从 Secret 注入,配置文件只读取环境变量、不写死敏感值。
外部依赖(ConfigMap 中固定指向集群内服务):
| 依赖 | 地址 / 端口 | 用途 |
|---|---|---|
| PostgreSQL | env 注入 host,默认端口 5432 | 主数据库(ENGINE sentry.db.postgres) |
| Redis | env 注入 host,默认端口 6379 | 缓存 / 队列(redis.clusters default) |
| Kafka | kafka.kafka.svc.cluster.local:9092 | 事件流 |
| Snuba | snuba.snuba.svc.cluster.local:1218 | 事件搜索 / 查询层 |
事件附件等文件走 filestore.backend: filesystem,落在 /data/files(即 sentry-data PVC)。邮件走 SMTP,host/port/user/password 由 Secret 注入,默认发件人 sentry@yldm.tech,启用 TLS。system.url-prefix 固定为 https://sentry.yldm.tech。已开启的 feature flag:organizations:discover-basic、organizations:performance-view。
机密由 ExternalSecret sentry-secret(ClusterSecretStore vault-backend,refreshInterval 1h)生成同名 Secret,全部读自 Vault 路径 yldm/production/sentry,property 涵盖 PostgreSQL(db_host/port/name/user/password)、Redis(redis_host/port/password)、secret_key 以及邮件(email_host/port/user/password)。所有 env 都以 secretKeyRef 形式注入 web/worker/cron/init 四处。
访问与监控
Service sentry 为 ClusterIP,端口 9000 仅选中 component=web 的 Pod。对外通过 Ingress 暴露。
- Name
- Service
- Description
- sentry,ClusterIP,端口 9000 → web Pod
- Name
- Ingress host
- Description
- sentry.yldm.tech(ingressClassName traefik)
- Name
- TLS
- Description
- cert-manager cluster-issuer letsencrypt-prod,证书 secret sentry-tls
- Name
- 外部接入
- Description
- external-dns 注解走 Cloudflare Tunnel(cfargotunnel.com target,cloudflare-proxied true);proxy-body-size 50m
- Name
- 健康检查
- Description
- web liveness/readiness 均 HTTP GET /_health/ on 9000
- Name
- PDB
- Description
- sentry-web-pdb 与 sentry-worker-pdb,均 minAvailable 1
- Name
- 监控
- Description
- 本目录无 ServiceMonitor / PrometheusRule;无 HPA / VPA
NetworkPolicy 两条:allow-ingress 仅放行来自 kube-system 命名空间到 web Pod 9000 端口的入站(Traefik 在 kube-system);sentry-egress 限定全部 sentry Pod 的出站只能到 PostgreSQL(5432)、Redis(6379)、Kafka(9092)、Snuba(1218) 及 kube-system 的 DNS(UDP 53)。
返回 Observability 总览