当前位置:网站首页>轻松上手Fluentd,结合 Rainbond 插件市场,日志收集更快捷

轻松上手Fluentd,结合 Rainbond 插件市场,日志收集更快捷

2022-06-22 12:13:00 InfoQ

以往有篇文章介绍 
EFK(Kibana + ElasticSearch + Filebeat)
的插件日志收集。Filebeat 插件用于转发和集中日志数据,并将它们转发到 Elasticsearch 或 Logstash 以进行索引,但 Filebeat 作为 Elastic 的一员,只能在 Elastic 整个体系中使用。

Fluentd

Fluentd是一个开源的,分布式日志采集系统,可以从不同的服务,数据源采集日志,对日志进行过滤加工,分发给多种存储和处理系统。支持各种插件,数据缓存机制,且本身所需的资源很少,内置可靠性,结合其他服务,可以形成高效直观的日志收集平台。
本文介绍在 Rainbond 中使用 Fluentd 插件,收集业务日志,输出到多个不同的服务。

一、整合架构

在收集组件日志时,只需在组件中开通 Fluentd 插件,本文将演示以下两种方式:
  • Kibana + ElasticSearch + Fluentd
  • Minio + Fluentd
我们将 Fluentd 制作成 Rainbond 的 
一般类型插件
 ,在应用启动之后,插件也随之启动并自动收集日志输出到多个服务源,整个过程对应用容器无侵入,且拓展性强。
null

二、插件原理分析

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
     配置文件,可参考下方配置文件简介部分。
null
  • 添加 ElasticSearch 依赖,将 Nginx 连接到 ElasticSearch,如下图:
null
  • 访问 
    Kibana
     面板,进入到 Stack Management -> 数据 -> 索引管理,可以看到已存在的索引名称为 
    fluentd.es.nginx.log
  • 访问 
    Kibana
     面板,进入到 Stack Management -> Kibana -> 索引模式,创建索引模式。
  • 进入到 Discover,日志正常展示。
null

3.2 配置文件介绍

配置文件参考 Fluentd 文档 
output_elasticsearch
[1]
<source>
&nbsp;&nbsp;@type&nbsp;tail
&nbsp;&nbsp;path&nbsp;/var/log/nginx/access.log,/var/log/nginx/error.log
&nbsp;&nbsp;pos_file&nbsp;/var/log/nginx/nginx.access.log.pos
&nbsp;&nbsp;<parse>
&nbsp;&nbsp;&nbsp;&nbsp;@type&nbsp;nginx
&nbsp;&nbsp;</parse>
&nbsp;&nbsp;tag&nbsp;es.nginx.log
</source>

<match&nbsp;es.nginx.**>
&nbsp;&nbsp;@type&nbsp;elasticsearch&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;log_level&nbsp;info&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;hosts&nbsp;127.0.0.1
&nbsp;&nbsp;port&nbsp;9200
&nbsp;&nbsp;user&nbsp;elastic
&nbsp;&nbsp;password&nbsp;elastic
&nbsp;&nbsp;index_name&nbsp;fluentd.${tag}
&nbsp;&nbsp;<buffer>
&nbsp;&nbsp;&nbsp;&nbsp;chunk_limit_size&nbsp;2M
&nbsp;&nbsp;&nbsp;&nbsp;queue_limit_length&nbsp;&nbsp;32
&nbsp;&nbsp;&nbsp;&nbsp;flush_interval&nbsp;5s
&nbsp;&nbsp;&nbsp;&nbsp;retry_max_times&nbsp;30
&nbsp;&nbsp;</buffer>
</match>
配置项解释:
<source></source> 日志的输入源:

<match></match>日志的输出端:

以上只是部分配置参数,其他配置可以跟官网文档自定义。

四、Fluentd + Minio 日志收集实践

Fluentd S3 输出插件将日志记录写入到标准的 S3 对象存储服务,例如 Amazon、Minio。

4.1 操作步骤

应用(Minio)和插件(Fluentd S3)都可以通过开源应用商店进行一键部署。
  • 对接开源应用商店。在开源应用商店中搜索 
    minio
    ,并安装 
    22.06.17
     版本。
  • 团队视图 -> 插件 -> 从应用商店安装 
    Fluentd-S3
     插件。
  • 访问 Minio 9090 端口,用户密码在 Minio 组件 -> 依赖中获取。
  • 创建 Bucket,自定义名称。
  • 进入 Configurations -> Region,设置 Service Location
  • Fluentd 插件的配置文件中 
    s3_region
     默认为 
    en-west-test2
  • 基于镜像创建组件,镜像使用 
    nginx:latest
    ,并且挂载存储
    var/log/nginx
    。这里使用 
    Nginx:latest
     作为演示
  • 在组件内挂载存储后,插件也会自定挂载该存储,并可访问 Nginx 产生的日志文件。
  • 进入到 Nginx 组件内,开通 Fluentd S3 插件,修改配置文件中的 
    s3_bucket
     
    s3_region
null
  • 建立依赖关系,Nginx 组件依赖 Minio,更新组件使其生效。
null
  • 访问 Nginx 服务,让其产生日志,片刻后就可以在 Minio 的 Bucket 中看到。
null

4.2 配置文件介绍

配置文件参考 Fluentd 文档 
Apache to Minio
[2]
<source>
&nbsp;&nbsp;@type&nbsp;tail
&nbsp;&nbsp;path&nbsp;/var/log/nginx/access.log
&nbsp;&nbsp;pos_file&nbsp;/var/log/nginx/nginx.access.log.pos
&nbsp;&nbsp;tag&nbsp;minio.nginx.access
&nbsp;&nbsp;<parse>
&nbsp;&nbsp;&nbsp;&nbsp;@type&nbsp;nginx
&nbsp;&nbsp;</parse>
</source>

<match&nbsp;minio.nginx.**>
&nbsp;&nbsp;@type&nbsp;s3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;aws_key_id&nbsp;&quot;#{ENV['MINIO_ROOT_USER']}&quot;
&nbsp;&nbsp;aws_sec_key&nbsp;&quot;#{ENV['MINIO_ROOT_PASSWORD']}&quot;
&nbsp;&nbsp;s3_endpoint&nbsp;http://127.0.0.1:9000/
&nbsp;&nbsp;s3_bucket&nbsp;test
&nbsp;&nbsp;s3_region&nbsp;en-west-test2
&nbsp;&nbsp;time_slice_format&nbsp;%Y%m%d%H%M&nbsp;
&nbsp;&nbsp;force_path_style&nbsp;true
&nbsp;&nbsp;path&nbsp;logs/
&nbsp;&nbsp;<buffer&nbsp;time>
&nbsp;&nbsp;&nbsp;&nbsp;@type&nbsp;file
&nbsp;&nbsp;&nbsp;&nbsp;path&nbsp;/var/log/nginx/s3
&nbsp;&nbsp;&nbsp;&nbsp;timekey&nbsp;1m&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;timekey_wait&nbsp;10s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;chunk_limit_size&nbsp;256m&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;</buffer>
</match>
配置项解释:
<source></source> 日志的输入源:

<match></match>日志的输出端:

最后

Fluentd 插件可以很灵活的收集业务日志并输出至多个服务,并结合 Rainbond 插件市场的一键安装,让我们的使用变得更加简单、快捷。
目前 Rainbond 开源插件应用市场的 Flunetd 插件只有 
Flunetd-S3
 
Flunetd-ElasticSearch7
,欢迎小伙伴们贡献插件哦!

参考资料

[1]
output_elasticsearch: 
https://docs.fluentd.org/output/elasticsearch
[2]
Apache to Minio: 
https://docs.fluentd.org/how-to-guides/apache-to-minio
原网站

版权声明
本文为[InfoQ]所创,转载请带上原文链接,感谢
https://xie.infoq.cn/article/495563fe90b69c94b0cf135c3