浅谈 fluentd 使用
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 使用相关推荐
- 浅谈MySQL存储引擎-InnoDBMyISAM
浅谈MySQL存储引擎-InnoDB&MyISAM 存储引擎在MySQL的逻辑架构中位于第三层,负责MySQL中的数据的存储和提取.MySQL存储引擎有很多,不同的存储引擎保存数据和索引的方式 ...
- 【大话设计模式】——浅谈设计模式基础
初学设计模式给我最大的感受是:人类真是伟大啊!单单是设计模式的基础课程就让我感受到了强烈的生活气息. 个人感觉<大话设计模式>这本书写的真好.让貌似非常晦涩难懂的设计模式变的生活化.趣味化 ...
- 学校计算机机房好处,浅谈学校计算机机房维护
浅谈学校计算机机房维护 现在的学校机房都配置了数量较多的计算机,而且机房的使用非常频繁.对于怎样维护好计算机,特别是计算机软件系统,对广大计算机教师来说是一个很重要且非常现实的问题.下面就本人在 ...
- java 中的单元测试_浅谈Java 中的单元测试
单元测试编写 Junit 单元测试框架 对于Java语言而言,其单元测试框架,有Junit和TestNG这两种, 下面是一个典型的JUnit测试类的结构 package com.example.dem ...
- mybatis与php,浅谈mybatis中的#和$的区别
浅谈mybatis中的#和$的区别 发布于 2016-07-30 11:14:47 | 236 次阅读 | 评论: 0 | 来源: 网友投递 MyBatis 基于Java的持久层框架MyBatis 本 ...
- 浅谈GCC预编译头技术
浅谈GCC预编译头技术 文/jorge --谨以此文,悼念我等待MinGW编译时逝去的那些时间. 其 实刚开始编程的时候,我是丝毫不重视编译速度之类的问题的,原因很简单,因为那时我用BASICA.后来 ...
- 【笔记】震惊!世上最接地气的字符串浅谈(HASH+KMP)
震惊!世上最接地气的字符串浅谈(HASH+KMP) 笔者过于垃圾,肯定会有些错的地方,欢迎各位巨佬指正,感激不尽! 引用:LYD的蓝书,一本通,DFC的讲稿,网上各路巨佬 Luguo id: 章鱼那个 ...
- 浅谈几种区块链网络攻击以及防御方案之其它网络攻击
旧博文,搬到 csdn 原文:http://rebootcat.com/2020/04/16/network_attack_of_blockchain_other_attack/ 写在前面的话 自比特 ...
- 浅谈几种区块链网络攻击以及防御方案之拒绝服务攻击
旧博文,搬到 csdn 原文:http://rebootcat.com/2020/04/14/network_attack_of_blockchain_ddos_attack/ 写在前面的话 自比特币 ...
- 浅谈几种区块链网络攻击以及防御方案之女巫攻击
旧博文,搬到 csdn 原文:http://rebootcat.com/2020/04/13/network_attack_of_blockchain_sybil_attack/ 写在前面的话 自比特 ...
最新文章
- 三容水箱液位控制系统_三容水箱液位控制系统的建模及仿真.doc
- Dapper基础知识一
- .NET Core Community 第三个千星项目诞生:爬虫 DotnetSpider
- 在VC中动态加载ODBC的方法
- 效果好,速度快!DenseNAS:密集连接搜索空间下的高灵活度网络结构搜索
- BZOJ 4992: [Usaco2017 Feb]Why Did the Cow Cross the Road
- php错误日志分析_php错误日志
- oracle 手动链库,Oracle 数据库干数据库链(Database links)的两个例子
- 黑鲨官网装机大师工具如何制作u盘启动盘,u盘启动盘制作方法
- Modbus 与 RS485 的区别与联系
- 【数据挖掘】二手车交易价格预测(三)数据分析
- XSS Challenges stage#12-16 闯关详解
- 多校2.1012La Vie en rose
- 基于深度学习股票预测系统
- 英文 程序员编程技能描述_程序员最重要的非编程技能
- 数据结构实训-运动会分数统计
- 扣丁软件测试基础知识,苹果无线充电线圈揭秘,iphone8无线充电线圈介绍
- python计算机视觉学习———图像分割
- 第八届中国高等院校设计作品大赛启动
- docker 启动 端口 无效, 绑定不上 端口