最近使用 Loki 碰到一个比较蛋疼问题,配置日志过期时间,配置这种事情,自然是要参照官方文档了,当时就找到了这个文档,地址:
https://github.com/grafana/loki/blob/v1.5.0/docs/operations/storage/retention.md
当我配置完成之后,启动 Loki 的时候直接提示:
Retention period should now be a multiple of periodic table duration
大概中文意思是说保留时间段必须是周期表的倍数,脑海里不禁打了一个大大问号,我是按照你的 demo 来的。于是,跑到 issue 里面进行了一番搜索,后来就发现了这个,如下是作者的回复 大概意思是说呢,默认情况下 168 小时一张表,日志保留时间应该是 168 的倍数,比如:168x4。
于是有人认为 Loki 官方给出的实例具有一定的迷惑性,当然我就是这样被绊倒了。(能不能职业一点,这样的错误对于初级用户,不知道要浪费多少时间,所以啊,出了问题,强烈建议到官方 issue 去查找原因)
那么 Loki 数据保留策略是如何设计的呢?
Loki 支持在基于表的数据存储中存储索引和块。使用这种存储类型时,会在一段时间内创建多个表:每个表(也称为周期表)都包含特定时间范围内的数据。这样做可以带来两个明显的好处:
每个表都绑定一个配置模式和版本,随着时间的推移修改了 Loki 的配置和版本信息,这样就可以做到多个模式和版本数据共存。在 schema_config 可以存在一个或者多个 config,每个 config 中都存在一个 from 字段,这样的话,就可以在不同 from 时间段内使用不同模式配置信息,出现版本升级或者 Loki 架构修改的时候,这个功能显得尤为重要。
通过这种配置当需要删除某个时间段之间的数据,就可以快速删除。数据存储系统中通常存在过期策略,而对于 Loki 是保留策略,可以在 Loki 中配置保留多少天的数据,那么之前数据会被清除,Loki 中默认保留所有数据,如果想要开启保留策略,必须在 loki.yaml 配置文件中添加如下配置:
table_manager:
retention_deletes_enabled: true
retention_period: 336h
超出这个保留时间的表数据将被自动清理,具体保留数据策略如下图所示:
那么保留的表数量公式为:number_of_tables_to_keep = floor(retention_period / table_period) + 1 注意:Loki 的保留数据时间最小单位是 24 小时,所以这个保留参数的配置应该为 24 小时的倍数。另外一点需要注意的是 Loki 虽然在设计中声明自己是多租户的,而且每个租户之间数据隔离,但在过期策略这部分却不支持按照租户设置过期策略,所以就目前来说 Loki 的多租户并不是特别完善,如下图所示:
选择使用 Loki 做日志存储和查询工具的原因其一节省资源、其二能够跟 Grafana 监控平台无缝集成、社区非常活跃、发展速度非常快。就目前而说,它是一个轻量级的日志存储和查询工具(支持简单的日志统计),如果需要使用复杂数据分析和统计,那么建议使用 EFK。以上就是本人在使用 Loki 的过程碰到一些问题,希望能够帮助到大家,谢谢!如有问题,关注公众号、加我微信,拉你进讨论群。