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

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

  • 1 介绍
  • 2 部署 & 测试
    • 2.1 获取安装 fluent-bit
    • 2.2 直接采集日志到 es 集群
    • 2.3 直接采集日志到 kafka 集群
  • 3 注意事项
  • 4 说明

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 中看到采集的日志,如下所示:
k8s笔记22--使用fluent-bit采集集群日志_第1张图片

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 中看到采集的日志,如下所示:
k8s笔记22--使用fluent-bit采集集群日志_第2张图片
当日志采集到 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 里面的数据如下:
    k8s笔记22--使用fluent-bit采集集群日志_第3张图片

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

你可能感兴趣的:(K8S,&,Docker,Bigdata,kubernetes,k8s日志采集,fluent-bit,elasticsearch,kafka)