fluent-bit入门

一、为什么选择fluent-bit

fluentd内存使用大于60MB

fluent-bit内存使用约等于1MB

二、工作流程

在这里插入图片描述

日志通过数据管道从数据源发送到目的地,一个数据管道可以由 Input、Parser、Filter、Buffer、Routing、Output 等组成。

  • Input 插件:用于从数据源抽取数据,一个数据管道中可以包含多个 Input。
  • Parser 组件:负责将 Input 抽取的非结构化数据转化为标准的结构化数据,每个 Input 均可以定义自己的 Parser。
  • Filter 插件:负责对格式化数据进行过滤和修改。一个数据管道中可以包含多个 Filter,多个 Filter 执行顺序与配置文件中的顺序一致。
  • Buffer 组件:用户缓存经过 Filter 处理的数据,默认情况下Buffer把Input插件的数据缓存到内存中,直到路由传递到output为止。
  • Routing 组件:将 Buffer 中缓存的数据路由到不同的 Output。
  • Output 插件:负责将数据发送到不同的目的地,一个数据管道中可以包含多个 Output

三、配置说明

3.1. fluent-bit.conf 配置

flient-bit.conf 存储层配置全局环境配置。

[SERVICE]
    # 刷新output输出的时间间隔,单位秒
    Flush         1
   # 日志级别,可设置为(error/warning/info/debug/trace)
    Log_Level     info
   # 是否守护运行
    Daemon        off
    # 指定配置parse的配置文件
    Parsers_File  parsers.conf
    # 是否启动HTTP Server
    HTTP_Server   On
   # HTTP Server 监听Host
    HTTP_Listen   0.0.0.0
    # HTTP Server 监听Port
    HTTP_Port     2020

# 引用 input-kubernetes.conf
@INCLUDE input-kubernetes.conf
# 引用 filter-kubernetes.conf
@INCLUDE filter-kubernetes.conf
# 引用 filter-modify.conf
@INCLUDE filter-modify.conf
# 引用 output-kafka.conf
@INCLUDE output-kafka.conf 

3.2. parse.conf 配置

parse.conf 配置了解析 INPUT 的 parser,Parse 组件主要是将非结构化消息转换为结构化消息。

[PARSER]
    Name   nginx
    Format regex
    Regex ^(?<remote>[^ ]*) (?<host>[^ ]*) (?<user>[^ ]*) \[(?<time>[^\]]*)\] "(?<method>\S+)(?: +(?<path>[^\"]*?)(?: +\S*)?)?" (?<code>[^ ]*) (?<size>[^ ]*)(?: "(?<referer>[^\"]*)" "(?<agent>[^\"]*)")?$
    Time_Key time
    Time_Format %d/%b/%Y:%H:%M:%S %z

[PARSER]
    Name   json
    Format json
    Time_Key time
    Time_Format %d/%b/%Y:%H:%M:%S %z

[PARSER]
    # 注高版本k8s可能需要使用cri PARSER
    Name        docker
    Format      json
    Time_Key    time
    Time_Format %Y-%m-%dT%H:%M:%S.%L
    Time_Keep   On
    # 与FILTER 阶段中Merge_Log=On 效果类似,解析log字段的json内容,但无法提到根层级
    #Decode_Field_As escaped_utf8 kubernetes do_next
    #Decode_Field_As json kubernetes

3.3. input.conf 配置

input-kubernetes.conf 配置 fluent-bit 具体采集哪些日志(Nginx Ingress、业务标准输出日志、节点系统日志等),以及采集的具体参数。

采集ingress access日志,目前不区分access和error日志,后面通过filter插件分离
[INPUT]
    # 使用 tail 插件
    Name              tail
    # Tag 标识数据源,用于后续处理流程Filter,output时选择数据
    Tag               ingress.*
    # Nginx Ingress 日志采集路径,注:高版本可能需要修改为 /var/log/containers/ingress-nginx-controller*.log
    Path              /var/log/containers/nginx-ingress-controller*.log
    # 使用 docker parser,注:高版本k8s可能需要使用cri PARSER
    Parser            json
    # 指定监控的文件名及offsets持久化的数据库
    DB                /var/log/flb_ingress.db
    # 指定tail插件使用的最大内存,如果达到限制,插件会停止采集,刷新数据后会恢复
    Mem_Buf_Limit     15MB
    # 初始buffer size
    Buffer_Chunk_Size 32k
    # 每个文件的最大buffer size
    Buffer_Max_Size   64k
    # 跳过长度大于 Buffer_Max_Size 的行,Skip_Long_Lines 若设为Off遇到超过长度的行会停止采集        
    Skip_Long_Lines   On
    # 监控日志文件 refresh 间隔
    Refresh_Interval  10
    # 采集文件没有数据库偏移位置记录的,从文件的头部开始读取,日志文件较大时会导致fluent内存占用率升高出现oomkill
    #Read_from_Head    On
[INPUT]
    Name              tail
    Tag               kafka-auth-48
    Path              /etc/td-agent-bit/auth/authlogiclog_*_%Y-%m-%d_%H.log
    Parser            json
    DB                /var/log/authlogiclog.log.pos
    Mem_Buf_Limit     15MB
    Buffer_Chunk_Size 32k
    Buffer_Max_Size   64k
    Skip_Long_Lines   On
    Refresh_Interval  10

3.4. filter-modify.conf 配置

filter-modify.conf 主要是修改和调整日志字段。

nest过滤器此处主要是对包含pod_name的日志,在其字段中追加kubernetes_前缀
[FILTER]
    Name         nest
    Match        *
    Wildcard     pod_name
    Operation    lift
    Nested_under kubernetes
    Add_prefix   kubernetes_

# modify过滤器此处主要是调整部分kubernetes元数据字段名,同时追加一些额外的字段
[FILTER]
    # 使用modify过滤器
    Name            modify
    # 匹配所有INPUT
    Match           *
    # 将stream字段重命名为_source_
    Rename          stream _source_
    # 将log字段重命名为_log_
    Rename          log _log_
    # 将kubernetes_host字段重命名为_node_name_
    Rename          kubernetes_host _node_name_
    # 将kubernetes_namespace_name字段重命名为_namespace_
    Rename          kubernetes_namespace_name _namespace_
    # 将kubernetes_container_name字段重命名为_container_name_
    Rename          kubernetes_container_name _container_name_
    # 将kubernetes_pod_name字段重命名为_pod_name_
    Rename          kubernetes_pod_name _pod_name_
    # 移除所有匹配kubernetes_的字段
    Remove_wildcard kubernetes_
    # 追加_cluster_配置,其值为fluent-bit daemonset中配置的CLUSTER_NAME环境变量
    Add             _cluster_ ${CLUSTER_NAME}
    # 追加_log_agent_配置,其值为fluent-bit daemonset中配置的HOSTNAME环境变量
    Add             _log_agent_ ${HOSTNAME}
    # 追加_node_ip_配置,其值为fluent-bit daemonset中配置的NODE_IP环境变量
    Add             _node_ip_ ${NODE_IP}

3.5. output-kafka.conf 配置

output-kafka.conf 主要定义日志如何推送到 Kafka。

此处kafka output插件将Nginx Ingress access日志推送到Kafka
[OUTPUT]
    # 使用kafka插件
    Name              kafka
    # 匹配Nginx access日志
    Match             kafka.*
    # 指定Kafka Brokers地址
    Brokers           ${KAFKA_BROKERS}
    # 指定Kafka topic,如果需要推送到多个topic,多个topic通过','分隔
    Topics            ingress-stdout-logs-${CLUSTER_NAME}
    # 将Timestamp_Key设置为_time_,原默认值为@timestamp
    Timestamp_Key     _time_
    # 指定时间戳转成成的时间字符串格式
    Timestamp_Format  iso8601
    # 设置为false表示不限制重试次数
    Retry_Limit       false
    # 当kafka结束空闲连接时,隐藏"Receive failed: Disconnected"报错
    rdkafka.log.connection.close false
    # Kafka生产者队列中总消息容量最大值,此处设置为10MB,producer buffer is not included in http://fluentbit.io/documentation/0.12/configuration/memory_usage.html#estimating
    rdkafka.queue.buffering.max.kbytes 10240
    # Kafka生产者在leader已成功收到的数据并得到确认后才发送下一条message。
    rdkafka.request.required.acks 1

[OUTPUT]
    Name              kafka
    Match             ingress_stderr.*
    Brokers           ${KAFKA_BROKERS}
    Topics            ingress-stderr-logs-${CLUSTER_NAME}
    Timestamp_Key     _time_
    Timestamp_Format  iso8601
    Retry_Limit       false
    rdkafka.log.connection.close false
    rdkafka.queue.buffering.max.kbytes 10240
    rdkafka.request.required.acks 1

3.6. output-es.conf 配置

output-es.conf 主要定义日志如何推送到 es。

[OUTPUT]
    Name                es
    Match               kafka-*-48
    Host                172.16.1.126
    Port                9200
    logstash_format     true
    logstash_prefix     kbilogs
    logstash_dateformat logics-allinone-48.%Y.%m.%d

附录

官网:https://fluentbit.io/

配置参考:https://clickvisual.net/zh/clickvisual/07collect/fluent-bit-configuration-reference.html#_1-%E7%8E%AF%E5%A2%83%E5%87%86%E5%A4%87

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是使用Ansible部署Fluent Bit的步骤: 1. 安装Ansible 在部署Fluent Bit之前,需要在管理节点上安装Ansible。可以使用以下命令在Debian/Ubuntu系统上安装Ansible: ``` $ sudo apt update $ sudo apt install ansible ``` 在CentOS/RHEL系统上安装Ansible: ``` $ sudo yum install epel-release $ sudo yum install ansible ``` 2. 创建Ansible playbook 创建一个Ansible playbook来安装和配置Fluent Bit。在此过程中,您需要指定Fluent Bit的配置文件和输入源。 以下是一个示例playbook: ``` - hosts: fluentbit_servers become: yes tasks: - name: Install Fluent Bit apt: name: fluent-bit state: present - name: Configure Fluent Bit copy: src: /path/to/fluent-bit.conf dest: /etc/fluent-bit/fluent-bit.conf - name: Start Fluent Bit service: name: fluent-bit state: started ``` 在此playbook中,'fluentbit_servers'是您要在其上部署Fluent Bit的服务器的名称或IP地址。还要将'/path/to/fluent-bit.conf'替换为Fluent Bit配置文件的实际路径。 3. 运行Ansible playbook 运行上述playbook以安装和配置Fluent Bit: ``` $ ansible-playbook fluentbit.yml ``` 在运行此命令之前,请确保已将Fluent Bit配置文件复制到正确的位置,并且在服务器上已安装了Fluent Bit软件包。 4. 验证Fluent Bit 一旦Fluent Bit已安装和配置,您可以使用以下命令检查它是否正在运行: ``` $ sudo systemctl status fluent-bit ``` 此命令应显示Fluent Bit服务的状态信息。如果一切正常,您应该看到“active (running)”状态。 此外,您还可以使用以下命令检查Fluent Bit是否正在接收和处理数据: ``` $ sudo tail -f /var/log/syslog | grep fluent-bit ``` 此命令应显示Fluent Bit正在处理的日志消息。 这就是使用Ansible部署Fluent Bit的步骤。请记住,在实际环境中,您需要根据自己的需求和环境进行自定义配置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值