Skip to content

Grafana Loki 轻量级日志聚合系统

Grafana 简介

从 Prometheus 到 Loki,从指标到日志。

Grafana 简介

开源的仪表盘,可观测性事实上的标准方案。

Grafana Loki

Loki 是一个水平可扩展、高可用、多租户的日志聚合系统,其设计灵感源自 Prometheus,旨在实现极高的成本效益且易于操作。它不会为日志内容建立索引,而是为每个日志流建立一组标签。Loki 项目于 2018 年在 Grafana Labs 启动,并在西雅图 KubeCon 大会上公布。Loki 依据 AGPLv3 许可证发布。Grafana Labs 自豪地主导着 Loki 项目的开发,在 Grafana 中构建了对 Loki 的一流支持,并确保 Grafana Labs 的客户能获得他们所需的 Loki 支持及功能。

Grafana Loki 核心技术特点:

  1. 简单易用,可以使用各种各样的客户端,以任何格式、从任何来源发送日志。
  2. 100% 持久化到对象存储,意味着能获得 PB 级规模、高吞吐量以及经济高效且耐用的存储。
  3. 根据日志行构建指标并生成警报
  4. 没有摄入日志格式要求,这提供了更大的灵活性,并且可以选择在查询时进行格式化。
  5. 实时跟踪日志,以便在日志进入系统时查看它们,每隔特定时间更新日志,查看特定日期的日志等等。
  6. 原生集成 Prometheus、Grafana 和 K8s,因此可在单一用户界面中无缝切换指标、日志和追踪数据。

【标签索引数据格式】

一、异构系统日志采集

Grafana Loki 起初使用 Promtail 做日志采集,为了适应可观测性的发展启动了 Grafana Alloy 项目。

Grafana Alloy 是一个开源的 OpenTelemetry 收集器,可用于 Grafana Loki 日志聚合系统中进行异构系统日志采集。

1. 功能性特点

  1. 配置即代码,创建 config.alloy 文件来配置 Grafana Alloy,可随代码推送到版本仓库,进行版本管理。
  2. 基于 Pull 模式的日志文件监听采集,与日志生产解耦,可以采集任何异构系统日志
  3. 预处理模块,借助loki.process组件对日志进行转换、过滤、解析和丰富等操作。可使用stage.drop块定义要从抓取的日志中删除的内容,从而过滤掉非必要日志,减少日志量,降低存储成本。

2. 非功能性特点

  1. 云原生横向扩展
  2. 安全可靠
  3. 高可用与负载均衡

日志采集过程

  • 配置文件定义:通过创建config.alloy文件来配置 Grafana Alloy。例如,使用local.file_match组件定义要采集的日志文件路径,可支持通配符,还能设置每隔一定时间检查新文件。如path_targets = ({__path__ = "/data/log/info-*.log", service = "systemName", })表示加载以info为前缀的log文件,并为其添加service标签。
  • 日志抓取:利用loki.source.file组件连接到local.file_match组件,从指定文件中抓取日志数据。它可以从日志文件末尾开始跟踪,避免摄入整个日志文件历史,并将抓取到的日志转发给其他组件,如用于过滤的组件。
  • 日志处理:借助loki.process组件对日志进行转换、过滤、解析和丰富等操作。可使用stage.drop块定义要从抓取的日志中删除的内容,从而过滤掉非必要日志,减少日志量,降低存储成本。
  • 日志发送:最后通过loki.write组件将处理后的日志发送到 Grafana Loki 服务器。需配置 Loki 的端点地址,如endpoint { url = "http://127.0.0.1:3100/loki/api/v1/push" },将日志数据推送到指定的 Loki 实例。

2. 非功能性特点

  • 多协议支持与兼容性强:Grafana Alloy 原生支持多种数据格式和协议,如 Prometheus、OpenTelemetry、Mimir、Loki 等。这使得它能够从不同类型的异构系统中采集日志,无论是基于容器的应用、传统的服务器应用,还是其他各种支持相关协议的设备,都可以方便地接入,统一采集日志数据。
  • 功能丰富强大:不仅能采集日志,还支持指标、跟踪和配置文件等多种类型数据的采集。可对采集的数据进行处理和转换,如注入额外元数据或过滤数据,满足不同场景下对日志数据处理的需求,为后续的分析和监控提供更优质的数据。
  • 配置灵活便捷:提供了强大的模块组件配置功能,可将复杂的配置文件简化为几行的模块。这些模块可以是社区预构建的,也可以由 Grafana 打包提供,用户能够根据实际需求快速配置,轻松实现日志采集任务,还支持本地配置和云端配置等多种方式。
  • 高可用性与负载均衡:内置集群功能,针对基于拉取的工作负载,能实现更好的工作负载分配和高可用性。确保在大规模日志采集场景下,系统能够稳定运行,不会因某个节点故障而影响整体日志采集工作。
  • 安全可靠:可连接到 HashiCorp Vault 服务器来检索机密信息,避免在本地管理认证凭据和令牌,提高了系统的安全性,防止敏感信息泄露,保障日志采集过程的安全可靠。
  • 调试方便:内置调试用户界面,可通过 Alloy 的 HTTP 服务器查看,方便在配置时排查问题。用户能够快速定位和解决日志采集过程中出现的配置错误等问题,减少调试时间和成本。

二、日志格式、内容预处理

三、经济性的冷热存储

四、开箱即用的监测平台 Grafana

五、基于RESTful API 的开放能力,赋能外部系统

参考