菜单
文档面包屑箭头 Grafana Alloy面包屑箭头 教程面包屑箭头 将日志发送到 Loki
开源

使用 Grafana Alloy 将日志发送到 Loki

本教程将向您展示如何配置 Alloy 以收集您本地机器上的日志,过滤非必要的日志行,将它们发送到 Loki,并使用 Grafana 探索结果。

开始之前

完成本教程需要

  • 您必须对 Alloy 和 telemetry 收集有基本了解。
  • 您应该熟悉 Prometheus、PromQL、Loki、LogQL 以及基本的 Grafana 导航。

提示

或者,您可以在交互式学习环境中尝试此示例:将日志发送到 Loki

这是一个完全配置好的环境,所有依赖项都已安装。

Interactive

安装 Alloy 并启动服务

本教程需要安装了 Docker 的 Linux 或 macOS 环境。

Linux

在 Linux 上安装并运行 Alloy。

  1. 安装 Alloy.
  2. 运行 Alloy.

macOS

在 macOS 上安装并运行 Alloy。

  1. 安装 Alloy.

  2. 运行 Alloy.

您可以在以下地址访问 Alloy UI:https://:12345

设置本地 Grafana 实例

在本教程中,您将配置 Alloy 以收集本地机器的日志并将其发送到 Loki。您可以使用以下 Docker Compose 文件来设置本地 Grafana 实例。该 Docker Compose 文件包括配置为数据源的 Loki 和 Prometheus。

  1. 创建一个目录并将 Docker Compose 文件保存为 docker-compose.yml

    bash
    mkdir alloy-tutorial
    cd alloy-tutorial
    touch docker-compose.yml
  2. 将以下 Docker Compose 文件复制到 docker-compose.yml 中。

    yaml
     version: '3'
     services:
       loki:
         image: grafana/loki:3.0.0
         ports:
           - "3100:3100"
         command: -config.file=/etc/loki/local-config.yaml
       prometheus:
         image: prom/prometheus:v2.47.0
         command:
           - --web.enable-remote-write-receiver
           - --config.file=/etc/prometheus/prometheus.yml
         ports:
           - "9090:9090"
       grafana:
         environment:
           - GF_PATHS_PROVISIONING=/etc/grafana/provisioning
           - GF_AUTH_ANONYMOUS_ENABLED=true
           - GF_AUTH_ANONYMOUS_ORG_ROLE=Admin
         entrypoint:
           - sh
           - -euc
           - |
             mkdir -p /etc/grafana/provisioning/datasources
             cat <<EOF > /etc/grafana/provisioning/datasources/ds.yaml
             apiVersion: 1
             datasources:
             - name: Loki
               type: loki
               access: proxy
               orgId: 1
               url: http://loki:3100
               basicAuth: false
               isDefault: false
               version: 1
               editable: false
             - name: Prometheus
               type: prometheus
               orgId: 1
               url: http://prometheus:9090
               basicAuth: false
               isDefault: true
               version: 1
               editable: false
             EOF
             /run.sh
         image: grafana/grafana:11.0.0
         ports:
           - "3000:3000"
  3. 要启动本地 Grafana 实例,请运行以下命令。

    bash
     docker compose up -d

    注意

    如果在启动 Docker 容器时遇到以下错误:docker: 'compose' is not a docker command,请使用命令 docker-compose up 启动 Docker 容器。

  4. 在浏览器中打开https://:3000 以访问 Grafana UI。

配置 Alloy

设置好本地 Grafana 实例后,下一步是配置 Alloy。您可以在 config.alloy 文件中使用组件来告诉 Alloy 您想要抓取哪些日志、如何处理这些数据以及将数据发送到何处。

示例在单个主机上运行,因此您可以在笔记本电脑或虚拟机上运行它们。您可以使用 config.alloy 文件尝试这些示例并进行实验。

创建一个 config.alloy 文件

在当前工作目录中创建一个 config.alloy 文件。

bash
touch config.alloy

第一个组件:日志文件

将以下组件配置复制并粘贴到文件顶部。

alloy
 local.file_match "local_files" {
     path_targets = [{"__path__" = "/var/log/*.log"}]
     sync_period = "5s"
 }

此配置创建了一个 local.file_match 名为 local_files 的组件,该组件执行以下操作

  • 它告诉 Alloy 源自哪些文件。
  • 它每隔 5 秒检查一次新文件。

第二个组件:抓取

将以下组件配置复制并粘贴到 config.alloy 文件中上一个组件的下方

alloy
  loki.source.file "log_scrape" {
    targets    = local.file_match.local_files.targets
    forward_to = [loki.process.filter_logs.receiver]
    tail_from_end = true
  }

此配置创建了一个 loki.source.file 名为 log_scrape 的组件,该组件执行以下操作

  • 它连接到 local_files 组件作为其源或目标。
  • 它将其抓取的日志转发到名为 filter_logs 的另一个组件的接收器。
  • 它提供额外的属性和选项,可以从末尾 tail 日志文件,这样您就不会摄取整个日志文件历史记录。

第三个组件:过滤非必要的日志

在将非必要日志发送到数据源之前对其进行过滤可以帮助您管理日志量以降低成本。

以下示例演示了如何在将日志发送到 Loki 之前过滤或丢弃它们。

将以下组件配置复制并粘贴到 config.alloy 文件中上一个组件的下方

alloy
  loki.process "filter_logs" {
    stage.drop {
        source = ""
        expression  = ".*Connection closed by authenticating user root"
        drop_counter_reason = "noisy"
      }
    forward_to = [loki.write.grafana_loki.receiver]
    }

loki.process 组件允许您转换、过滤、解析和丰富日志数据。在此组件中,您可以定义一个或多个处理阶段,以指定在存储或转发日志条目之前如何处理它们。

此配置创建了一个 loki.process 名为 filter_logs 的组件,该组件执行以下操作

  • 它接收来自默认 log_scrape 组件抓取的日志条目。
  • 它使用 stage.drop 块来定义从抓取日志中丢弃的内容。
  • 它使用 expression 参数来识别要丢弃的特定日志条目。
  • 它使用可选的字符串标签 drop_counter_reason 来显示丢弃日志条目的原因。
  • 它将处理后的日志转发到名为 grafana_loki 的另一个组件的接收器。

loki.process 文档提供了有关处理日志的更全面信息。

第四个组件:将日志写入 Loki

将此组件配置复制并粘贴到 config.alloy 文件中上一个组件的下方。

alloy
  loki.write "grafana_loki" {
    endpoint {
      url = "https://:3100/loki/api/v1/push"

      // basic_auth {
      //  username = "admin"
      //  password = "admin"
      // }
    }
  }

这个最终组件创建了一个 loki.write 名为 grafana_loki 的组件,它指向 https://:3100/loki/api/v1/push

这就完成了简单的配置流水线。

提示

basic_auth 块被注释掉了,因为本地的 docker compose 技术栈不需要它。示例中包含它,是为了展示如何在其他环境中配置认证。有关更多认证选项,请参阅 loki.write 组件参考。

使用此配置,Alloy 直接连接到在 Docker 容器中运行的 Loki 实例。

重新加载配置

  1. 将本地 config.alloy 文件复制到默认的 Alloy 配置文件位置。

    macos
    sudo cp config.alloy $(brew --prefix)/etc/alloy/config.alloy
    linux
    sudo cp config.alloy /etc/alloy/config.alloy
  2. 调用 /-/reload 端点,告诉 Alloy 重新加载配置文件,而无需重启系统服务。

    bash
     curl -X POST https://:12345/-/reload

    提示

    此步骤使用 localhost 端口 12345 上的 Alloy UI。如果您选择在 Docker 容器中运行 Alloy,请确保使用 --server.http.listen-addr=0.0.0.0:12345 参数。如果您不使用此参数,则 调试 UI 将无法在 Docker 容器外部访问。

  3. 可选:您可以重启 Alloy 系统服务并加载配置文件。

macos
brew services restart alloy
linux
sudo systemctl reload alloy

在 Alloy UI 中检查您的配置

在浏览器中打开https://:12345 并点击顶部的Graph(图表)选项卡。图表应类似于以下内容

Your configuration in the Alloy UI

Alloy UI 向您展示了使用 Alloy 组件配置构建的流水线的可视化表示。

您可以看到组件状态良好,并且已准备好在 Grafana 中探索日志。

登录 Grafana 并探索 Loki 日志

在浏览器中打开https://:3000/explore 访问 Grafana 中的Explore(探索)功能。

选择 Loki 作为数据源,然后点击Label Browser(标签浏览器)按钮,选择 Alloy 已发送到 Loki 的文件。

在在这里您可以看到日志按预期流向 Loki,端到端配置成功。

Logs reported by Alloy in Grafana

总结

您已安装并配置了 Alloy,并将本地主机的日志发送到本地 Grafana 技术栈。

下一教程 中,您将了解更多关于配置概念和指标的信息。