k8s笔记22--使用fluent-bit采集集群日志

1 介绍

k8s笔记11–基于fluentd-kafka-es的日志收集方案 介绍了使用 fluentd 采集 k8s 集群日志的方法,但 fluentd 使用 CPU & Memory 效率相对较低,因此考虑采用更加轻量级的 fluent-bit 采集集群日志。本文介绍 fluent-bit 的安装,以及写入日志到 es 和 kafka 的具体方法。

2 部署 & 测试

2.1 获取安装 fluent-bit

helm repo add fluent https://fluent.github.io/helm-charts
helm fetch fluent/fluent-bit
tar -zxvf fluent-bit-0.20.5.tgz
解压后可以修改默认的 values.yaml 文件, 按需输出到 es 或者 kafka 集群

2.2 直接采集日志到 es 集群

2.1 copy values.yaml 文件为 values-dev-es.yaml

2.2 修改配置文件 values-dev-es.yaml 输出到 es 集群
在 output 中配置es信息,如下所示:
  ## https://docs.fluentbit.io/manual/pipeline/outputs
  outputs: |
    [OUTPUT]
        Name es
        Match kube.*
        Host 192.xx.xx.71
        Port 9200
        Type _doc
        HTTP_User your_es_user
        HTTP_Passwd your_es_pwd
        Logstash_Format Off
        Retry_Limit False
        Index fluent-bit

2.3 部署到集群
helm -n lens-metrics upgrade --install fluent-bit fluent/fluent-bit -f values-dev-es.yaml

2.4 查看fluent-bit 相关信息
xghome:~$ kubectl -n lens-metrics get ds|grep fluent-bit
fluent-bit      1         1         1       1            1           <none>          5d4h
xghome:~$ kubectl -n lens-metrics get cm|grep fluent-bit
fluent-bit                 2      5d4h
xghome:~$ helm -n lens-metrics list
NAME      	NAMESPACE   	REVISION	UPDATED                                	STATUS  	CHART            	APP VERSION
fluent-bit	lens-metrics	6       	2022-08-16 14:23:55.372423789 +0800 CST	deployed	fluent-bit-0.20.5	1.9.7   

2.5 测试
服务部署完成后,过一段时间就可以在 es 中看到采集的日志,如下所示:
在这里插入图片描述

2.3 直接采集日志到 kafka 集群

3.1 copy values.yaml 文件为 values-dev-kafka.yaml

3.2 修改配置文件 values-dev-kafka.yaml 输出到 kafka 集群
在 output 中配置es信息,如下所示:
  ## https://docs.fluentbit.io/manual/pipeline/outputs
  outputs: |
    [OUTPUT]
        Name        kafka
        Match       *
        Brokers     192.168.2.11:9092
        Topics      k8s-log


3.3 部署到集群
helm -n lens-metrics upgrade --install fluent-bit fluent/fluent-bit -f values-dev-kafka.yaml

3.4 查看 fluent-bit 信息
xghome:~$ kubectl -n lens-metrics get ds|grep fluent-bit
fluent-bit      1         1         0       1            0           <none>          28s
xghome:~$ kubectl -n lens-metrics get cm|grep fluent-bit
fluent-bit                 2      38s
xghome:~$ helm -n lens-metrics list
NAME      	NAMESPACE   	REVISION	UPDATED                                	STATUS  	CHART            	APP VERSION
fluent-bit	lens-metrics	1       	2022-08-21 17:49:01.985449435 +0800 CST	deployed	fluent-bit-0.20.5	1.9.7

3.5 查看 kafka 中 topic 信息
服务部署完成后,过一段时间就可以在 kafka 中看到采集的日志,如下所示:
在这里插入图片描述
当日志采集到 kafka 集群后,我们可以使用 logstash 或者 gohangout 将日志进一步写入到es 集群。具体可以参考如下博文:
elk笔记24–用gohangout替代logstash消费日志
elk笔记5.1–logstash使用

3 注意事项

  1. 若直接向 es 写入数据,需要设置 Logstash_Format Off ,否则会自动生成 logstash-2022.08.16 格式的索引

  2. 默认会采集很多不必要的pod 字段,因此需要 filter,例如 Labels Off 和 Annotations Off 会去掉Label 和 Annotation 信息, 更多内容可以参考 docs.fluentbit.io/manual/pipeline/filters/kubernetes

  3. 使用DaemonSet 部署的agent 默认不会部署在有污点的节点上,例如master节点和用户加污点的节点。为了让这类节点能正常部署上agent,需要在 DaemonSet 中加如下参数(允许任何污点):

    spec:
      template:
        spec:
          tolerations:
            - operator: Exists
    
  4. fluent-bit 添加字段
    如果需要加入字段,可以通过 FILTER 的modify 模块来添加字段,例如给不同的集群加上对应的 cluster 信息,那么可以用如下方式

    [FILTER]
        Name modify
        Match kube.*
        Add cluster cbbfe1db71b324387ab4fc47d4f208301
    

    加入成功后 kafka 里面的数据如下:
    在这里插入图片描述

  5. fluent-bit 过滤掉指定命名空间日志
    如果需要过滤掉某些命名空间日志,只需要在INPUT中增加 Exclude_Path即可,如下过滤掉 monitoring 和 kube-system 命名空间的日志

      inputs: |
        [INPUT]
            Name tail
            Path /var/log/containers/*.log
            Exclude_Path /var/log/containers/*_monitoring_*.log,/var/log/containers/*_kube-system_*.log
            multiline.parser docker, cri
            Tag kube.*
            Mem_Buf_Limit 50MB
            Skip_Long_Lines On
    

4 说明

软件环境:
elk 7.15.2
kafka 7.15.2
k8s 1.23.6
fluent-bit 0.20.5
参考文档:
fluent-bit 官方文档 installation/Kubernetes
fluent-bit 官方文档 outputs/elasticsearch
elk笔记24–用gohangout替代logstash消费日志
elk笔记5.1–logstash使用
k8s笔记11–基于fluentd-kafka-es的日志收集方案

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
以下是使用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的步骤。请记住,在实际环境中,您需要根据自己的需求和环境进行自定义配置。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

昕光xg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值