跳到主要内容

FluentBit与Loki集成

介绍

FluentBit 是一个开源的日志处理器和转发器,专为轻量级和高性能设计。Grafana Loki 是一个水平可扩展、高可用的多租户日志聚合系统。将两者结合可以实现高效的日志收集、处理和存储。

在本指南中,我们将学习如何配置 FluentBit 将日志发送到 Loki,并探索一些实际应用场景。

前置条件

在开始之前,请确保您已安装:

  • FluentBit (v1.8或更高版本)
  • Grafana Loki (v2.0或更高版本)

基本配置

1. 安装FluentBit Loki插件

FluentBit默认不包含Loki输出插件,需要单独安装:

bash
fluent-bit -i dummy -o stdout
fluent-bit-gem install fluent-bit-plugin-loki

2. 配置FluentBit

创建一个名为fluent-bit.conf的配置文件:

ini
[SERVICE]
flush 1
log_level info

[INPUT]
name tail
path /var/log/containers/*.log
parser docker
tag kube.*

[FILTER]
name kubernetes
match kube.*
merge_log on

[OUTPUT]
name loki
match *
host loki.example.com
port 3100
labels job=fluentbit
label_keys $kubernetes['namespace_name'],$kubernetes['pod_name'],$kubernetes['container_name']

3. 配置说明

  • INPUT部分:监控容器日志文件
  • FILTER部分:添加Kubernetes元数据
  • OUTPUT部分:配置Loki作为输出目标
备注

label_keys用于从Kubernetes元数据中提取标签,这些标签将成为Loki中的索引。

高级配置

多租户支持

如果需要支持多租户,可以在OUTPUT部分添加租户ID:

ini
[OUTPUT]
name loki
match *
host loki.example.com
port 3100
tenant_id team-1

批量发送配置

优化网络性能的批量发送配置:

ini
[OUTPUT]
name loki
match *
host loki.example.com
port 3100
batch_wait 5s
batch_size 1MB
line_format json
drop_single_key on

实际案例

案例1:Kubernetes日志收集

  1. FluentBit作为DaemonSet运行在每个节点上
  2. 收集所有容器的日志
  3. 添加Kubernetes元数据作为标签
  4. 发送到Loki存储

案例2:多环境日志分离

ini
[OUTPUT]
name loki
match production.*
host loki.example.com
labels env=production

[OUTPUT]
name loki
match staging.*
host loki.example.com
labels env=staging

常见问题排查

问题1:连接失败

警告

如果遇到连接问题,请检查:

  1. Loki服务是否运行
  2. 网络连接是否通畅
  3. 端口是否正确

问题2:标签冲突

Loki对标签有限制,避免使用过多或过大的标签:

ini
label_keys  $kubernetes['namespace_name'],$kubernetes['pod_name']

总结

通过本指南,您已经学会了:

  • 如何安装和配置FluentBit Loki插件
  • 基本的日志收集配置
  • 高级的多租户和批量处理配置
  • 实际应用场景的实现

延伸学习

  1. 尝试配置FluentBit处理不同的日志格式
  2. 探索Loki的查询语言LogQL
  3. 学习如何在Grafana中可视化Loki日志
练习
  1. 设置FluentBit收集系统日志并发送到Loki
  2. 配置不同的标签策略比较查询性能
  3. 尝试使用Grafana创建基于日志的告警