共计 4150 个字符,预计需要花费 11 分钟才能阅读完成。
以往有篇文章介绍 EFK(Kibana + ElasticSearch + Filebeat)的插件日志收集。Filebeat 插件用于转发和集中日志数据,并将它们转发到 Elasticsearch 或 Logstash 以进行索引,但 Filebeat 作为 Elastic 的一员,只能在 Elastic 整个体系中应用。
Fluentd
Fluentd 是一个开源的,分布式日志采集零碎,能够从不同的服务,数据源采集日志,对日志进行过滤加工,分发给多种存储和解决零碎。反对各种插件,数据缓存机制,且自身所需的资源很少,内置可靠性,联合其余服务,能够造成高效直观的日志收集平台。
本文介绍在 Rainbond 中应用 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>
配置项解释:
\<source>\</source> 日志的输出源:
配置项 | 解释阐明 |
---|---|
@type | 采集日志类型,tail 示意增量读取日志内容 |
path | 日志门路,多个门路能够应用逗号分隔 |
pos_file | 用于标记曾经读取到地位的文件(position file)所在的门路 |
\<parse>\</parse> | 日志格局解析,依据你本人的日志格局,编写对应的解析规定。 |
\<match>\</match> 日志的输入端:
配置项 | 解释阐明 |
---|---|
@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。
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
。
- Fluentd 插件的配置文件中
-
基于镜像创立组件,镜像应用
nginx:latest
,并且挂载存储var/log/nginx
。这里应用Nginx:latest
作为演示- 在组件内挂载存储后,插件也会自定挂载该存储,并可拜访 Nginx 产生的日志文件。
- 进入到 Nginx 组件内,开明 Fluentd S3 插件,批改配置文件中的
s3_bucket
s3_region
- 建设依赖关系,Nginx 组件依赖 Minio,更新组件使其失效。
- 拜访 Nginx 服务,让其产生日志,片刻后就能够在 Minio 的 Bucket 中看到。
4.2 配置文件介绍
配置文件参考 Fluentd 文档 Apache to Minio。
<source>
@type tail
path /var/log/nginx/access.log
pos_file /var/log/nginx/nginx.access.log.pos
tag minio.nginx.access
<parse>
@type nginx
</parse>
</source>
<match minio.nginx.**>
@type s3
aws_key_id "#{ENV['MINIO_ROOT_USER']}"
aws_sec_key "#{ENV['MINIO_ROOT_PASSWORD']}"
s3_endpoint http://127.0.0.1:9000/
s3_bucket test
s3_region en-west-test2
time_slice_format %Y%m%d%H%M
force_path_style true
path logs/
<buffer time>
@type file
path /var/log/nginx/s3
timekey 1m
timekey_wait 10s
chunk_limit_size 256m
</buffer>
</match>
配置项解释:
\<source>\</source> 日志的输出源:
配置项 | 解释阐明 |
---|---|
@type | 采集日志类型,tail 示意增量读取日志内容 |
path | 日志门路,多个门路能够应用逗号分隔 |
pos_file | 用于标记曾经读取到地位的文件(position file)所在的门路 |
\<parse>\</parse> | 日志格局解析,依据你本人的日志格局,编写对应的解析规定。 |
\<match>\</match> 日志的输入端:
配置项 | 解释阐明 |
---|---|
@type | 输入到的服务类型 |
aws_key_id | Minio 用户名 |
aws_sec_key | Minio 明码 |
s3_endpoint | Minio 拜访地址 |
s3_bucket | Minio 桶名称 |
force_path_style | 避免 AWS SDK 毁坏端点 URL |
time_slice_format | 每个文件名都加上这个工夫戳 |
\<buffer>\</buffer> | 日志的缓冲区,用于缓存日志事件,进步零碎性能。默认应用内存,也能够应用 file 文件 |
timekey | 每 60 秒刷新一次累积的 chunk |
timekey_wait | 期待 10 秒再刷新 |
chunk_limit_size | 每个块的最大大小 |
最初
Fluentd 插件能够很灵便的收集业务日志并输入至多个服务,并联合 Rainbond 插件市场的一键装置,让咱们的应用变得更加简略、快捷。
目前 Rainbond 开源插件利用市场的 Flunetd 插件只有 Flunetd-S3
Flunetd-ElasticSearch7
,欢送小伙伴们奉献插件哦!