1.Loki简介
Loki是由Grafana Labs开源的一个水平可扩展、高可用性,多租户的日志聚合系统的日志聚合系统。
Loki的设计初衷是为了解决在大规模分布式系统中,处理海量日志的问题。
Loki采用了分布式的架构,并且与Prometheus、Grafana密切集成,可以快速地处理大规模的日志数据。
Loki 不使用传统索引结构、仅对日志标签和元数据构建索引。
Loki核心模块包括以下三个部分:
(1)Loki Server:主服务,负责日志存储和查询
(2)Promtail:代理层,负责采集日志并发送给 Loki
(3)Grafana:展示层,用于 UI 展示
2.基于Loki的日志云系统架构
通过Loki和Grafana搭建一套日志云系统,架构如下图所示:
每个集群中单独部署一套完整的日志采集器和Loki 日志存储/查询服务。
采用 Index + Chunk 的日志存储设计,写入时按日志标签的哈希值将不同日志流分散到各个 Ingester 上实现负载均衡,由 Ingester 负责将日志数据写入对象存储。
查询时,Querier 从对象存储取出 Index 对应的 Chunk 后进行日志匹配。对于热点数据,可从Ingester读取。
2.1.适用场景
Grafana+Loki 定位为轻量级、水平可拓展和高可用的日志系统。
2.2.实践中可能带来的问题
实际业务中,可能会存在以下问题:
(1)日志内容查询资源消耗过大:Loki 未对日志内容创建索引,只能按照日志标签的哈希值日志进行初步过滤。如果想要实现日志内容搜索,需使用 Query 对全量日志数据进行全文正则匹配, 而该操作会带来巨大的突发资源消耗,包括 CPU、内存、网络带宽。当查询的数据量和 QPS 越来越大时,Loki 的资源消耗及其稳定性问题也变得越来越不可忍受。
(2)Loki 架构组件繁多:除了架构图中涉及模块,还有 Index Gateway、 Memcache、 Compactor 等模块,这些组件也会给系统运维和管理带来一些挑战。
3.Loki vs ELK
ELK是大规模日志解决方案中的佼佼者,作为竞品,Loki具备以下优势:
(1)架构简单:Loki 则采用分布式架构、可以将日志存储在多个节点上,也可以存储在一个节点上,其中Promtail进行日志收集、Loki 负责存储查询、Grafana用于展现
(2)存储更小:Loki使用了紧凑的索引和压缩算法,相比ES 可以减少不少存储空间
(3)没有采集日志格式要求:提供了更大的灵活性以及在查询时格式化的选项
(4)与 Prometheus、Grafana 和 K8s 原生集成:可以在单个用户界面中无缝切换查询指标、日志等数据
(5)轻量级:相比ELK,Loki更加轻量级,因为它不需要一个单独的Elasticsearch集群来存储和索引日志数据。
当然缺点也是显而易见的。