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。

配置与依赖

配置来自 ConfigMap sentry-config(挂载到 /etc/sentry,由 env SENTRY_CONF 指向),同时提供 sentry.conf.pyconfig.yml 两份文件。连接所需的主机/端口/口令均通过环境变量从 Secret 注入,配置文件只读取环境变量、不写死敏感值。

外部依赖(ConfigMap 中固定指向集群内服务):

依赖地址 / 端口用途
PostgreSQLenv 注入 host,默认端口 5432主数据库(ENGINE sentry.db.postgres)
Redisenv 注入 host,默认端口 6379缓存 / 队列(redis.clusters default)
Kafkakafka.kafka.svc.cluster.local:9092事件流
Snubasnuba.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-basicorganizations: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 总览

评论