Grafana+Loki+Alloy日志采集系统-1

可以把 Grafana + Loki + Alloy 理解成一套"轻量级、云原生友好"的日志平台:

  • Alloy:负责采集、加工、转发日志
  • Loki:负责存储和检索日志
  • Grafana:负责查询、展示、分析和告警

一、这套日志系统的优势

1)比传统 ELK 更轻,成本通常更低

Loki 和很多全文检索型日志系统最大的区别是:它不对日志正文做全文索引,而是只索引标签(labels)元数据。日志内容本身会被压缩后按 chunk 存储。这样索引更小,存储和运维成本通常更低,尤其适合容器环境下大量应用日志收集

bash 复制代码
system-server      
business-server    
data-process-server
alarm-server       
gateway            
infra-server       
report-server      

这类多服务日志场景,如果按 namespace / pod / container / app / service 做标签,查询会非常自然,不需要一开始就走"重索引"路线。这个是 Loki 的核心优势

2)天然适配 Kubernetes

Grafana 官方对 K8s 日志采集给了明确方案:Alloy 负责采集 Kubernetes Pod 日志,再写入 Loki。Alloy 既能采集 Pod 日志,也能采集系统日志、集群事件等。

  • 每个节点一个 Alloy(DaemonSet)
  • 自动发现这个节点上的 Pod 日志
  • 给日志打上 K8s 元数据标签
  • 统一推送到 Loki

这比在每个 Spring Boot 服务里单独装日志 agent 简单很多,也更符合运维习惯

3)和 Grafana 结合紧密,查询体验好

Grafana 本身就是可视化层,接入 Loki 后可以:

  • 按标签快速过滤日志
  • 按时间范围检索
  • 实时 tail 日志
  • 做关键字检索、错误聚合、异常排查
  • 基于日志做告警

Loki 官方文档说明,它支持通过 HTTP API 推送、查询和 tail 日志;Grafana 则是最常见的查询与展示入口

4)Alloy 不只是日志采集器,后续还能统一接管观测数据

Alloy 不是一个"只会收日志"的工具,它是 Grafana 发行版的 OpenTelemetry Collector ,支持 metrics、logs、traces、profiles。这意味着你后面如果想把:

  • Spring Boot 指标
  • 应用链路追踪
  • JVM 指标
  • 主机指标

一起纳入统一观测体系,Alloy 可以继续复用,不需要再换一套采集架构

对运维来说,这一点很重要:先做日志,后面做监控、链路追踪时不推倒重来

5)更适合云原生场景下"按标签找日志"

Loki 的核心检索方式不是传统"先全文建索引再查",而是:

  1. 先根据 labels 找到目标日志流
  2. 再读取对应 chunk
  3. 再做过滤、关键字匹配、展示

所以它特别适合查询这类问题:

  • 某个 namespace 下的日志
  • 某个服务 app 的日志
  • 某个 pod 的日志
  • 某个实例在某时间段的报错
  • 某个网关服务 5xx 相关日志

这和 K8s 的运维排障思路高度一致

二、它的工作原理

你可以把整套链路理解成下面这条数据流:

容器标准输出 / 日志文件 → Alloy 采集 → 打标签 / 清洗 / 转发 → Loki 存储索引 → Grafana 查询展示

官方文档里已经明确了 Alloy 到 Loki 的典型链路:配置 loki.write 写入 Loki,再配置对应的日志采集组件去收集 Pod 日志或系统日志

1)日志从哪里来

在 Kubernetes 里,Spring Boot 应用最推荐的做法通常是:

  • 应用日志输出到 stdout/stderr
  • 由容器运行时写入节点上的容器日志
  • Alloy 再从 K8s/节点侧统一采集

如果你的 Spring Boot 还在写本地文件日志,也能采,但 K8s 场景优先推荐标准输出,因为这样最符合容器化日志收集模式。Grafana 官方的 K8s 采集文档也是围绕 Pod 日志来设计的。

2)Alloy 做什么

Alloy 的职责相当于"日志入口网关",主要干四件事:

  • 发现目标:找到哪些 Pod、容器、节点日志要采
  • 采集日志:持续读取日志流
  • 加工日志:加标签、解析字段、过滤噪音、重写结构
  • 发送日志 :通过 loki.write 发给 Loki

Alloy 是一个遥测采集器,原生支持 Loki 等后端;它的设计本质上继承了 OpenTelemetry Collector 的 pipeline 思想

3)Loki 怎么存

Loki 收到日志后,不会像 Elasticsearch 那样把每一行正文都做全文索引。它会:

  • 按标签组合把日志划分成不同的 stream
  • 把日志批量压缩成 chunks
  • 为这些 chunk 建立一个"目录式"的索引
  • 查询时先查索引,再取 chunk 内容

官方文档对这一点描述得很明确:每组唯一 label 组合定义一个 stream,日志会被批量压缩为 chunk;labels 是 Loki 的索引。

4)Grafana 怎么查

Grafana 连接 Loki 后,用户发起查询时通常会:

  1. 先指定标签条件,比如 app="pems-gateway"
  2. Loki 根据标签索引找到对应 chunks
  3. 再从这些 chunks 中取出日志内容
  4. 在 Grafana 界面显示,并支持继续筛选、聚合、统计

所以 Loki 的查询效率很大程度上取决于:你的标签设计是否合理。 标签打得太少,查询范围太大;标签打得太细、太离散,又会造成高基数问题。官方也明确强调:labels 要谨慎设计。

三、这三者之间的分工

Grafana

相当于"前台控制台"

  • 配置数据源
  • 查日志
  • 做 Dashboard
  • 配置告警
  • 做排障分析

Loki

相当于"日志数据库"

  • 接收日志
  • 按标签组织日志流
  • 存储 chunks
  • 提供查询接口

Alloy

相当于"采集代理 + 数据管道"

  • 在 K8s 节点或 Pod 侧采集日志
  • 给日志补充 Kubernetes 元数据
  • 清洗、重写、过滤
  • 发送到 Loki

这个职责分离很清晰,也方便后期扩展。

四、凭什么这套适合你的项目

  • Spring Cloud 微服务
  • 服务数量较多
  • K8s 部署
  • 需要统一查看多个服务日志
  • 未来大概率还想做监控、告警、链路分析

这时用 Grafana + Loki + Alloy 的好处是:
部署模型和 K8s 很契合 ,通常节点级采集即可。
多服务日志统一检索方便 ,按 namespace / app / pod / container 查询就行。
日志成本相对友好 ,尤其适合持续增长的容器日志量。
后续可以平滑扩展到指标和链路追踪,不用重建采集体系。

五、需要建立的正确认知

1)Loki 不是 Elasticsearch

它不是"重全文索引搜索引擎",而是"按标签组织日志流的日志系统"。所以设计重点不在"把每个字段都索引",而在"先把标签体系设计好"

2)K8s 日志采集最好围绕容器 stdout

不要延续传统物理机时代"每个应用各写一个文件、每个文件再单独采集"的思路。容器场景最好让 Spring Boot 把日志打到标准输出,再让 Alloy 统一采集。Grafana 官方的 K8s 日志采集路径也是围绕 Pod/container logs

3)标签比正文更重要

以后你查日志时,最常用的不是"全文搜一句话",而是先按这些条件缩小范围:

  • 集群 / namespace
  • 服务名
  • pod 名
  • 容器名
  • 节点名
  • 环境(dev/test/prod)

然后再在结果里过滤关键字。

4)Alloy 是整套方案的入口

Alloy 配置写得好不好,直接决定:

  • 日志是否能采到
  • 标签是否齐全
  • 是否有噪音日志
  • 查询是否方便
  • Loki 压力是否合理

所以实操里,采集配置和标签规划 是成败关键。

六、总结

这套系统本质上是:

用 Alloy 在 K8s 里统一采集日志,用 Loki 以"标签索引 + 压缩存储"的方式低成本保存日志,再用 Grafana 做检索、分析和告警。

大概结构如下:

相关推荐
Triv20253 小时前
太阳能船远程信息处理:CAN数据记录 + Grafana仪表板实战案例
grafana·数据可视化·influxdb·嵌入式系统·can总线·数据采集与监控·智能船舶
cnskylee4 小时前
【Grafana】Grafana大版本升级后的Visualizations迁移说明
grafana
**蓝桉**8 小时前
Pushgateway的使⽤
grafana·prometheus
小李的便利店2 天前
k8s集群部署Prometheus和Grafana
kubernetes·grafana·prometheus·监控
**蓝桉**2 天前
一键恢复 Redis 运行与 Grafana 监控(免修改 systemd 配置)
redis·bootstrap·grafana
数据知道3 天前
MongoDB性能监控仪表板:Grafana+Prometheus集成实战
mongodb·grafana·prometheus
&不羁之风&3 天前
Grafana 配置实战
grafana
七七powerful5 天前
养龙虾--安装grafana mcp server并使用codebuddy自动巡检
grafana·codebuddy·grafana mcp
ldj20208 天前
安装prometheus + grafana
grafana·prometheus