前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kubernetes集群环境下fluentd日志收集方案介绍

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

作者头像
用户5166556
发布2020-06-15 11:21:36
1.6K0
发布2020-06-15 11:21:36
举报

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

1、介绍

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

2、对比

使用fluentd日志收集之前:

使用fluentd日志收集之后:

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

3、fluentd和fluent-bit介绍

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

总结下

  • Fluentd是一个集数据的收集、过滤、聚合处理、转发、接收为一体数据收集器。
  • Fluend-bit是Fluentd的精华版本,纯C编写、大小450kb,更轻量级,主要支持数据的收集和处理功能。

4、收集步骤

其中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服务端接收日志配置
<source>

   @type forward 

  port 24224

</source>

<source> 

  @type http 

  port 9880

</source>

<match nginx*>

 #匹配有tag为mem的类型 

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

</match>

<match nginx*> 

   @type file 

   path /data/log/fluent/access 

   <format> 

      @type single_value 

      message_key log 

      add_newline true 

   </format> 

   <buffer> 

       @type file 

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

       flush_interval 1m 

       flush_at_shutdown true 

       flush_mode interval 

    </buffer>

</match>

7、总结

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-01-17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档