菜单
开源

使用 Fluent Bit 发送日志到 Loki 的教程

在本教程中,你将学习如何使用 Fluent Bit 将日志发送到 Loki。Fluent Bit 是一个轻量级且快速的日志处理器和转发器,可以收集、处理日志并将其传送到各种目的地。我们将使用官方的 Fluent Bit Loki 输出插件来发送日志到 Loki。

依赖项

开始之前,请确保已安装以下演示所需的组件

  • Docker
  • Docker Compose

提示

或者,你可以在我们的交互式学习环境中尝试此示例:使用 Fluent Bit 发送日志到 Loki 的教程

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

Interactive

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

场景

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

  • User Service(用户服务):管理应用的用户数据和认证。例如创建用户和登录。
  • Plant Service(植物服务):管理新植物的创建,并在创建新植物时更新其他服务。
  • Simulation Service(模拟服务):为每株植物生成传感器数据。
  • Websocket Service(WebSocket 服务):管理应用的 WebSocket 连接。
  • Bug Service(Bug 服务):启用后,随机导致服务失败并生成额外日志的服务。
  • Main App(主应用):连接所有服务的主要应用。
  • Database(数据库):存储用户和植物数据的数据库。

每个服务都已使用 Fluent Bit 日志框架进行插桩以生成日志。如果你想了解更多关于 Carnivorous Greenhouse 应用如何使用 Fluent Bit 进行插桩的信息,请参考Carnivorous Greenhouse 仓库

步骤 1:环境设置

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

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

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

    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-fluent-bit-1    Started

完成 Fluent Bit 代理配置并将日志发送到 Loki 后,你将能够在 Grafana 中查看日志。要检查 Grafana 是否已运行,请访问以下 URL:https://:3000

步骤 2:配置 Fluent Bit 发送日志到 Loki

要配置 Fluent Bit 接收应用日志,我们需要提供一个配置文件。此配置文件将定义组件及其关系。我们将在该配置文件中构建整个可观测性 Pipeline。

打开你的代码编辑器并找到 fluent-bit.conf 文件

Fluent Bit 需要一个配置文件来定义组件及其关系。配置文件使用 Fluent Bit 配置语法编写。我们将在该配置文件中构建整个可观测性 Pipeline。首先,在代码编辑器中打开 fluent-bit.conf 文件。

  1. 在你选择的代码编辑器中打开 loki-fundamentals 目录。
  2. loki-fundamentals 目录(顶级目录)中找到 fluent-bit.conf 文件。
  3. 点击 fluent-bit.conf 文件,在代码编辑器中打开它。

你将所有配置代码片段复制到 fluent-bit.conf 文件中。

接收 Fluent Bit 协议日志

第一步是配置 Fluent Bit 接收来自 Carnivorous Greenhouse 应用的日志。由于该应用使用了 Fluent Bit 日志框架进行插桩,它将使用 forward 协议(Fluent Bit 特有的)发送日志。我们将使用 forward 输入插件来接收来自应用的日志。

现在将以下配置添加到 fluent-bit.conf 文件中

conf
[INPUT]
    Name              forward
    Listen            0.0.0.0
    Port              24224

在此配置中:

  • Name: 输入插件的名称。在此例中,我们使用的是 forward 输入插件。
  • Listen: 要监听的 IP 地址。在此例中,我们监听所有 IP 地址。
  • Port: 要监听的端口。在此例中,我们监听端口 24224

有关 forward 输入插件的更多信息,请参阅Fluent Bit Forward 文档

使用官方 Loki 输出插件将日志导出到 Loki

最后,我们将配置 Fluent Bit 使用官方 Loki 输出插件将日志导出到 Loki。Loki 输出插件允许你将日志或事件发送到 Loki 服务。它支持使用 Kubernetes 标签、自定义标签键和结构化元数据来丰富数据。

将以下配置添加到 fluent-bit.conf 文件中

conf
[OUTPUT]
    name   loki
    match  service.**
    host   loki
    port   3100
    labels agent=fluent-bit
    label_map_path /fluent-bit/etc/conf/logmap.json

在此配置中:

  • name: 输出插件的名称。在此例中,我们使用的是 loki 输出插件。
  • match: 要匹配的标签。在此例中,我们匹配所有标签为 service.** 的日志。
  • host: Loki 服务的主机名。在此例中,我们使用主机名 loki
  • port: Loki 服务的端口。在此例中,我们使用端口 3100
  • labels: 要添加到日志的额外标签。在此例中,我们添加标签 agent=fluent-bit
  • label_map_path: 标签映射文件的路径。在此例中,我们使用文件 logmap.json

有关 loki 输出插件的更多信息,请参阅Fluent Bit Loki 文档

logmap.json 文件

logmap.json 文件用于将日志字段映射到 Loki 标签。在此教程中,我们预先填充了 logmap.json 文件,包含以下配置:

json
{
"service": "service_name",
"instance_id": "instance_id"
 }

此配置将 service 字段映射到 Loki 标签 service_name,并将 instance_id 字段映射到 Loki 标签 instance_id

重新加载 Fluent Bit 配置

将配置添加到 fluent-bit.conf 文件后,你需要重新加载 Fluent Bit 配置。要重新加载配置,运行以下命令:

bash
docker restart loki-fundamentals-fluent-bit-1

要验证配置是否成功加载,你可以运行以下命令检查 Fluent Bit 日志:

bash
docker logs loki-fundamentals-fluent-bit-1

遇到困难?需要帮助?

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

bash
cp loki-fundamentals/completed/fluent-bit.conf loki-fundamentals/fluent-bit.conf
docker restart loki-fundamentals-fluent-bit-1

步骤 3:启动 Carnivorous Greenhouse

在本步骤中,我们将启动 Carnivorous Greenhouse 应用。要启动该应用,运行以下命令:

注意

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

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 应用。通过以下方式与应用交互来生成一些日志:

  1. 创建用户。
  2. 登录。
  3. 创建几个要监控的植物。
  4. 启用 bug 模式以激活 bug 服务。这将导致服务失败并生成额外日志。

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

总结

在本教程中,你学习了如何使用 Fluent Bit 将日志发送到 Loki。你配置了 Fluent Bit 接收来自 Carnivorous Greenhouse 应用的日志,并使用官方 Loki 输出插件将日志导出到 Loki。接下来何去何从?

延伸阅读

有关 Fluent Bit 的更多信息,请参阅以下资源:

完整的指标、日志、追踪和性能分析示例

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

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