轻松上手Fluentd,结合 Rainbond 插件市场,日志收集更快捷
本文介绍在 Rainbond 中使用 Fluentd 插件,收集业务日志,输出到多个不同的服务。
以往有篇文章介绍 EFK(Kibana + ElasticSearch + Filebeat)的插件日志收集。Filebeat 插件用于转发和集中日志数据,并将它们转发到 Elasticsearch 或 Logstash 以进行索引,但 Filebeat 作为 Elastic 的一员,只能在 Elastic 整个体系中使用。
Fluentd
Fluentd是一个开源的,分布式日志采集系统,可以从不同的服务,数据源采集日志,对日志进行过滤加工,分发给多种存储和处理系统。支持各种插件,数据缓存机制,且本身所需的资源很少,内置可靠性,结合其他服务,可 以形成高效直观的日志收集平台。
一、整合架构
在收集组件日志时,只需在组件中开通 Fluentd 插件,本文将演示以下两种方式:
- Kibana + ElasticSearch + Fluentd
- Minio + Fluentd
我们将 Fluentd 制作成 Rainbond 的 一般类型插件 ,在应用启动之后,插件也随之启动并自动收集日志输出到多个服务源,整个过程对应用容器无侵入,且拓展性强。

二、插件原理分析
Rainbond V5.7.0 版本中新增了:从开源应用商店安装插件,本文中的插件已发布到开源应用商店,当我们使用时一键安装即可,根据需求修改配置文件。
Rainbond 插件体系是相对于 Rainbond 应用模型的一部分,插件主要用来实现应用容器扩展运维能力。由于运维工具的实现有较大的共性,因此插件本身可以被复用。插件必须绑定到应用容器时才具有运行时状态,用以实现一种运维能力,比如性能分析插件、网络治理插件、初始化类型插件。
在制作 Fluentd 插件的过程中,使用到了 一般类型插件,可以理解为一个POD启动两个 Container,Kubernetes原生支持一个POD中启动多个 Container,但配置起来相对复杂,在 Rainbond 中通过插件实现使用户操作更加简单。
三、EFK 日志收集实践
Fluentd-ElasticSearch7 输出插件将日志记录写入 Elasticsearch。默认情况下,它使用批量 API创建记录,该 API 在单个 API 调用中执行多个索引操作。这减少了开销并可以大大提高索引速度。
3.1 操作步骤
应用 (Kibana + ElasticSearch)和插件(Fluentd)都可以通过开源应用商店一键部署。
- 对接开源应用商店
- 在应用商店中搜索
elasticsearch并安装7.15.2版本。 - 团队视图 -> 插件 -> 从应用商店安装
Fluentd-ElasticSearch7插件 - 基于镜像创建组件,镜像使用
nginx:latest,并且挂载存储var/log/nginx。这里使用Nginx:latest作为演示- 在组件内挂载存储后,插件也会自定挂载该存储,并可访问 Nginx 产生的日志文件。
- 在 Nginx 组件内开通插件,可以根据所需进行修改
Fluentd配置文件,可参考下方配置文件简介部分。

- 添加 ElasticSearch 依赖,将 Nginx 连接到 ElasticSearch,如下图:

-
访问
Kibana面板,进入到 Stack Management -> 数据 -> 索引管理,可以看到已存在的索引名称为fluentd.es.nginx.log, -
访问
Kibana面板,进入到 Stack Management -> Kibana -> 索引模式,创建索引模式。 -
进入到 Discover,日志正常展示。

3.2 配置文件介绍
配置文件参考 Fluentd 文档 output_elasticsearch。
<source>
@type tail
path /var/log/nginx/access.log,/var/log/nginx/error.log
pos_file /var/log/nginx/nginx.access.log.pos
<parse>
@type nginx
</parse>
tag es.nginx.log
</source>
<match es.nginx.**>
@type elasticsearch
log_level info
hosts 127.0.0.1
port 9200
user elastic
password elastic
index_name fluentd.${tag}
<buffer>
chunk_limit_size 2M
queue_limit_length 32
flush_interval 5s
retry_max_times 30
</buffer>
</match>
配置项解释:
| 配置项 | 解释说明 |
|---|---|
| @type | 采集日志类型,tail表示增量读取日志内容 |
| path | 日志路径,多个路径可以使用逗号分隔 |
| pos_file | 用于标记已经读取到位置的文件(position file)所在的路径 |
| \parse \ parse | 日志格式解析,根据你自己的日志格式,编写对应的解析规则。 |
| 配置项 | 解释说明 |
|---|---|
| @type | 输出到的服务类型 |
| log_level | 设置输出日志的级别为info;支持的日志级别有:fatal, error, warn, info, debug, trace. |
| hosts | elasticsearch的地址 |
| port | elasticsearch的端口 |
| user/password | elasticsearch用到的用户名/密码 |
| index_name | index定义的名称 |
| \buffer\buffer | 日志的缓冲区,用于缓存日志事件,提高系统性能。默认使用内存,也可以使用file文件 |
| chunk_limit_size | 每个块的最大大小:事件将被写入块,直到块的大小变成这个大小,内存默认为8M,文件256M |
| queue_limit_length | 此缓冲插件实例的队列长度限制 |
| flush_interval | 缓冲区日志刷新事件,默认60s刷新输出一次 |
| retry_max_times | 重试失败块输出的最大次数 |
以上只是部分配置参数,其他配置可以跟官网文档自定义。
四、Fluentd + Minio 日志收集实践
Fluentd S3 输出插件将日志记录写入到标准的 S3 对象存储服务,例如 Amazon、Minio。