菜单
文档breadcrumb arrow Grafana Lokibreadcrumb arrow 发送数据breadcrumb arrow Grafana Alloybreadcrumb arrow 使用 Alloy 将 OpenTelemetry 日志发送到 Loki
开源

使用 Alloy 将 OpenTelemetry 日志发送到 Loki

Alloy 原生支持接收 OpenTelemetry 格式的日志。这使您可以将使用 OpenTelemetry 插桩的应用程序日志发送到 Alloy,然后由 Alloy 将其发送到 Loki 进行存储并在 Grafana 中可视化。在此示例中,我们将使用 3 个 Alloy 组件来实现此目的

  • OpenTelemetry 接收器:此组件将通过 HTTP 和 gRPC 接收 OpenTelemetry 格式的日志。
  • OpenTelemetry 处理器:此组件将接受来自其他 otelcol.* 组件的遥测数据,并将其放入批次中。批处理可以提高数据的压缩率,并减少传输数据所需的出站网络请求数量。
  • OpenTelemetry 导出器:此组件将接受来自其他 otelcol.* 组件的遥测数据,并使用 OTLP HTTP 协议通过网络写入。我们将使用此导出器将日志发送到 Loki 原生 OTLP 端点。

依赖

开始之前,请确保您拥有以下内容才能运行演示

  • Docker
  • Docker Compose

提示

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

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

Interactive

Grafana Killercoda 仓库中提供反馈、报告错误和提出问题。

场景

在此场景中,我们有一个名为 Carnivorous Greenhouse 的微服务应用程序。此应用程序包含以下服务

  • 用户服务:管理应用程序的用户数据和身份验证。例如创建用户和登录。
  • 植物服务:管理新植物的创建,并在创建新植物时更新其他服务。
  • 模拟服务:为每种植物生成传感器数据。
  • Websocket 服务:管理应用程序的 websocket 连接。
  • Bug 服务:一个服务,启用后会随机导致服务失败并生成额外日志。
  • 主应用程序:连接所有服务的主应用程序。
  • 数据库:存储用户和植物数据的数据库。

每个服务都使用 OpenTelemetry SDK 生成日志,并以 OpenTelemetry 格式导出到 Alloy。然后 Alloy 摄取日志并将其发送到 Loki。我们将配置 Alloy 摄取 OpenTelemetry 日志,将其发送到 Loki,并在 Grafana 中查看日志。

步骤 1:环境设置

在此步骤中,我们将通过克隆包含我们演示应用程序的仓库并使用 Docker Compose 启动我们的可观测性堆栈来设置环境。

  1. 首先,克隆包含我们演示应用程序的仓库

    bash
    git clone -b microservice-otel  https://github.com/grafana/loki-fundamentals.git
  2. 接下来,我们将使用 Docker Compose 启动我们的可观测性堆栈

    bash
    docker compose -f loki-fundamentals/docker-compose.yml up -d

    这将启动以下服务

    console
    ✔ Container loki-fundamentals-grafana-1  Started                                                        
    ✔ Container loki-fundamentals-loki-1     Started                        
    ✔ Container loki-fundamentals-alloy-1    Started

我们将访问两个 UI 界面

步骤 2:配置 Alloy 摄取 OpenTelemetry 日志

要配置 Alloy 摄取 OpenTelemetry 日志,我们需要更新 Alloy 配置文件。首先,我们将更新 config.alloy 文件以包含 OpenTelemetry 日志配置。

打开您的代码编辑器并找到 config.alloy 文件

Grafana Alloy 需要一个配置文件来定义组件及其关系。配置文件使用 Alloy 配置语法编写。我们将在该配置文件中构建整个可观测性流水线。首先,我们将在代码编辑器中打开 config.alloy 文件

  1. 在您选择的代码编辑器中打开 loki-fundamentals 目录。
  2. loki-fundamentals 目录(顶层目录)中找到 config.alloy 文件。
  3. 单击 config.alloy 文件以在代码编辑器中打开它。

您将把以下所有三个配置片段复制到 config.alloy 文件中。

通过 gRPC 和 HTTP 接收 OpenTelemetry 日志

首先,我们将配置 OpenTelemetry 接收器。otelcol.receiver.otlp 通过 HTTP 和 gRPC 接收 OpenTelemetry 格式的日志。我们将使用此接收器接收 Carnivorous Greenhouse 应用程序的日志。

现在将以下配置添加到 config.alloy 文件中

alloy
 otelcol.receiver.otlp "default" {
   http {}
   grpc {}

   output {
     logs    = [otelcol.processor.batch.default.input]
   }
 }

在此配置中

  • http:接收器的 HTTP 配置。此配置用于通过 HTTP 接收 OpenTelemetry 格式的日志。
  • grpc:接收器的 gRPC 配置。此配置用于通过 gRPC 接收 OpenTelemetry 格式的日志。
  • output:日志转发到的处理器列表。在此例中,我们将日志转发到 otelcol.processor.batch.default.input

有关 otelcol.receiver.otlp 配置的更多信息,请参阅 OpenTelemetry 接收器 OTLP 文档

使用 OpenTelemetry 处理器创建日志批次

接下来,我们将配置一个 OpenTelemetry 处理器。otelcol.processor.batch 接受来自其他 otelcol 组件的遥测数据,并将其放入批次中。批处理可以提高数据的压缩率,并减少传输数据所需的出站网络请求数量。此处理器支持基于大小和时间的批处理。

现在将以下配置添加到 config.alloy 文件中

alloy
otelcol.processor.batch "default" {
    output {
        logs = [otelcol.exporter.otlphttp.default.input]
    }
}

在此配置中

  • output:日志转发到的接收器列表。在此例中,我们将日志转发到 otelcol.exporter.otlphttp.default.input

有关 otelcol.processor.batch 配置的更多信息,请参阅 OpenTelemetry 处理器 Batch 文档

使用 OpenTelemetry 导出器将日志导出到 Loki

最后,我们将配置 OpenTelemetry 导出器。otelcol.exporter.otlphttp 接受来自其他 otelcol 组件的遥测数据,并使用 OTLP HTTP 协议通过网络写入。我们将使用此导出器将日志发送到 Loki 原生 OTLP 端点。

现在将以下配置添加到 config.alloy 文件中

alloy
otelcol.exporter.otlphttp "default" {
  client {
    endpoint = "http://loki:3100/otlp"
  }
}

有关 otelcol.exporter.otlphttp 配置的更多信息,请参阅 OpenTelemetry 导出器 OTLP HTTP 文档

重新加载 Alloy 配置

添加后,保存文件。然后运行以下命令请求 Alloy 重新加载配置

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

新配置将加载。您可以通过检查 Alloy UI 来验证:https://:12345

卡住了?需要帮助?

如果您在创建配置时遇到困难或需要帮助,可以使用已完成的配置文件复制并替换整个 config.alloy

bash
cp loki-fundamentals/completed/config.alloy loki-fundamentals/config.alloy
curl -X POST https://:12345/-/reload

步骤 3:启动 Carnivorous Greenhouse

在此步骤中,我们将启动 Carnivorous Greenhouse 应用程序。要启动应用程序,请运行以下命令

注意

此 docker-compose 文件依赖于 loki-fundamentals_loki docker 网络。如果您尚未启动可观测性堆栈,则需要先启动它。

bash
docker compose -f loki-fundamentals/greenhouse/docker-compose-micro.yml up -d --build 

这将启动以下服务

bash
 ✔ Container greenhouse-db-1                 Started                                                         
 ✔ Container greenhouse-websocket_service-1  Started 
 ✔ Container greenhouse-bug_service-1        Started
 ✔ Container greenhouse-user_service-1       Started
 ✔ Container greenhouse-plant_service-1      Started
 ✔ Container greenhouse-simulation_service-1 Started
 ✔ Container greenhouse-main_app-1           Started

启动后,您可以通过 https://:5005 访问 Carnivorous Greenhouse 应用程序。通过以下方式与应用程序互动来生成一些日志

  • 创建用户
  • 登录
  • 创建一些要监控的植物
  • 启用 bug 模式以激活 bug 服务。这将导致服务失败并生成额外日志。

最后,要在 Loki 中查看日志,请导航到 Grafana 的 Loki Logs Explore 视图:https://:3000/a/grafana-lokiexplore-app/explore

总结

在此示例中,我们配置了 Alloy 摄取 OpenTelemetry 日志并将其发送到 Loki。这是一个简单的示例,演示如何使用 Alloy 将使用 OpenTelemetry 插桩的应用程序的日志发送到 Loki。下一步去哪里?

进一步阅读

有关 Grafana Alloy 的更多信息,请参阅以下资源

完整的指标、日志、追踪和剖析示例

如果您想使用包含 Mimir、Loki、Tempo 和 Grafana 的演示,您可以使用 Grafana 指标、日志、追踪和剖析介绍Intro-to-mltp 提供了一个独立的学习环境,用于了解 Mimir、Loki、Tempo 和 Grafana。

该项目包含每个组件的详细解释以及单实例部署的带注释配置。intro-to-mltp 中的数据也可以推送到 Grafana Cloud。