前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >浅谈 fluentd 使用

浅谈 fluentd 使用

作者头像
用户5166556
发布2020-04-28 18:26:38
4.1K0
发布2020-04-28 18:26:38
举报

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

代码语言:javascript
复制
# 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 用户,否则的话,启动会出现下面错误

代码语言:javascript
复制
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 用户读写权限即可。

代码语言:javascript
复制
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 的使用之前做过一定总结,这里不再赘述。

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

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

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

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

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

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