fluentd 作为开源的数据收集框架。C/Ruby开发,支持使用JSON文件来统一日志数据。可插拔架构,支持各种不同种类和格式的数据源和数据输出。最后它也同时提供了高可靠和很好的扩展性,fluentd 的性能已在许多大型服务中得到检验。实际上,一个普通的 PC 机一次可以处理18,000 条消息/秒。

Treasure Data, Inc 对该产品提供支持和维护。fluent-bit 是一个用 C 写成的插件式、轻量级、多平台开源日志收集工具。它允许从不同的源收集数据并发送到多个目的地。这个两个日志收集组件完全兼容docker 和kubernetes 生态环境。随着 Kubernetes 的强势崛起,业务分布在多个计算节点,日志收集凸显重要,本文主要讲述本人在使用 fluentd 和 fluent-bit 中碰到的问题,以及解决方法。


1、td-agent 和 fluentd 有什么区别?

Fluentd

td-agent

支持

社区驱动

Treasure Data提供支持和维护

安装

Ruby gems

rpm / deb / dmg 软件包

配置

自己配置

预配置了几个建议设置

其它组件

$ fluent-gem install fluent-plugin-xx

$ /usr/sbin/td-agent-gem install fluent-plugin-xx

/etc/init.d/  脚本

内存分配方式

系统默认

优化(jemalloc)

2、应该选择 fluentd 还是 td-agent?
td-agent 是基于 fluentd 核心功能开发,td-agent 优先考虑稳定性而不是新功能。如果您希望自己控制Fluentd功能和更新,建议使用 Fluentd gem。如果您是第一次使用 Fluentd 或在生产环境集群环境中使用它,建议使用td-agent。每2或3个月发布一次新版本的td-agent。

3、fluentd 界面在哪里?

不知道是不是我使用存在问题,不论是使用 fluentd  或者 td-agent3 的最新版本,界面的都是无法安装的,记得在使用 ruby gem 安装 fluentd 界面,一直在下载各种插件,最后提示下载失败 。安装 td-agent 时候官方直接说明 td-agent 最新版本界面和后台服务已经分离。

问题来了,分离之后界面如何获取呢?不知道,没有找到文档说明。如果登录 github 上面确实把 ui 分离出来了,但是不知道是不是我本地网络原因,一直没有安装成功。

为了验证界面功能,后来我在文档上找到 2.5 版本的介绍,安装完成后,启动 td-agent-ui 界面是可以正常使用的。

具体参考:

https://docs.fluentd.org/v/0.12/articles/install-by-rpm

# td-agent 2.5 or later. Only CentOS/RHEL 6 and 7 for now.
$ curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent2.5.sh | sh
# td-agent 2.3 or earlier
$ curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent2.sh | sh

其实总结起来说呢,界面提供了配置和日志检索界面,没有权限管理概念,囿于程序员本身更是喜欢在 linux vim 下查看日志,暂时放弃界面功能;只把它用作后台日志集中收集功能。

4、fluentd 基于 file 的缓存问题

fluentd 本身支持内存和文件两种缓存方式,但是在使用基于文件的缓存过程中,你会发现一个问题是 tag 标签不能被替换,原因大概是因为,特定日志数据在没有到来之前 缓存 tag 已经生成,但是它不知道用什么名字来替代 tag,所以干脆直接使用 ${tag}, 但是生成之后的文件目录确实是正常的,当然如果你是基于内存,或者把 fluentd 收集完成的日志发送到 ES 等存储中,则没有此类问题。官方也有说明,新版本会有其它的解决方式,但并不完美,具体请参考:

https://docs.fluentd.org/output/file

5、fluentd 启动错误

如果使用 td-agent 的方式进行安装 fluentd,它自身会生成开机自启动脚本,但是日志文件必须是 td-agent 用户,否则的话,启动会出现下面错误

2018-12-06 19:12:05 +0800 [warn]: secondary type should be same with primary one primary=“Fluent::TreasureDataLogOutput” secondary=“Fluent::Plugin::FileOutput”
2018-12-06 19:12:05 +0800 [error]: config error file="/etc/td-agent/td-agent.conf" error_class=Fluent::ConfigError error=“out_file: /var/log/fluent/access.20181206_**.log is not writable”

其实修复也很简单,赋予 td-agent 用户读写权限即可。

chown td-agent:td-agent /var/ -R

或者不使用 td-agent 默认启动脚本,直接使用 td-agent 启动。本身的安装方式非常简单,当然你也可以基于镜像进行启动。

具体可以参考:

https://docs.fluentd.org/installation/install-by-rpm

6、使用 file 作为 output 总是输出到不同文件

大多使用场景,是把多个节点上的日志汇总到一个节点,然后同样的方式生成本地日志文件,但是会发现,每次都新生成一个文件,可能更希望把同类的日志输出到一个文件,按照预想的方式进行分割文件,而不是直接生成,其实 fluentd 指令中有一个叫做 append 的指令,默认是 false ,配置成 true 即可。

具体请参考:

https://docs.fluentd.org/output/file

7、fluentd 和 fluent-bit 的关系

在当今社会日志收集场景和需求多变和出乎意料的,为了满足日志收集的灵活性,我们会根据需求选择不同的插件,比如:ELK常见解决方案,当前我们主要介绍 fluentd 和 fluent-bit 两个开源项目之间的关系。fluentd 和 fluent-bit 都是有 Treasure Data 公司赞助开发,目标是解决日志收集、处理和转发。

这两个项目有很多相似之处,fluent-bit 完全基于 fluentd 体系结构和一般设计的设计和经验。从体系结构的角度来看,选择使用哪个取决于使用场景,我们可以考虑:

  • fluentd 是日志收集器,处理器和聚合器。

  • fluent-Bit 是一个日志收集器和处理器(它没有 fluentd 等强大的聚合功能)。

fluentd

fluent-bit

范围

容器/服务器

容器/服务器

语言

C和Ruby

C

内存占用

约40MB

约450KB

性能

高性能

高性能

依赖关系

作为Ruby Gem构建,主要依赖gems

除了一些安装编译插件(GCC、CMAKE)其它零依赖。

插件支持

超过650个可用插件

大约35个可用插件

许可证

Apache许可证2.0版

Apache许可证2.0版

根据两个组件不同特点可以考虑将 fluentd 主要用作聚合器,将 fluent-bit 作为日志转发器,两个项目相互补充,从而提供了完整的可靠轻量级日志解决方案。fluent-bit 支持平台如下表所示:

操作系统

平台

cpu架构

Linux

Centos 7

x86_64

Debian 8 (Jessie)

x86_64

Debian 9 (Stretch)

x86_64

Raspbian 8 (Debian Jessie)

AArch32

Raspbian 9 (Debian Stretch)

AArch32

Ubuntu 16.04 (Xenial Xerus)

x86_64

Ubuntu 18.04 (Bionic Beaver)

x86_64

从体系结构支持的角度来看,fluent-bit 在基于 x86,x86_64,AArch32 和 AArch64 的处理器上具有全部功能。Fluent Bit 也可以在OSX 和 * BSD 系统上工作,但并非所有插件在所有平台上都可用。官方支持将根据社区需求而扩大。至于 fluent-bit 的使用之前做过一定总结,这里不再赘述。

可以参考:

K8S集群模式下fluent-bit日志收集方案设计和实践

轻量级日志收集转发 | fluent-bit外部插件详解(三)

轻量级日志收集转发 | fluent-bit配置详解(二)

轻量级日志收集转发 | fluent-bit指令详解(一)

一文了解日志收集工具fluent-bit

面对海量日志,为什么选用fluentd作为核心组件?

fluent-bit 自身具有高性能,占用内存低的特点,用的过程暂时没有发现什么问题,如果非要说问题,大多是自身使用的问题,因为使用 fluent-bit 的用户基本上都是结合 Kubernetes 进行使用的,而 fluent-bit 每次收集日志之所以能记住偏移量,是得益于自身集成的 sqllite 数据库,这个小型数据库切记要挂载到宿主机,否则会出现收集数据重复的问题;如果出现其它问题,烦请查看日志,大多都是犯了低级错误。

推荐:


Kubernetes排障指南

深入探究 K8S ConfigMap 和 Secret

Jenkins 配合 Kubernetes 实现服务持续集成的实践和建议

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

Kubernetes入门培训(内含PPT)

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


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

浅谈 fluentd 使用相关推荐

  1. 浅谈MySQL存储引擎-InnoDBMyISAM

    浅谈MySQL存储引擎-InnoDB&MyISAM 存储引擎在MySQL的逻辑架构中位于第三层,负责MySQL中的数据的存储和提取.MySQL存储引擎有很多,不同的存储引擎保存数据和索引的方式 ...

  2. 【大话设计模式】——浅谈设计模式基础

    初学设计模式给我最大的感受是:人类真是伟大啊!单单是设计模式的基础课程就让我感受到了强烈的生活气息. 个人感觉<大话设计模式>这本书写的真好.让貌似非常晦涩难懂的设计模式变的生活化.趣味化 ...

  3. 学校计算机机房好处,浅谈学校计算机机房维护

    浅谈学校计算机机房维护    现在的学校机房都配置了数量较多的计算机,而且机房的使用非常频繁.对于怎样维护好计算机,特别是计算机软件系统,对广大计算机教师来说是一个很重要且非常现实的问题.下面就本人在 ...

  4. java 中的单元测试_浅谈Java 中的单元测试

    单元测试编写 Junit 单元测试框架 对于Java语言而言,其单元测试框架,有Junit和TestNG这两种, 下面是一个典型的JUnit测试类的结构 package com.example.dem ...

  5. mybatis与php,浅谈mybatis中的#和$的区别

    浅谈mybatis中的#和$的区别 发布于 2016-07-30 11:14:47 | 236 次阅读 | 评论: 0 | 来源: 网友投递 MyBatis 基于Java的持久层框架MyBatis 本 ...

  6. 浅谈GCC预编译头技术

    浅谈GCC预编译头技术 文/jorge --谨以此文,悼念我等待MinGW编译时逝去的那些时间. 其 实刚开始编程的时候,我是丝毫不重视编译速度之类的问题的,原因很简单,因为那时我用BASICA.后来 ...

  7. 【笔记】震惊!世上最接地气的字符串浅谈(HASH+KMP)

    震惊!世上最接地气的字符串浅谈(HASH+KMP) 笔者过于垃圾,肯定会有些错的地方,欢迎各位巨佬指正,感激不尽! 引用:LYD的蓝书,一本通,DFC的讲稿,网上各路巨佬 Luguo id: 章鱼那个 ...

  8. 浅谈几种区块链网络攻击以及防御方案之其它网络攻击

    旧博文,搬到 csdn 原文:http://rebootcat.com/2020/04/16/network_attack_of_blockchain_other_attack/ 写在前面的话 自比特 ...

  9. 浅谈几种区块链网络攻击以及防御方案之拒绝服务攻击

    旧博文,搬到 csdn 原文:http://rebootcat.com/2020/04/14/network_attack_of_blockchain_ddos_attack/ 写在前面的话 自比特币 ...

  10. 浅谈几种区块链网络攻击以及防御方案之女巫攻击

    旧博文,搬到 csdn 原文:http://rebootcat.com/2020/04/13/network_attack_of_blockchain_sybil_attack/ 写在前面的话 自比特 ...

最新文章

  1. 三容水箱液位控制系统_三容水箱液位控制系统的建模及仿真.doc
  2. Dapper基础知识一
  3. .NET Core Community 第三个千星项目诞生:爬虫 DotnetSpider
  4. 在VC中动态加载ODBC的方法
  5. 效果好,速度快!DenseNAS:密集连接搜索空间下的高灵活度网络结构搜索
  6. BZOJ 4992: [Usaco2017 Feb]Why Did the Cow Cross the Road
  7. php错误日志分析_php错误日志
  8. oracle 手动链库,Oracle 数据库干数据库链(Database links)的两个例子
  9. 黑鲨官网装机大师工具如何制作u盘启动盘,u盘启动盘制作方法
  10. Modbus 与 RS485 的区别与联系
  11. 【数据挖掘】二手车交易价格预测(三)数据分析
  12. XSS Challenges stage#12-16 闯关详解
  13. 多校2.1012La Vie en rose
  14. 基于深度学习股票预测系统
  15. 英文 程序员编程技能描述_程序员最重要的非编程技能
  16. 数据结构实训-运动会分数统计
  17. 扣丁软件测试基础知识,苹果无线充电线圈揭秘,iphone8无线充电线圈介绍
  18. python计算机视觉学习———图像分割
  19. 第八届中国高等院校设计作品大赛启动
  20. docker 启动 端口 无效, 绑定不上 端口

热门文章

  1. 详细解析Photoshop10个必学的抠图技巧
  2. SQL server 2008卸载后有残留及彻底卸载
  3. 教学管理系统java_Java 实现简易教务管理系统的代码
  4. swf转换mp4 linux,swf怎么转换成mp4
  5. php ip 转,用php进行ip/子网到IP 地址范围的转换
  6. VC6.0安装番茄助手
  7. C++ Windows键盘钩子
  8. NISP一级考试题库
  9. 【PowerBuilder 9.0 使用时第一次遇到的错误 c0031】
  10. IntelliJ IDEA安卓开发环境搭建