使用 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。
这是一个完全配置好的环境,所有依赖项均已安装。
在 Grafana Killercoda 仓库中提供反馈、报告错误和提出问题。
场景
在此场景中,我们有一个名为 Carnivorous Greenhouse 的微服务应用程序。此应用程序包含以下服务
- 用户服务:管理应用程序的用户数据和身份验证。例如创建用户和登录。
- 植物服务:管理新植物的创建,并在创建新植物时更新其他服务。
- 模拟服务:为每种植物生成传感器数据。
- Websocket 服务:管理应用程序的 websocket 连接。
- Bug 服务:一个服务,启用后会随机导致服务失败并生成额外日志。
- 主应用程序:连接所有服务的主应用程序。
- 数据库:存储用户和植物数据的数据库。
每个服务都使用 OpenTelemetry SDK 生成日志,并以 OpenTelemetry 格式导出到 Alloy。然后 Alloy 摄取日志并将其发送到 Loki。我们将配置 Alloy 摄取 OpenTelemetry 日志,将其发送到 Loki,并在 Grafana 中查看日志。
步骤 1:环境设置
在此步骤中,我们将通过克隆包含我们演示应用程序的仓库并使用 Docker Compose 启动我们的可观测性堆栈来设置环境。
首先,克隆包含我们演示应用程序的仓库
git clone -b microservice-otel https://github.com/grafana/loki-fundamentals.git
接下来,我们将使用 Docker Compose 启动我们的可观测性堆栈
docker compose -f loki-fundamentals/docker-compose.yml up -d
这将启动以下服务
✔ Container loki-fundamentals-grafana-1 Started ✔ Container loki-fundamentals-loki-1 Started ✔ Container loki-fundamentals-alloy-1 Started
我们将访问两个 UI 界面
- Alloy 在 https://:12345
- Grafana 在 https://:3000
步骤 2:配置 Alloy 摄取 OpenTelemetry 日志
要配置 Alloy 摄取 OpenTelemetry 日志,我们需要更新 Alloy 配置文件。首先,我们将更新 config.alloy
文件以包含 OpenTelemetry 日志配置。
打开您的代码编辑器并找到 config.alloy
文件
Grafana Alloy 需要一个配置文件来定义组件及其关系。配置文件使用 Alloy 配置语法编写。我们将在该配置文件中构建整个可观测性流水线。首先,我们将在代码编辑器中打开 config.alloy
文件
- 在您选择的代码编辑器中打开
loki-fundamentals
目录。 - 在
loki-fundamentals
目录(顶层目录)中找到config.alloy
文件。 - 单击
config.alloy
文件以在代码编辑器中打开它。
您将把以下所有三个配置片段复制到 config.alloy
文件中。
通过 gRPC 和 HTTP 接收 OpenTelemetry 日志
首先,我们将配置 OpenTelemetry 接收器。otelcol.receiver.otlp
通过 HTTP 和 gRPC 接收 OpenTelemetry 格式的日志。我们将使用此接收器接收 Carnivorous Greenhouse 应用程序的日志。
现在将以下配置添加到 config.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
文件中
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
文件中
otelcol.exporter.otlphttp "default" {
client {
endpoint = "http://loki:3100/otlp"
}
}
有关 otelcol.exporter.otlphttp
配置的更多信息,请参阅 OpenTelemetry 导出器 OTLP HTTP 文档。
重新加载 Alloy 配置
添加后,保存文件。然后运行以下命令请求 Alloy 重新加载配置
curl -X POST https://:12345/-/reload
新配置将加载。您可以通过检查 Alloy UI 来验证:https://:12345。
卡住了?需要帮助?
如果您在创建配置时遇到困难或需要帮助,可以使用已完成的配置文件复制并替换整个 config.alloy
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 网络。如果您尚未启动可观测性堆栈,则需要先启动它。
docker compose -f loki-fundamentals/greenhouse/docker-compose-micro.yml up -d --build
这将启动以下服务
✔ 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。