loki的部署模式
grafana loki 在 helm 中版本变化很大,理解部署模式有助于快速 run 一组 loki 服务;loki 服务是一个单体二进制文件运行的微服务架构模式,具体运行的角色通过 -target
参数来区分运行什么组件。
单体模式
单体模式又称整体模式,源自官网 (Monolithic mode),这个模式指的是 -target=all
时运行的服务。需要注意的是单体模式下,每天读写量为 20GB.
Monolithic mode is useful for getting started quickly to experiment with Loki, as well as for small read/write volumes of up to approximately 20GB per day. [1]
该模式下loki 所有的组件都为二进制文件或者容器作为单一进程运行。
SSD
SSD (Simple Scalable deployment mode) 简单可扩展部署模式,是 loki 对内部组件进行分类,当参数 target 我i -target=write
, -target=read
, -target=backend
时,是作为 SSD mode 启动。其中 write 和 backend 是有状态服务,read 是无状态服务。
微服务模式
微服务模式 (Microservices mode) 指的是,参数 target 制定了对应的组件名字,即每个组件作为独立的微服务运行。可以通过 -list-targets 参数来获取 loki 所有组件。
|
|
微服务模式官方推荐在大规模 loki 集群时使用。
Microservices mode is only recommended for very large Loki clusters or for operators who need more precise control over scaling and cluster operations. [2]
Loki的存储
Loki存储日志的方式是将日志的元数据信息作为类似 Prometheus 的 key/value 对的格式进行索引,而日志内容不索引进行存储,大致一条信息的组成为:
|
|
在 Loki 2.0 之前版本,loki存储将索引数据和未索引数据分别存储,索引数据包含了相对应的标签,常见为 {app="api", env="production", filename="/var/logs/app.log"}
这种起了唯一的标识;对象存储则负责存储和压缩日志。索引提供负责快速查询的标签。
在 Loki 2.0 后的版本提供了 Single Store,这里存储了包含“索引数据”和“非索引数据”,即只提供了一个存储。
Helm 安装 Loki 2.9
添加 loki 仓库
|
|
helm的版本差异
loki helm 有很多不同的模式,官方也提供了诸如 SSD 的 helm,这里采用 loki helm 进行安装。在安装时需要区分版本,loki helm 2.x (最高对应 loki 2.6.1 版本),这里 helm 运行为单一进程的。在 loki helm 3 以上,编默认作为 SSD 模式运行,如果还想运行为“单体模式” 需要自行修改。
下面时 loki helm 2.16.0 的 helm values.yaml
|
|
单体模式进行部署
修改 values.yaml, 搜索 singleBinary,修改为 true
|
|
注意修改存储模式,在使用到单体的状态下,通常都是进行最小化部署,所以使用 “文件系统” 模式,这里修改文件系统模式
|
|
需要注意的是,使用了 filesystem,对应的你的 k8s 集群需要提供 storageClass,以供应用自动获取 pvc
|
|
部署 Loki
|
|
SSD模式部署
默认模式下,就是 SSD 模式,
|
|
而 Ingress 中会根据用户启用了什么模式而分配不同的路由,在文件 grafana/loki/blob/v2.9.2/production/helm/loki/templates/ingress.yaml 中定义
|
|
在文件 grafana/loki/blob/v2.9.2/production/helm/loki/templates/_helpers.tpl 可以看到
|
|
最后就是 values.yaml 中定义的路由,根据不同的服务,吧请求路由转发到对应的服务上。
|
|
后面就配置你要启用的服务即可,read, write, backend, gateway, loki有维护一个表格,包含了该模式下的组件有哪些,backend可以看到是不属于 read, write 模式。
Component | individual | all | read | write | backend |
---|---|---|---|---|---|
Distributor | x | x | x | ||
Ingester | x | x | x | ||
Query Frontend | x | x | x | ||
Query Scheduler | x | x | x | ||
Querier | x | x | x | ||
Index Gateway | x | x | |||
Compactor | x | x | x | ||
Ruler | x | x | x | ||
Bloom Planner (Experimental) | x | x | |||
Bloom Builder (Experimental) | x | x | |||
Bloom Gateway (Experimental) | x | x |
官方也有提供一些简单的部署模式在文件夹 production/helm/loki/ci
至此 loki 使用 helm 部署的两种模式就完成了部署,再配合 data ingestion, 例如 Promtail, Filebeat 等就可以完成日志的收集。
Reference
[3] Chunk storage
[4] Loki components