使用 Fluent Bit 发送日志到 Loki 的教程
在本教程中,你将学习如何使用 Fluent Bit 将日志发送到 Loki。Fluent Bit 是一个轻量级且快速的日志处理器和转发器,可以收集、处理日志并将其传送到各种目的地。我们将使用官方的 Fluent Bit Loki 输出插件来发送日志到 Loki。
依赖项
开始之前,请确保已安装以下演示所需的组件
- Docker
- Docker Compose
提示
或者,你可以在我们的交互式学习环境中尝试此示例:使用 Fluent Bit 发送日志到 Loki 的教程。
这是一个完全配置好的环境,所有依赖项已预装。
请在 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 来设置环境。
首先,克隆包含演示应用的仓库
git clone -b fluentbit-official https://github.com/grafana/loki-fundamentals.git
接下来,我们将使用 Docker Compose 启动可观测性 Stack
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-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
文件。
- 在你选择的代码编辑器中打开
loki-fundamentals
目录。 - 在
loki-fundamentals
目录(顶级目录)中找到fluent-bit.conf
文件。 - 点击
fluent-bit.conf
文件,在代码编辑器中打开它。
你将所有配置代码片段复制到 fluent-bit.conf
文件中。
接收 Fluent Bit 协议日志
第一步是配置 Fluent Bit 接收来自 Carnivorous Greenhouse 应用的日志。由于该应用使用了 Fluent Bit 日志框架进行插桩,它将使用 forward 协议(Fluent Bit 特有的)发送日志。我们将使用 forward
输入插件来接收来自应用的日志。
现在将以下配置添加到 fluent-bit.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
文件中
[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
文件,包含以下配置:
{
"service": "service_name",
"instance_id": "instance_id"
}
此配置将 service
字段映射到 Loki 标签 service_name
,并将 instance_id
字段映射到 Loki 标签 instance_id
。
重新加载 Fluent Bit 配置
将配置添加到 fluent-bit.conf
文件后,你需要重新加载 Fluent Bit 配置。要重新加载配置,运行以下命令:
docker restart loki-fundamentals-fluent-bit-1
要验证配置是否成功加载,你可以运行以下命令检查 Fluent Bit 日志:
docker logs loki-fundamentals-fluent-bit-1
遇到困难?需要帮助?
如果你遇到困难或需要帮助创建配置,可以使用已完成的配置文件复制并替换整个 config.alloy
。
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,需要先启动它。
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 日志探索视图: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。