背景: 我有各种服务,由不同的团队管理,将日志发送到单个 Loki 实例。日志带有与服务名称相对应的标签
service
。我们还运行 Prometheus 和 Grafana。
目标:每个团队都有一个运营预算,我想根据每个服务生成的日志量来分配 Loki 实例的运营成本 + 存储成本,并从每个团队的预算中扣除。
我拥有的:我在 Grafana 上使用 LogQL 查询
count by(service) (rate({environment="live"} [24h]))
和“即时”查询类型来获取日志行总数,按 service
标签分组。
问题:有些服务的日志很小,而另一些服务的日志很大。根据日志行数来分配成本是不准确的。
问题: 是否有 LogQL 查询来获取按 service
标签分组的日志 (以字节为单位)
要获取一段时间内 Loki 中所有行的总长度,您可以使用以下查询:
sum by (service) (
sum_over_time(
{environment="live"}
| label_format length=`{{ __line__ | len }}`
| unwrap length
[24h])
)
这里:
label_format length=`{{ __line__ | len }}`
添加标签 length
,其值等于整个日志行的长度。unwrap length
将此标签展开为值,以便与 sum_over_time
请注意,虽然此查询提供了您所描述的结果,但这只是对资源如何在服务之间分配的估计。它不考虑每个服务的系列号,我相信每个系列都有自己的存储开销。
*我不知道如何(或者即使)可以通过查询或任何其他方式来解释它