在最近把Loki应用于生产环境后,第一件事自然是为日志数据设置一个有效的保留策略。我按照官方文档v1.5.0版本的存储操作指南,制定了一份loki.yaml配置文件并启动Loki。然而,启动后立刻弹出警告:Retention period should now be a multiple of periodic table duration。直译过来就是保留周期必须是周期表时长的倍数。 这让我有些困惑,因为我已经计算好了保留时间为7天。带着这个疑问,我查找了相关的问题记录,发现默认设置中168小时(7天)被视为一张表的时间段。因此,保留时间必须是168小时的倍数,例如672小时。官方示例中的这个设置给初学者带来了不小的困扰,时间可能就这样被悄悄蒸发了。 为了更好地理解这个周期表机制,我回顾了Loki的数据模型。Loki将日志数据分割成多个周期表,每个表承载固定时间段的数据。这种设计有很多优点:不同时间段可以配置不同的schema;这样在升级时,老数据依然可用;另外,当需要删除某个时间段的日志时,直接清理对应的周期表即可。配置文件中的schema_config就用来定义时间段和规则之间的映射关系,这样能更好地支持版本迁移、灰度测试等操作。 要给Loki设置保留策略其实很简单:只需在配置文件中开启自动清理功能并设置保留时长即可。需要注意的是,目前版本还不支持针对不同租户设置不同的过期策略。所有租户共用一套保留规则和生命周期管理机制。 为什么选择Loki呢?因为它轻巧、省资源,还能和Grafana无缝集成;社区活跃,迭代更新快。适合快速搭建实时查询与告警系统。但如果涉及复杂分析(比如聚合统计、机器学习),Loki就显得力不从心了,这时EFK或者Elasticsearch会是更好的选择。 总之这就是我在使用Loki时遇到的问题和解决过程了。希望这些经验能帮到大家,少让你们掉些头发。