• 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 集群
    
    • 1
    • 2
    • 3
    • 4

    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   
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    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
      
      • 1
      • 2
      • 3
      • 4
      • 5
    4. fluent-bit 添加字段
      如果需要加入字段,可以通过 FILTER 的modify 模块来添加字段,例如给不同的集群加上对应的 cluster 信息,那么可以用如下方式

      [FILTER]
          Name modify
          Match kube.*
          Add cluster cbbfe1db71b324387ab4fc47d4f208301
      
      • 1
      • 2
      • 3
      • 4

      加入成功后 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
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9

    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的日志收集方案

  • 相关阅读:
    深入理解算法的时间复杂度
    SpringCloud 远程通信【OpenFeign】
    REDIS三主三从集群搭建笔记(redis版本5.0.8)
    热噪声 Thermal noise
    OpenCV开发笔记(七十七):相机标定(二):通过棋盘标定计算相机内参矩阵矫正畸变摄像头图像
    Java 18新特性:开启Java编程的新篇章
    paddle dataset
    JavaScript基础语法(运算符)
    记一次 .NET 某打印服务 非托管内存泄漏分析
    配置.ssh功能
  • 原文地址:https://blog.csdn.net/u011127242/article/details/126452828