除了查询性能的改进,我们很高兴在Grafana Loki中引入两个关键功能:跨租户查询联盟和定向删除。
什么是Grafana Loki中的多租户查询?
自从我们在开源的TSDB、Grafana Mimir和Grafana Enterprise Metrics中引入了同时查询多个租户的功能后,Grafana Loki社区就有了自己的一个持久性查询。我们什么时候能做到这一点?
随着Grafana Loki 2.6的发布,答案就是现在。跨租户查询联盟现在在Loki中可用,允许用户使用一个查询访问来自多个租户的数据,以返回一个单一的综合结果。
Grafana Loki是原生的多租户,这意味着一个数据库可以为组织内许多不同的团队或业务线服务。每个租户都有自己的数据库片断,不受共享Loki基础设施内其他租户的影响。因此,如果有五个不同的小组需要支持,而不是运行五个不同的数据库,管理员可以将这些小组的日志合并到一个Loki数据库中,将每个小组放在自己的租户中,这样可以使每个小组的数据在集群中保持隔开状态。这不仅降低了管理成本;维护一个单一的数据库也简化了组织内操作员的工作流程。
虽然为每个客户或团队提供独立的体验是很重要的,但在一些使用案例中,管理员或操作员需要对所有工作中的系统有一个更全面的了解。例如,虽然团队A可以访问他们租户的日志,团队B可以访问他们租户的日志,但管理员可能需要查询和分析团队A和团队B的日志数据。
这就是跨租户查询联盟发挥作用的地方。
多租户查询如何工作
有了跨租户查询,用户可以同时访问多个租户,而不是对一个租户进行一次查询的标准模式,Loki数据库将合并结果并返回一个综合结果。
下面是一个对租户1的标准LogQL查询:
curl -H 'X-Scope-OrgID:Tenant1 -G -s "http://localhost:3100/loki/api/v1/query" \
--data-urlencode \
'query=sum(rate({job="varlogs"}[10m])) by (level)' | jq
进入多租户查询很简单!只需对X-Scope-OrgID 头部做一个小改动,它可以识别你要查询的租户。根据你的需要指定多个租户,用| 字符分隔他们的名字。
在这个例子中,这个跨租户的查询被写成以租户1、租户2和租户3为目标来查询所需的数据:
curl -H 'X-Scope-OrgID:Tenant1|Tenant2|Tenant3' \
-G -s "http://localhost:3100/loki/api/v1/query" \
--data-urlencode \
'query=sum(rate({job="varlogs"}[10m])) by (level)' | jq
Grafana Loki中的多租户查询对操作员或管理员特别有用,因为他们可能需要在一个数据库中的所有租户中识别具有重要或敏感数据的日志行。用户现在可以运行单个查询来搜索每个租户中的特定字符串,而不是运行单个查询来搜索其集群中的所有租户。另外,对于那些需要从日志中建立指标的用例,你现在可以很容易地计算出一个需要从多个租户中获取数据的指标,比如所有服务中的全局错误率。
但这并不只是在多个地方访问信息。跨租户查询联盟还减少了用户的上下文切换,在过去,用户必须在查询A到租户A和查询B到租户B之间翻转,以比较或合并信息。通过多租户查询,用户现在可以一直默认在一个地方搜索两个租户的所有数据。
Grafana企业日志中的跨租户查询联盟
在Grafana企业日志1.5中,也有一次查询多个租户的功能。对于企业用户来说,最大的区别是,该功能与GEL的访问控制模型集成,因此用户在没有适当权限的情况下无法运行跨租户查询。要在GEL中执行这些查询,用户必须提供一个用户名,由你要查询的租户组成,以及一个API令牌形式的密码。GEL将验证给定的令牌是否为用户提供了对查询中所有相关租户的读取权限。如果是这样,GEL将返回查询结果。如果不是,数据库将拒绝该查询。
删除Grafana Loki中的目标日志行
许多组织都有保障措施,以确保敏感或不需要的信息不会泄漏到日志行。我们有一个很好的关于用Grafana Loki管理日志数据隐私的网络研讨会,关于一些最佳做法,你可以用Promtail(我们的Grafana Loki的首选日志收集器)来实施。
但是,即使有最好的计划,不需要的日志行--例如,那些有个人身份信息(PII)或受保护的健康信息(PHI)--可以进入你的日志数据库。其他时候,这不是关于不必要的数据泄漏,而是关于有办法满足客户或终端用户希望从你的系统中删除他们的数据的请求。例如,GDPR要求企业在某些情况下,应要求删除个人的个人资料。
删除日志线过去是如何工作的
在任何这些情况下,你需要一种方法来消除那些不需要的日志行。在这个版本之前,Grafana Loki在这方面的选择有限。处理这个问题的一个方法是为你的集群中的特定租户重置保留期。用户可以为每个租户设置特定的日志数据保留期,所以解决方案是缩短有不需要的日志行的租户的保留时间。例如,如果TenantA有三个月的日志可能有问题的数据,你可以把TenantA的保留期改为一天,删除比这更早的所有数据,不管它们是好的还是坏的日志行。基本上,你必须从头开始。
用户还可以有选择地删除所有在特定时间范围内符合特定标签或标签集的日志行。因此,如果一个客户要求你删除所有关于主题X的信息,因为GDPR的要求,而你知道所有与主题X相关的数据都被标记为标签{application=app123} ,你可以删除2周内所有标记为该标签的日志行。同样,这是一个次优的解决方案,因为你要删除所有带有该标签的数据,包括一些可能与主题X无关的行。
如何在Grafana Loki中删除特定的日志行
在Grafana Loki 2.6中,我们引入了执行更有针对性的删除的功能。用户现在有权制作你自己的LogQL查询(或者你也可以利用Grafana 9.0中引入的新的Grafana Loki查询生成器!)来确定要删除的特定日志行。
一旦用户完成了与他们想删除的所有行相匹配的查询,用户就可以发出请求来删除这些行。下面的例子将删除Tenant1中所有标签为{foo=bar} ,并且在时间戳1591616227 和1591619692 之间包含字符串 "other "的行:
curl -g -X POST \
'http://127.0.0.1:3100/loki/api/v1/delete?query={foo="bar"}|= “other”&start=1591616227&end=1591619692' \
-H 'X-Scope-OrgID: Tenant1'
任何你可以在LogQL中写的查询现在都可以用来标记要删除的日志行。补充说明:在后端,数据需要48小时才能从商店正式删除。在前端,一旦你发出删除请求,Grafana Loki将立即过滤掉已识别的日志行,使它们不再可供查询。这使得删除请求对于查询Loki的任何终端用户来说几乎是瞬间完成的--与我们以前的删除功能相比,这是一项改进,因为一旦数据从存储中被删除,就会停止返回。
Grafana企业日志中的目标删除功能
与跨租户查询一样,GEL中的定向删除功能与数据库的authNZ功能天然集成。当发出删除请求时,用户必须以用户名和密码的形式提供适当的凭证。用户名是你想执行删除的租户,密码是一个API令牌。GEL将验证API令牌是否授予用户名中指定的租户以删除权限。这些企业访问控制消除了任何人从租户中意外删除信息的可能性。
了解更多关于Grafana Loki的信息
感谢所有Grafana Loki的用户和贡献者,他们继续帮助项目成长。我们的团队正在快速成长以满足需求,我们都对Loki的未来感到无比兴奋。
如果你运行Grafana Loki,请务必查看发布说明和升级指南,以了解更多关于今天开始使用Grafana Loki 2.6的细节