Kubernetes集群环境下fluentd日志收集方案介绍

"本文主要介绍了CNCF官方社区轻量级日志收集工具"

1、介绍

前段时间写了一篇日志收集方案,Kubernetes日志收集解决方案有部分读者反馈说,都是中小企业,哪有那么多资源上ELK或者EFK,大数据这一套平台比我自身服务本身耗费资源还要多,再说了,现阶段我的业务不需要格式转换,不需要数据分析,我的日志顶多就是当线上出现问题时,把我的多个节点日志收集起来排查错误。但是在Kubernetes平台上,pod可能被调度到不可预知的机器上,如果把日志存储在当前计算节点上,难免会出现排查问题效率低下,当然我们也可以选用一些共享文件服务器,比如GFS、NFS直接把日志输出到特定日志服务器,这种情况对于单副本服务没有任何问题,但是对于多副本服务,可能会出现日志数据散乱分布问题(因为多个pod中日志输出路径和名称都是一样的),下面我介绍通过CNCF社区推荐的fluentd进行日志收集。

2、对比

使用fluentd日志收集之前:

Kubernetes集群环境下fluentd日志收集方案介绍_第1张图片

使用fluentd日志收集之后:

Kubernetes集群环境下fluentd日志收集方案介绍_第2张图片

看到这张图片之后就被fluentd架构清晰程度吸引了;

3、fluentd和fluent-bit介绍

fluentd是一款开源的日志收集工具。基于ruby和C编写,它拥有非常多的插件,可以满足的我们对各种格式的日志进行收集,过滤,解析等。把日志信息变成我们想要的格式。并且,没有找到满足我们的插件,我们可以自己写插件。fluentd收集日志时,将所有日志看做JSON格式的数据。并且用正则表达式去匹配日志。fluentd自带丰富的日志收集格式。以及可以将日志收集到各种存储的数据库。fluentd有7种类型的插件:输入、解析器、过滤器、输出、格式化程序、存储和缓冲区。

总结下

  • Fluentd是一个集数据的收集、过滤、聚合处理、转发、接收为一体数据收集器。

  • Fluend-bit是Fluentd的精华版本,纯C编写、大小450kb,更轻量级,主要支持数据的收集和处理功能。

4、收集步骤

Kubernetes集群环境下fluentd日志收集方案介绍_第3张图片

其中fluent-bit充当客户端,fluentd充当服务端,客户端定时根据某种特定策略收集日志传递到服务端,服务端存储日志,这一次不在说ES或者Kafaka,而是直接把日志文件集中收集存储磁盘文件中,当然大数据分析和展示工具fluentd本身是支持的,而且fluentd支持高可用配置。

5、收集方式

  • 每个节点以Kubernetes中DaemonSet形式运行fluent-bit,在各个节点进行日志收集,收集完成后发送到fluentd进行统一日志处理和存储。这种方式结构简单清晰,但是收集较为粗略,如果说一个pod的多个副本运行在同一个节点上,可能会出现日志交叉打印问题,当然我们也可以在yaml中配置约束条件,同一个pod调度到不同计算节点,限制这种情况出现。

  • 通过sidercar方式运行fluent-bit,编写业务yaml的同时,把fluentd-bit追加进去,这种收集日志较为详尽,可以收集到pod中container信息,但是会出现跟业务耦合的问题。

具体如何选择还要看业务场景收集日志详细程度。

6、示例

fluentd-bit客户端日志收集配置

[SERVICE]

   Flush 1

   Daemon OFF

   Log_Level debug

[INPUT]

   Name tail

   Path /home/logs/nginx.log

   Db /tmp/ng.db

   Db.sync Full

   Tag ng-log

[OUTPUT]

   Name forward

   Match *

   Host 112.68.7.95

   port 24224

fluentd服务端接收日志配置


  @type forward

  port 24224



  @type http

  port 9880



#匹配有tag为mem的类型

  @type stdout #匹配成功直接标准输出



   @type file

   path /data/log/fluent/access

  

      @type single_value

      message_key log

      add_newline true

  

  

       @type file

       chunk_limit_size 1M # 每隔1分钟写一次日志

       flush_interval 1m

       flush_at_shutdown true

       flush_mode interval

   

7、总结

如上主要讲述了fluentd和fluent-bit通过客户端和服务端配合收集日志的使用过程,在使用过程fluentd和fluent-bit采用原生安装的方式,暂时没有通过Kubernetes pod运行,至于fluentd和fluent-bit的安装和使用过程我会尽快完善补充,敬请关注,也可以加入圈子我们一起讨论。

Kubernetes集群环境下fluentd日志收集方案介绍_第4张图片

推荐阅读:


Kubernetes排障指南

从零搭建Kubernetes下的nignx和tomcat

Kubernetes中如何使用ClusterDNS进行服务发现?

从Ice到Kubernetes容器技术,微服务架构经历了什么?

如何使用docker?


原创不易,随手关注或者”在看“,诚挚感谢!

你可能感兴趣的:(Kubernetes集群环境下fluentd日志收集方案介绍)