「Grafana Loki」- 存储(Storage)

  CREATED BY JENKINSBOT

问题描述

我们将对与 Grafana Loki 存储有关概念进行进一步的学习,以阅读官方文档为主:
1)/Operations/Storage: Storage | Grafana Loki documentation
2)/Storage: Storage | Grafana Loki documentation

该笔记将记录:阅读官方文档而产生的学习笔记,以及相关问题的解决办法;

解决方案

与其他日志系统不同,Grafana Loki 仅索引标签,而日志数据则压缩存储,这两点使得 Loki 能够运维简单且成本低廉;

storage schema

/Operations/Storage/Storage schema | Grafana Loki documentation

Grafana Loki 运行其在运行期间切换日志存储,这里的“切换”是指“从某个时间点开始,将后续日志写入新的存储服务中”;

Single Store Loki

/Operations/Storage/Single Store (boltdb-shipper) | Grafana Loki documentation

在 Loki 2.0 前,索引数据存储在单独的索引中;Loki 2.0,引入新的索引机制,boltdb-shipper(Single Store Loki),该类性的索引仅需要单一的对象存储,同时用于保存索引与日志块;

关于存储配置方式

在 Grafana Loki 中,存储是这样使用的:
1)首先,通过 storage_config 参数,来配置各种不同类型的存储;
2)然后,通过 schema_config 参数,来引用 storage_config 定义的某个存储:schema_config/store 定义保存 Index 的存储;object_store 定义保存 Chunk 的存储;

概念术语(⇒ Storage)

WIP

Storage(⇒ Operations/Storage)

日志删除(Log Entry Deletion)

Log Entry Deletion | Grafana Loki documentation

虽然按照官方文档操作,但是或许是我们操作错误或理解错误,我们始终未能成功删除日志。

Grafana Loki v2.5.0,目前(06/07/2022),日志删除处于实验性质,仅支持 BoltDB Shipper 索引存储。
支持以 Stream 和 Timestamp 来匹配要删除的日志;
Compactor 负责暴露 REST API,通过访问该 REST API 进行日志删除,但不会立即删除,实际的删除动作发生在 Cancellation Period 时间超时之后。

开启 Compactor 服务,才能进行相关操作:
1)配置 Helm Chart / compactor.enabled: true 来开启,同时 retention_enabled: true 才能开启日志删除;

进行相关日志操作:

# 提交删除任务
curl -X POST -g 'http://compactor.loki:3100/loki/api/admin/delete?match[]={foo="bar"}' # 根据 Stream 删除(匹配 Label 删除)

# 查看删除任务
curl -X GET 'http://loki-loki-distributed-compactor.loki:3100/loki/api/admin/delete'

# 取消删除任务
POST /loki/api/admin/cancel_delete_request

如果日志无法被删除,可能原因如下:
1)可能未导致删除任务执行的时间:Grafana Loki 有很多时间参数,超时或满足条件才会进行删除动作;
2)Compactor 的 shared_store 参数配置错误,导致无法找到正确的存储信息;我们的环境采用 shared_store: s3 配置;
3)其他参数或服务配置错误;

Filesystem

WIP

Retention(Table Manager / Compactor)

日志归档的处理:过久的日志可以进行删除或者归档,在 Grafana Loki 中,通过 Table Manager 或 Compactor 来实现。

我们选择的方案:根据官方文档,Compactor 将成为默认组件,并具有更精细的配置策略,并得到官方长期支持,所以我们将主要了解 Compactor 的使用方法。

目前 Compactor 仅支持 BoltDB Shipper Store 存储。
Compactor 需要以单实例运行;
Compactor 能对索引去重;
Compactor 被采用时,则没必要使用 Table Manager 组件;
压缩和保留两者都是幂等的,如果 Compactor 重启,将继续从停止的地方开始执行;

参数 compaction_interval 控制 Compactor 执行周期,每周期执行 Compaction 和 Retention 操作;如果落后则会尽快执行;

Single Store (boltdb-shipper)

WIP

Storage schema

WIP

Table manager

WIP

Write Ahead Log

WIP

参考文献

Configuration | Grafana Loki documentation