Skip to content

ALG(Alloy + Loki + Grafana)现代轻量级的日志管理解决方案

Alloy + Loki + Grafana(简称 ALG)是一个现代轻量级的日志管理解决方案,适用于云原生环境和大规模分布式系统。以下是对该系统的详细讲解,涵盖各组件的作用、协同工作原理及配置示例。

官网地址:https://grafana.com

中文官网地址:https://grafana.org.cn/

Loki Ai助手:https://grafana.com/grot/


1. 组件详解

1.1 Alloy(Grafana Alloy)

  • 定位:Grafana Alloy 是 Grafana Labs 推出的统一可观测性数据收集器,整合了日志、指标、跟踪的采集与转发功能,替代了早期的 Grafana Agent。
  • 核心功能
    • 数据采集:支持从多种来源(如应用日志文件、Prometheus 指标、OpenTelemetry 追踪数据)收集数据。
    • 数据处理:通过配置管道(Pipeline)对日志进行过滤、转换、添加标签(Labels)等操作。
    • 数据转发:将处理后的日志推送到 Loki,指标发送到 Prometheus/Mimir,追踪发送到 Tempo。
  • 优势
    • 单一二进制部署,资源占用低。
    • 支持模块化配置,灵活适配复杂场景。
    • 与 Grafana 生态无缝集成。

1.2 Loki

  • 定位:由 Grafana Labs 开发的高效日志聚合系统,专为云原生设计,类似 Prometheus 的日志方案。
  • 核心特性
    • 标签索引:仅对日志的标签(Labels)建立索引,而非全文,降低存储成本。
    • 水平扩展:支持分布式架构,组件包括 Distributor(分发)、Ingester(写入)、Querier(查询)等。
    • 存储分离:日志数据存储于对象存储(如 S3、MinIO),索引存储于键值库(如 BoltDB、Cassandra)。
  • 查询语言:LogQL(类似 PromQL),支持日志筛选、聚合和实时分析。

1.3 Grafana

  • 定位:开源的可视化与分析平台,支持多数据源(包括 Loki、Prometheus、MySQL 等)。
  • 核心功能
    • 日志展示:通过 Explore 界面直接查询 Loki 日志。
    • 仪表盘:创建交互式面板,结合日志与指标数据(如错误日志与 CPU 使用率关联)。
    • 告警:基于 LogQL 设置规则,触发异常日志告警。

2. ALG 系统架构与工作流程

plaintext
+----------------+       +-------------+       +------------+       +---------+
| 数据源         | --->  | Alloy       | --->  | Loki       | <---  | Grafana |
| (应用、K8s等)  |       | (采集&处理) |       | (存储&索引)|       | (可视化)|
+----------------+       +-------------+       +------------+       +---------+
  1. 日志采集:Alloy 从文件、容器、系统服务等收集原始日志。
  2. 数据处理:Alloy 通过配置的 Pipeline 清洗日志(如提取字段、过滤噪声)。
  3. 标签注入:为日志添加标签(如 app=web, env=prod),便于 Loki 高效索引。
  4. 存储到 Loki:Alloy 将带标签的日志批量推送到 Loki 的 Distributor 组件。
  5. 查询与可视化:Grafana 连接 Loki 数据源,用户通过 LogQL 查询日志并创建仪表盘。

3. 配置示例

3.1 Alloy 配置(alloy.yaml

yaml
# 采集容器日志(Docker/K8s)
prometheus.scrape "containers" {
  targets = [
    { "__address__" = "cadvisor:8080" },
  ]
  forward_to = [loki.write.endpoint.receiver]
}

# 处理日志并添加标签
loki.process "filter_logs" {
  forward_to = [loki.write.endpoint.receiver]

  stage {
    docker {}
  }
  stage {
    labels = {
      "job" = "{{ .Job }}",
      "container" = "{{ .ContainerName }}",
    }
  }
}

# 输出到 Loki
loki.write "endpoint" {
  endpoint {
    url = "http://loki:3100/loki/api/v1/push"
  }
}

3.2 Loki 配置(loki.yaml

yaml
auth_enabled: false

server:
  http_listen_port: 3100

common:
  storage:
    object_store: s3
    s3:
      endpoint: minio:9000
      access_key_id: minio
      secret_access_key: minio123
  replication_factor: 1

schema_config:
  configs:
    - from: 2023-01-01
      store: boltdb-shipper
      object_store: s3
      schema: v11
      index:
        prefix: index_
        period: 24h

3.3 Grafana 连接 Loki

  1. 在 Grafana 中添加数据源,选择 Loki。
  2. 填写 Loki 地址 http://loki:3100
  3. 使用 Explore 页面输入 LogQL 查询:
    {container="web-app"} |= "error"

4. 优势与适用场景

  • 轻量高效:相比 ELK(Elasticsearch、Logstash、Kibana),Loki 的索引更小,存储成本降低 90%。
  • 云原生友好:天然支持 Kubernetes 标签,适合动态伸缩环境。
  • 统一可观测性:Alloy 可同时处理日志、指标、追踪,简化运维栈。

5. 常见问题与优化

  • 标签设计:避免高基数标签(如 user_id),否则影响 Loki 性能。
  • 存储优化:使用压缩的日志格式(如 JSON),合理设置日志保留策略。
  • 查询加速:通过 LogQL 的 rate()pattern 分析高频错误。

通过 ALG 组合,用户能够以低成本实现高效的日志全生命周期管理,尤其适合需要快速定位问题的 DevOps 团队。

/src/technology/dateblog/2025/05/20250526-alg%EF%BC%88alloy-loki-grafana%EF%BC%89%E7%8E%B0%E4%BB%A3%E8%BD%BB%E9%87%8F%E7%BA%A7%E7%9A%84%E6%97%A5%E5%BF%97%E7%AE%A1%E7%90%86%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88.html