Loki+Grafana轻量化日志分析

66次阅读
没有评论

Loki为一个日志存储和查询引擎,它的核心职责是接收、存储日志并处理查询。而日志的采集、处理和推送工作,则交由专门的客户端完成。

一个完整的Loki日志采集与处理流程,通常由以下三个部分组成:

Loki+Grafana轻量化日志分析

Loki官方及主流的日志采集方式

官方提供了多种客户端来适配不同的场景。

  • Promtail:Loki项目自带的官方日志采集器,是当前最主流的选择。
  • 功能:专门为Loki设计,能够发现日志文件(如Linux系统中的/var/log/*.log)、与Docker或Kubernetes深度集成(自动发现容器、获取Pod标签),并为日志流添加标签。
  • 适用场景最通用的场景,特别是Kubernetes环境。通常以DaemonSet方式部署在集群的每个节点上,采集所有Pod的日志。
  • Grafana Alloy:Grafana Labs推出的新一代供应商无关的OpenTelemetry采集器。官方已明确,Promtail功能将趋于完结,未来的日志采集功能开发将主要在Alloy中进行。
  • 功能:功能更强大,不仅限于日志,还能采集指标、追踪和配置文件。
  • 适用场景新项目或需要统一采集器的理想选择,特别是在采用OpenTelemetry协议的现代化可观测性架构中。
  • Docker Driver:一个Docker插件,可以直接在容器内运行,并将容器的标准输出日志(stdout/stderr)发送给Loki。
  • 适用场景:简单的Docker环境,无需部署独立的采集器。
  • 其他第三方客户端:许多其他日志采集工具也通过插件支持将日志推送到Loki。例如 FluentdFluent Bit

💡 核心要点:Loki是如何“采集”的?

虽然Loki不亲自“伸手”去拿日志,但它定义了一套清晰的“采集”流程:

  1. 日志发现:客户端(如Promtail)会监控指定的位置。在Kubernetes中,它通过访问Docker Socket或Kubelet API动态发现新创建的Pod并找到其日志文件路径。
  2. 标签化:客户端会为发现的日志流添加一组标签(Labels),例如 container="spoon-app"namespace="default"job="flog_scrape"等。这是Loki的核心设计——它不索引日志内容,只索引这些标签,从而大幅降低存储成本
  3. 推送:经过标签化的日志流会通过HTTP API被推送到Loki服务端。

选项一:使用 Promtail (经典方案)

这是目前最普遍、资料最多的方案,非常适合传统服务器环境。你只需要在每台需要采集日志的服务器上安装 Promtail,并简单配置一下即可。

  1. 安装:下载 Promtail 的二进制文件或通过包管理器(如 apt)安装。
  2. 配置:编辑配置文件 promtail-local-config.yaml,核心是告诉它三件事:
  • 从哪里读:通过 __path__ 指定日志文件路径,比如 /var/log/*.log/var/log/nginx/access.log
  • 打什么标签:为日志加上 job="varlogs"host="my-server" 等标签,方便后续在 Loki 中查询。
  • 往哪里送:配置 Loki 服务端的地址,例如 http://<你的Loki服务器IP>:3100/loki/api/v1/push
  1. 运行:将 Promtail 配置为系统服务(如 systemd),保证它能开机自启并在后台稳定运行。

选项二:使用 Grafana Alloy (前瞻方案)

如果你想用一个统一的客户端来管理所有遥测数据,或者希望技术栈更具未来性,Alloy 是更好的选择。

  1. 安装:同样可以通过 APT 仓库方便地安装。
  2. 配置:编辑配置文件 /etc/alloy/config.alloy。虽然语法不同,但逻辑和 Promtail 类似。你需要配置 local.file_match 来发现日志文件,再用 loki.source.file 组件去读取,最后用 loki.write 组件发送给 Loki。
  3. 运行:同样作为 systemd 服务运行,确保它有权限读取日志文件(例如,将 alloy 用户添加到 adm 组)。
正文完
 0
评论(没有评论)