前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >轻量级日志收集转发 | fluent-bit配置详解(二)

轻量级日志收集转发 | fluent-bit配置详解(二)

作者头像
用户5166556
发布2020-06-15 11:10:25
6.2K2
发布2020-06-15 11:10:25
举报

"本文主要对fluent-bit 1.3版本配置做详细介绍,关注后回复【pdf】获得文档"

1、回顾

随着集群规模不断扩大,日志收集问题将一直萦绕在我们耳边,前段时间我用五篇文章安利了使用fluentd及fluent-bit好处,具体可以参考如下链接:

下面我就直接介绍fluent-bit整体收集架构和插件,如果对整体有不理解的部分,可以参考如上链接。

2、配置介绍

配置文件必须足够灵活以适应任何配置需求,他们必须保持一定的可读性。

fluent-bit扩展了具有特定内置功能的配置文件。从fluent-bit 0.12开始,可用的命令列表如下所示:

Commands

Prototype

Description

@INCLUDE

@INCLUDE FILE

包含配置文件

@SET

@SET  KEY=VAL

设置环境变量

2.1、 Include File文件包含

为了避免复杂的长配置文件,我们可以把一个配置文件拆分为不同的配置文件,然后在主配置文件中包含其它配置文件。从fluent-bit 0.12版本开始,我们可以按照如下进行使用。

代码语言:javascript
复制
@INCLUDE somefile.conf

配置读取器将尝试打开somefile.conf ,如果找不到打开当前相对路径下的,例如:

  1. 主配置文件路径:/tmp/main.conf;
  2. 包含的文件:somefile.conf;
  3. fluent-bit将尝试somefile.conf,如果找不到那么将到/tmp/somefile.conf打开此文件。

@INCLUDE只能在顶部靠左侧使用该指令,不能在p内部使用

如下所示支持通配符(*)包含多个配置文件:

代码语言:javascript
复制
@INCLUDE input_*.conf

2.2、环境变量配置功能

fluent-bit支持通过key关联的任何值中使用环境变量。变量区分大小写,可以按照如下格式使用:

代码语言:javascript
复制
${MY_VARIABLE}

fluent-bit启动时,配置读取器会尝试读取${MY_VARIABLE}的任何请求,并将其解析成值。

1. shell终端设置

例如创建以下配置文件fluent-bit.conf

代码语言:javascript
复制
[SERVICE]
    Flush        1
    Daemon       Off
    Log_Level    info


[INPUT]
    Name cpu
    Tag  cpu.local


[OUTPUT]
    Name  ${MY_OUTPUT}
    Match *

打开终端并使用环境变量

代码语言:javascript
复制
$ export MY_OUTPUT=stdout

上面改的命令行把 MY_OUTPUT设置为stdout,使用上面创建的配置文件fluent-bit.conf并运行。

如你所见,配置正确,服务正常运行。

代码语言:javascript
复制
$ bin/fluent-bit -c fluent-bit.conf
Fluent-Bit v0.11.0
Copyright (C) Treasure Data


[2017/04/03 12:25:25] [ info] [engine] started
[0] cpu.local: [1491243925, {"cpu_p"=>1.750000, "user_p"=>1.750000, "system_p"=>0.000000, "cpu0.p_cpu"=>3.000000, "cpu0.p_user"=>2.000000, "cpu0.p_system"=>1.000000, "cpu1.p_cpu"=>0.000000, "cpu1.p_user"=>0.000000, "cpu1.p_system"=>0.000000, "cpu2.p_cpu"=>4.000000, "cpu2.p_user"=>4.000000, "cpu2.p_system"=>0.000000, "cpu3.p_cpu"=>1.000000, "cpu3.p_user"=>1.000000, "cpu3.p_system"=>0.000000}]

2. 文件内部设置

如果在文件内部全局声明,@SET指令只能在每行的开始使用,意味着不能在p内部使用。具体如下所示:

代码语言:javascript
复制
@SET my_input=cpu
@SET my_output=stdout


[SERVICE]
    Flush 1


[INPUT]
    Name ${my_input}


[OUTPUT]
    Name ${my_output}

3、服务器压力配置

如果获取的日志比发送的日志的速度更快,很大程度上会增加服务器压力,常见的情况是,把一个大日志文件发送到服务器后台,这需要一定时间来响应,这会产生服务器压力,从而导致服务器消耗更多的内存。为了避免服务器压力fluent bit引擎实现了一种输入插件读取数据量的限制。这个限制是通过Mem_Buf_Limit来控制。

此选项应用于所有输入插件,默认情况下是禁用的

如果在使用过程中,超过内存限制,fluent-bit引擎会进入自我保护状态,不会接收更多的数据,当内存释放后,再进行数据接收。并非所有的插件都实现了暂停和恢复操作,如上所述,这些回调都是插件的通知机制。实现良好的是input tail插件,当暂停回调触发时,将停止收集数据,当重新回调时,它会开始数据收集。

那么我们如何估算内存使用大小呢?

在某些场景和环境下,对于fluent-bit能够使用多少内存,这个限制是有一定必要性的,为了进行估算,我们需要对Mem_Buf_Limit变量进行设置。

如果需要处理10M数据,我们需要考虑最坏的情况,输出插件可能需要20M(fluent-bit能够内部处理二进制数据格式,故要尽量少的在fluent-bit进行数据处理),在数据没有到达influxDB或者ES时,会缓存在自己的缓冲区内部,因此至少需要30*1.2=36M。

4、Upstream Servers

fluent-bit可以连接到外部服务器传输日志。例如:HTTP、forward、ES等,能够连接到一个节点是正常的,为了实现负载均衡以应付更多的实例,输出插件就必须支持Upstream功能。

当前主要实现了round-robin负载均衡模式,配置如下所示:

Section

Key

Description

UPSTREAM

name

上游名称

NODE

name

节点名称

host

目标IP地址或主机名

port

目标tcp端口

配置文件示例:

以下示例定义了一个称为负载均衡的Upstream,提供给输出插件使用,它注册了三个Node:

  • 节点1:连接到127.0.0.1:43000
  • 节点2:连接到127.0.0.1:44000
  • node-3:使用TLS无需验证即可连接到127.0.0.1:45000。它还定义了称为shared_key的Forward输出所需的特定配置选项。
代码语言:javascript
复制
[UPSTREAM]
    name       forward-balancing


[NODE]
    name       node-1
    host       127.0.0.1
    port       43000


[NODE]
    name       node-2
    host       127.0.0.1
    port       44000


[NODE]
    name       node-3
    host       127.0.0.1
    port       45000
    tls        on
    tls.verify off
    shared_key secret

5、Scheduler 调度器

fluent-bit引擎支持从输入插件获取数据传输到输出插件,调度器每隔一段时间刷新一次数据,刷新完成后会获得三种状态 OK、Retry、Error。

如果返回状态为OK,则表示它能够成功处理并刷新数据;如果返回状态为Error,则意味着发生了不可恢复的错误,引擎不应尝试再次刷新该数据。如果请求重试,引擎将要求调度程序重试以刷新该数据,调度程序将决定在此之前等待几秒钟。

如何配置重试呢?

调度程序提供了一个称为Retry_Limit的简单配置选项,可以在每个输出节上独立设置。此选项允许禁用重试或施加尝试N次的限制,然后在达到该限制后丢弃数据,配置如下所示:

value

Description

Retry_Limit

n

整数值,用于设置允许的最大重试次数。N必须> = 1(默认值:2)

Retry_Limit

False

当Retry_Limit设置为False时,意味着调度程序可以进行的重试次数没有限制。

以下示例配置两个输出,其中HTTP插件具有无限次重试,而Elasticsearch插件具有5次限制:

代码语言:javascript
复制
[OUTPUT]
    Name        http
    Host        192.168.5.6
    Port        8080
    Retry_Limit False


[OUTPUT]
    Name            es
    Host            192.168.5.20
    Port            9200
    Logstash_Format On
    Retry_Limit     5

6、总结

本章主要讲解了基于fluent-bit输入输出等插件附属配置项,通过配置项,可以让fluent-bit更好的运行。下文我会继续分享fluent-bit各个版本对接外部服务有哪些,敬请期待。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-02-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档