菜单
开源

Loki 部署模式

Loki 是一个由许多微服务组成的分布式系统。它还有一种独特的构建模式,所有这些微服务都存在于同一个二进制文件中。

您可以使用 -target 命令行标志配置此单一二进制文件的行为,指定哪些微服务将在启动时运行。您还可以在 loki.yaml 文件中进一步配置每个组件。

因为 Loki 将存储的数据与用于摄取和查询数据的软件解耦,所以您可以随着需求变化轻松地以不同的模式重新部署集群,只需很少或无需配置更改。

单体模式

最简单的运行模式是单体部署模式。您可以通过设置 -target=all 命令行参数来启用单体模式。此模式在一个进程内运行所有 Loki 微服务组件,作为单一二进制文件或 Docker 镜像。

monolithic mode diagram

单体模式有助于快速入门并试验 Loki,也适用于每天读/写量约为 20GB 或以下的小规模部署。

您可以通过使用共享对象存储,并配置 loki.yaml 文件中的 ring 段落 来使所有实例共享状态,从而将单体模式部署横向扩展到更多实例,但如果您需要扩展部署规模,建议使用简单可扩展模式。

您可以通过使用 memberlist_config 配置和共享对象存储运行两个 Loki 实例,并将 replication_factor 设置为 3 来配置高可用性。您以轮询方式将流量路由到所有 Loki 实例。

查询并行度受实例数量和 loki.yaml 文件中定义的 max_query_parallelism 设置的限制。

简单可扩展模式

简单可伸缩部署是 Loki Helm Chart 安装的默认配置。这种部署模式是扩展 Loki 的最简单方法。它在单体模式部署和将每个组件部署为单独微服务之间取得了平衡。

注意

此部署模式有时简称 SSD(简单可伸缩部署),请勿与固态硬盘混淆。Loki 使用对象存储。

Loki 的简单可伸缩部署模式将执行路径分为读、写和后端目标。这些目标可以独立扩展,让您能够定制 Loki 部署以满足您的业务对日志采集和日志查询的需求,从而使您的基础设施成本更好地匹配您使用 Loki 的方式。

简单可伸缩部署模式每天可以扩展到几 TB 的日志量,但是如果超过这个量,对于大多数用户来说,微服务模式将是更好的选择。

Simple scalable mode diagram

在简单可伸缩模式下,可以通过在 Loki 启动时附加以下参数来激活三个执行路径

  • -target=write - 写入目标是有状态的,由 Kubernetes StatefulSet 控制。它包含以下组件
    • 分发器 (Distributor)
    • 采集器 (Ingester)
  • -target=read - 读取目标是无状态的,可以作为 Kubernetes Deployment 运行并自动扩展(请注意,在官方 helm chart 中,它目前部署为 stateful set)。它包含以下组件
    • 查询前端 (Query Frontend)
    • 查询器 (Querier)
  • -target=backend - 后端目标是有状态的,由 Kubernetes StatefulSet 控制。包含以下组件
    • 压实器 (Compactor)
    • 索引网关 (Index Gateway)
    • 查询调度器 (Query Scheduler)
    • 规则管理器 (Ruler)
    • Bloom 规划器 (Bloom Planner) (实验性)
    • Bloom 构建器 (Bloom Builder) (实验性)
    • Bloom 网关 (Bloom Gateway) (实验性)

简单可伸缩部署模式需要在 Loki 前面部署反向代理,以将客户端 API 请求导向读节点或写节点。Loki Helm chart 包含一个默认的反向代理配置,使用 Nginx。

微服务模式

微服务部署模式将 Loki 的组件作为不同的进程运行。每个进程在调用时指定其 target。对于 release 3.2,组件包括:

  • Bloom 构建器 (Bloom Builder) (实验性)
  • Bloom 网关 (Bloom Gateway) (实验性)
  • Bloom 规划器 (Bloom Planner) (实验性)
  • 压实器 (Compactor)
  • 分发器 (Distributor)
  • 索引网关 (Index Gateway)
  • 采集器 (Ingester)
  • Overrides Exporter
  • 查询器 (Querier)
  • 查询前端 (Query Frontend)
  • 查询调度器 (Query Scheduler)
  • 规则管理器 (Ruler)
  • 表管理器 (Table Manager) (已弃用)

提示

您可以通过使用 -list-targets 标志运行 Loki 来查看您当前版本的 Loki 的完整目标列表,例如

bash
docker run docker.io/grafana/loki:3.2.1 -config.file=/etc/loki/local-config.yaml -list-targets

Microservices mode diagram

将组件作为单个微服务运行提供了更高的粒度,允许您将每个组件作为单独的微服务进行扩展,以更好地匹配您的特定用例。

微服务模式部署可以实现更高效的 Loki 安装。然而,它们也是设置和维护中最复杂的。

微服务模式仅推荐用于非常大型的 Loki 集群,或需要对扩展和集群操作有更精确控制的运维人员。

微服务模式是为 Kubernetes 部署设计的。有一个社区支持的 Helm chart 可用于在微服务模式下部署 Loki。