管理租户隔离
Grafana Loki 是一个多租户系统;租户 A 的请求和数据与租户 B 隔离。对 Loki API 的请求应包含一个 HTTP 头(X-Scope-OrgID
),用于标识请求的租户。
租户 ID 可以是符合 Go HTTP 头限制(1MB)的任何字母数字字符串。建议运维人员使用合理的长度来唯一标识租户;通常 20 字节就足够了。
Loki 默认运行在多租户模式下。多租户模式通过配置中的 auth_enabled: true
来设置。
当配置为 auth_enabled: false
时,Loki 使用单租户模式。Loki API 请求中不需要 X-Scope-OrgID
头。单租户 ID 将是字符串 fake
。
多租户查询
在多租户模式下,查询可以从多个租户收集结果。设置 querier 配置选项 multi_tenant_queries_enabled: true
以启用跨租户查询。查询 API 请求定义了租户。通过使用管道符(|
)分隔租户 ID,在查询请求 HTTP 头 X-Scope-OrgID
中指定多个租户。例如,针对租户 A
和 B
的查询需要头 X-Scope-OrgID: A|B
。
只有查询端点支持多租户调用。如果在 HTTP 头中定义了多个租户,对 GET /loki/api/v1/tail
和 POST /loki/api/v1/push
的调用将返回 HTTP 400 错误。
即时查询和范围查询支持使用租户 ID 进行标签过滤。例如,查询
{app="foo", __tenant_id__=~"a.+"} | logfmt
将返回租户 ID 以字符 a
开头的所有租户的结果。
如果标签 __tenant_id__
已存在于日志流中,则会在其前面加上字符串 original_
。
阶段内的租户 ID 过滤不受支持。以下是一个将 不起作用 的查询示例
{app="foo"} | __tenant_id__="1" | logfmt