浅谈 fluentd 使用

浅谈 fluentd 使用_第1张图片

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 最新版本界面和后台服务已经分离。

浅谈 fluentd 使用_第2张图片

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

浅谈 fluentd 使用_第3张图片

为了验证界面功能,后来我在文档上找到 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

浅谈 fluentd 使用_第4张图片

浅谈 fluentd 使用_第5张图片

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

4、fluentd 基于 file 的缓存问题

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

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

浅谈 fluentd 使用_第6张图片

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 使用)