Loki 由多个微服务组件构建而成,使用可以作为一个可水平扩展的读写分布式系统运行,Loki 的分离独特设计可以将整个分布式系统的代码编译成单个二进制或 Docker 映像,单个二进制文件的模式行为由 -target 命令行标志控制。 最简单的扩展操作模式是设置 -target=all,这是使用默认的方式,不需要指定,读写这就是分离单体模式,它以单个二进制文件或 Docker 映像的模式形式在单个进程中运行 Loki 的所有微服务组件。 单体模式对于快速开始使用 Loki 以及每天数据量约100GB的扩展读写量非常有用。将单体模式部署水平扩展至更多实例可以通过使用共享对象存储,使用配置 memberlist_config 属性在所有实例之间共享状态。读写 可以通过使用 memberlist_config 配置和共享对象存储运行两个 Loki 实例来配置高可用性。服务器托管分离以循环方式将流量路由到所有 Loki 实例。模式并行查询受限于实例数量和定义的扩展查询并行度。 单体模式的安装非常简单,直接使用 grafana/loki-stack 这个 Helm Chart 包安装即可。 如果你每天的日志量超过几百 GB,或者你想进行读写分离,Loki 提供了简单的可扩展部署模式。这种部署模式可以扩展到每天数 TB 甚至更多的日志。 在这种模式下,Loki 的组件微服务被绑定到两个目标中:-target=read 和 -target=write,BoltDB compactor 服务将作为读取目标的一部分运行。 分离读写路径有以下优点: 这种读写分离的模式需要在 Loki 前面有一个负载均衡器,它将 /loki/api/v1/push 流量路由到写入节点,亿华云计算所有其他请求都转到读取节点,流量应该以循环方式发送。 我们同样使用 Helm Chart 进行安装,首先获取读写分离模型的 Chart 包: $ helm repo add grafana https://grafana.github.io/helm-charts $ helm pull grafana/loki-simple-scalable --untar --version 1.4.1 该 Chart 包支持下表中显示的组件,Ingester、distributor、querier 和 query-frontend 都会安装,其他组件是可选的。 Loki组件 是否可选 是否默认开启 gateway ✅ ✅ write ❎ n/a read ❎ n/a 这里我们使用 MinIO 来作为远程数据存储,分别配置读和写的 Loki 实例副本数为2,为了在 Loki 前面添加一个负载均衡器,需要开启 Gateway,对应的 Values 文件如下所示: # ci/minio-values.yaml loki: commonConfig: path_prefix: /var/loki replication_factor: 2 authEnabled: false # Configuration for the write write: # -- Number of replicas for the write replicas: 3 affinity: | podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 1 podAffinityTerm: labelSelector: matchLabels: { { - include "loki.writeSelectorLabels" . | nindent 12 }} topologyKey: kubernetes.io/hostname persistence: size: 1Gi storageClass: local-path # Configuration for the read node(s) read: # -- Number of replicas for the read replicas: 3 affinity: | podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 1 podAffinityTerm: labelSelector: matchLabels: { { - include "loki.readSelectorLabels" . | nindent 12 }} topologyKey: kubernetes.io/hostname persistence: size: 1Gi storageClass: local-path # Configuration for the gateway gateway: # -- Specifies whether the gateway should be enabled enabled: true # ------------------------------------- # Configuration for `minio` child chart # ------------------------------------- minio: enabled: true accessKey: enterprise-logs secretKey: supersecret service: type: NodePort nodePort: 32000 buckets: - name: chunks policy: none purge: false - name: ruler policy: none purge: false - name: admin policy: none purge: false persistence: size: 1Gi storageClass: local-path resources: requests: cpu: 100m 然后使用上面的 values 文件来安装读写分离模式的 Loki: $ helm upgrade --install loki -n logging -f ci/minio-values.yaml . Release "loki" does not exist. Installing it now. NAME: loki LAST DEPLOYED: Fri Jun 17 14:53:20 2022 NAMESPACE: logging STATUS: deployed REVISION: 1 TEST SUITE: None NOTES:单体模式
读写分离模式
安装