土法炼钢兴趣小组的算法知识备份

【可观测性工程】多租户与安全:数据隔离、标签治理、PII 清洗

文章导航

分类入口
architectureobservability
标签入口
#multi-tenancy#pii#data-isolation#label-governance#loki#mimir#grafana#security

目录

多租户与安全:数据隔离、标签治理、PII 清洗

某公司用一套 Grafana + Loki 给全公司 8 个业务团队共用。某天 HR 部门的同事在排查一个入职流程 bug 时,在 Loki 的搜索结果中看到了一条 Debug 日志——里面包含了某个候选人的完整简历信息,包括手机号和身份证号。不是因为 HR 有特殊权限——是因为 Loki 没有做任何多租户隔离,任何人只要知道 Grafana 的 URL 就能看到所有团队的日志。

当可观测性平台从”一个团队一个 Grafana”变成”全公司共享基础设施”,三个新问题同时出现。第一,数据隔离——Team A 能不能看到 Team B 的日志/Trace/指标?第二,成本分摊——每个人的账单怎么算?第三,PII/安全合规——敏感信息怎么在写入存储之前就被拦截?

一、多租户的三种隔离层次

硬隔离:每个租户独立部署一套完整的可观测性栈。最安全——但成本最高。每个团队一个 Prometheus + Loki + Tempo + Grafana 实例——在有 50 个团队的公司中完全不现实。

软隔离:共享基础设施,通过 label/tenant_id 做逻辑过滤 + 查询层访问控制。Grafana Mimir/Loki/Tempo 的原生多租户机制基于 X-Scope-OrgID header——每个请求携带一个 tenant ID,后端根据这个 ID 做数据隔离。Grafana 的 Data Source Permissions 可以限制特定 Team 只能查询特定 tenant。

混合隔离:关键租户(如支付、财务)硬隔离,其他租户软隔离。用最小的额外成本实现最大的安全覆盖面。

二、各主流方案的多租户实现

Grafana Mimir/Loki/Tempo:所有请求必须携带 X-Scope-OrgID header。Ingester/Distributor 根据 tenant ID 做数据分片和隔离。Query Frontend 根据 tenant ID 限制查询范围。Per-tenant limit 配置在 runtime overrides 文件中——每个 tenant 的 ingestion rate、series limit、query QPS 都可以独立配置。

Thanos:通过 Query Frontend 的 label 注入实现软隔离——为每个租户的查询自动追加一个 tenant="X" label filter。

VictoriaMetrics-cluster 模式下通过 accountIDprojectID 实现两级多租户隔离(类似于 AWS 的 account → project 结构)。

三、标签治理

标签治理是多租户的基础——没有规范的标签,软隔离就失去了载体。三个最低要求:

四、PII 清洗

可观测性数据是 PII 泄露的高风险管道——日志正文、Span attribute、Metric label 都可能无意中包含敏感信息。

清洗在采集/Collector 层做,不在存储层做。原因:数据一旦写入存储,即使在 ES mapping 中关了索引、在 Loki 中关了 label——数据已经在磁盘上。而且备份、compaction、副本都可能导致 PII 的二次残留。

清洗策略

合规审计:定期(每季度)对已存储的可观测数据做抽样扫描——用同样的 PII 正则对 Loki/Tempo/Mimir 做查询,确认没有任何 PII pattern 出现在不应该出现的地方。

五、成本分摊(Chargeback / Showback)

每个租户的存储和查询成本可以通过以下指标计算:

用这些指标按比例分摊总存储和计算成本。Showback(只展示不扣钱)通常就足够驱动团队优化埋点行为——当 Team A 看到自己占了 35% 的总存储成本时,他们会主动去查是不是有人打了太多 label。

六、关键概念回顾

七、工程坑点

Loki 中用 label filter 做”伪隔离”但没有真正的 query 级别限制。Team A 只要主动去掉 label filter 就能看到全部数据。必须用 Grafana Data Source Permissions 或 LB 层做强制 tenant ID 注入。

PII 在 ES index mapping 中被自动索引。即使删除了 _source 字段——Lucene 的倒排索引中仍保留了词条。必须在写入 ES 之前做 PII 清洗。

多租户 limit 在半夜被某个 Bug 打爆。一个租户的 bug 产生了几十倍正常量的日志——per-tenant ingestion rate limit 触发——但其他租户的查询也因为共享基础设施的 I/O 饱和而变慢。需要 per-tenant 的 circuit breaker(不仅仅限流,还要隔离故障半径)。

八、下一步

多租户和安全治理就绪后,最后一个治理主题——混沌工程。下一篇 混沌工程:ChaosBlade、Chaos Mesh 与可观测性闭环


上一篇可观测性存储与成本

下一篇混沌工程:ChaosBlade、Chaos Mesh 与可观测性闭环

参考资料

  1. Grafana Mimir, Multi-tenancy, https://grafana.com/docs/mimir/latest/operators-guide/architecture/multi-tenancy/
  2. Grafana Loki, Multi-tenancy, https://grafana.com/docs/loki/latest/operations/multi-tenancy/
  3. OpenTelemetry, Collector — Redaction Processor, https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/processor/redactionprocessor

同主题继续阅读

把当前热点继续串成多页阅读,而不是停在单篇消费。

2026-04-22 · architecture / observability

【可观测性工程】Logs:Loki、ClickHouse、Elasticsearch、OpenObserve 的取舍

从日志场景分类出发,深入对比 Elasticsearch/OpenSearch、Grafana Loki、ClickHouse、OpenObserve 四大方案在全文检索、写入吞吐、存储成本、多租户和运维复杂度上的本质差异,结合 B 站、知乎 ClickHouse 日志平台实践,给出选型决策矩阵与工程坑点。


By .