輕量級日誌收集轉發 | fluent-bit配置詳解(二)

"本文主要對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版本開始,我們可以按照如下進行使用。

@INCLUDE somefile.conf

配置讀取器將嘗試打開somefile.conf ,如果找不到打開當前相對路徑下的,例如:

  1. 主配置文件路徑:/tmp/main.conf;

  2. 包含的文件:somefile.conf;

  3. fluent-bit將嘗試somefile.conf,如果找不到那麼將到/tmp/somefile.conf打開此文件。

@INCLUDE只能在頂部靠左側使用該指令,不能在p內部使用

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

@INCLUDE input_*.conf

2.2、環境變量配置功能

fluent-bit支持通過key關聯的任何值中使用環境變量。變量區分大小寫,可以按照如下格式使用:

${MY_VARIABLE}

fluent-bit啓動時,配置讀取器會嘗試讀取${MY_VARIABLE}的任何請求,並將其解析成值。

1. shell終端設置

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

[SERVICE]
    Flush        1
    Daemon       Off
    Log_Level    info


[INPUT]
    Name cpu
    Tag  cpu.local


[OUTPUT]
    Name  ${MY_OUTPUT}
    Match *

打開終端並使用環境變量

$ export MY_OUTPUT=stdout

上面改的命令行把 MY_OUTPUT設置爲stdout,使用上面創建的配置文件fluent-bit.conf並運行。

如你所見,配置正確,服務正常運行。

$ 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內部使用。具體如下所示:

@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輸出所需的特定配置選項。

[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次限制:

[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各個版本對接外部服務有哪些,敬請期待。關注、公衆號後臺回覆【pdf】可獲得詳細文檔。

推薦閱讀:


Kubernetes排障指南

從零搭建Kubernetes下的nignx和tomcat

Kubernetes中如何使用ClusterDNS進行服務發現?

Kubernetes入門培訓(內含PPT)

從Ice到Kubernetes容器技術,微服務架構經歷了什麼?


原創不易,隨手關注或者”在看“,誠摯感謝!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章