Loki日志聚合系统快速起步

Loki是受 Prometheus监控 启发的水平可扩展、高可用、多租户日志聚合系统。Loki的设计非常经济高效且易于操作。

Loki 不索引日志的内容,而是为每个日志流建立一组标签 这意味着不能实现灵活的全文搜索(相比较 Elasticsearch ),但是带来了高效率的数据存储(占用极少的磁盘空间)以及适合预知查询组合方式(标签查询)的快速日志搜索。

Loki 日志聚合系统是 Grafana通用可视分析平台 Labs于 2018年开发的平台,具备以下优点:

  • 非常容易集成到Kubernetes集群和 Prometheus监控 + Grafana通用可视分析平台 (可视化展示)

  • 可以采集任何格式的日志

  • 运行成本低: 存储数据少且写入快速,索引占用空间也很小,能够实现快速查询

工作原理

../../../_images/logs-loki-diagram.svg
  • 使用 Promtail 作为日志采集器: 结合Prometheus的 Prometheus服务发现 以及类似功能,实现在存储到Loki之前就完成日志的标签(labeling), 转换(transforming) 和 过滤(filtering)

  • Loki 中存储日志: Loki不对日志文本进行索引 ! 相反,存储对象是直接在数据流中进行分组 并且 使用标签(labels)进行索引。这意味着降低成本,也意味着能够实现毫秒级的查询

  • 使用 LogQL 查询语言: 在 Grafana通用可视分析平台 中剋直接使用 LogQL 查询和可视化日志,也可以使用 LogCLI 实现命令行功能

  • 基于日志告警: 在输入的日志数据上可以通过 Loki 设置告警,告警可以发送给 Alertmanager 路由给合适的处理团队

典型的Loki日志软件栈包括以下3个组件:

  • Agent: 也就是 Promtail ,负责抓取日志,通过添加标签和通过一个Loki的HTTP API将日志流化并推送到Loki

  • Loki: 主要服务器负责日志存储以及处理查询(有3种不同部署模式)

  • Grafana通用可视分析平台 : 查询和显示日志数据,也可以通过 LogCLI 命令行查询日志

特点

  • Loki是受 Prometheus监控 启发的水平可扩展、高可用、多租户的日志聚合系统

  • Loki与Prometheus的区别在于: Loki关注日志而不是metrics,Loki通过推送而不是拉取来收集日志(主流的日志采集系统都是这样)

  • Loki设计经济高效且高度可扩展: 与其他日志系统不同(例如 Elasticsearch ),Loki不对日志内容索引,而只对日志的元数据索引,作为每个日志流的一组标签

  • 日志流(log stream)是一组共享相同标签的日志: 标签帮助Loki在数据存储中找到日志流,所以拥有高质量的标签是高效执行查询的关键

备注

我理解Loki的日志标签类似于关系型数据库的表结构,预先创建好Label就相当于数据库的字段,就能够根据字段(标签)进行查询

优点是存储空间占用小,查询迅速。

缺点是只有预先知道(设置)的标签才能提供查询,难以适应千变万化的日志查询需求

  • 日志数据被压缩以块的形式存储在对象存储中,例如 Amazon Simple Storage Service (S3) 或 Google Cloud Storage (GCS) ,甚至可以为了开发或概念验证存储在文件系统中

  • 小索引和高度压缩的块简化了操作并显著降低了Loki的成本

备注

日志存储在S3或GCS云存储中,表明Loki更适合部署在特定的云计算服务商平台,实际上这也显示了Loki的定位,就是基于云计算(厂商)部署,为了节约云计算费用,舍弃了高级的日志内容索引,而针对特定查询场景进行优化(很多初级用户可能只需要基础的特定查询)可以极大降低运营成本。