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

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 本文介绍在 Rainbond 中使用 Fluentd 插件,收集业务日志,输出到多个不同的服务。

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

Fluentd

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

本文介绍在 Rainbond 中使用 Fluentd 插件,收集业务日志,输出到多个不同的服务。

一、整合架构

在收集组件日志时,只需在组件中开通 Fluentd 插件,本文将演示以下两种方式:

  1. Kibana + ElasticSearch + Fluentd
  2. 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)都可以通过开源应用商店一键部署。

  1. 对接开源应用商店
  2. 在应用商店中搜索 elasticsearch 并安装 7.15.2 版本。
  3. 团队视图 -> 插件 -> 从应用商店安装 Fluentd-ElasticSearch7 插件
  4. 基于镜像创建组件,镜像使用 nginx:latest,并且挂载存储var/log/nginx。这里使用 Nginx:latest 作为演示
    • 在组件内挂载存储后,插件也会自定挂载该存储,并可访问 Nginx 产生的日志文件。
  5. 在 Nginx 组件内开通插件,可以根据所需进行修改 Fluentd 配置文件,可参考下方配置文件简介部分。

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

  1. 访问 Kibana 面板,进入到 Stack Management -> 数据 -> 索引管理,可以看到已存在的索引名称为 fluentd.es.nginx.log

  2. 访问 Kibana 面板,进入到 Stack Management -> Kibana -> 索引模式,创建索引模式。

  3. 进入到 Discover,日志正常展示。

3.2 配置文件介绍

配置文件参考 Fluentd 文档 output_elasticsearch[1]

<source>
  @type tail # 采集日志类型,tail表示增量读取日志内容
  path /var/log/nginx/access.log,/var/log/nginx/error.log # 日志路径,多个路径可以使用逗号分隔 
  pos_file /var/log/nginx/nginx.access.log.pos # 用于标记已经读取到位置的文件(position file)所在的路径
  <parse> # 日志格式解析
    @type nginx
  </parse>
  tag es.nginx.log
</source>

<match es.nginx.**>
  @type elasticsearch  # 输出到的服务类型    
  log_level info     # 设置输出日志的级别      
  hosts 127.0.0.1 # elasticsearch的地址  
  port 9200 # elasticsearch的端口
  user elastic # elasticsearch 用户名/密码
  password elastic # elasticsearch 密码
  index_name fluentd.${tag}
  <buffer>
    chunk_limit_size 2M # 每个块的最大大小
    queue_limit_length  32 # 此缓冲插件实例的队列长度限制
    flush_interval 5s # 缓冲区日志刷新事件
    retry_max_times 30 # 重试失败块输出的最大次数
  </buffer>
</match>

四、Fluentd + Minio 日志收集实践

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

4.1 操作步骤

应用(Minio)和插件(Fluentd S3)都可以通过开源应用商店进行一键部署。

  1. 对接开源应用商店。在开源应用商店中搜索 minio,并安装 22.06.17 版本。

  2. 团队视图 -> 插件 -> 从应用商店安装 Fluentd-S3 插件。

  3. 访问 Minio 9090 端口,用户密码在 Minio 组件 -> 依赖中获取。

    • 创建 Bucket,自定义名称。

    • 进入 Configurations -> Region,设置 Service Location

      • Fluentd 插件的配置文件中 s3_region 默认为 en-west-test2
  4. 基于镜像创建组件,镜像使用 nginx:latest,并且挂载存储var/log/nginx。这里使用 Nginx:latest 作为演示

    • 在组件内挂载存储后,插件也会自定挂载该存储,并可访问 Nginx 产生的日志文件。
  5. 进入到 Nginx 组件内,开通 Fluentd S3 插件,修改配置文件中的 s3_bucket s3_region

  1. 建立依赖关系,Nginx 组件依赖 Minio,更新组件使其生效。

  1. 访问 Nginx 服务,让其产生日志,片刻后就可以在 Minio 的 Bucket 中看到。

4.2 配置文件介绍

配置文件参考 Fluentd 文档 Apache to Minio[2]

<source>
  @type tail # 采集日志类型,tail表示增量读取日志内容 
  path /var/log/nginx/access.log # 日志路径
  pos_file /var/log/nginx/nginx.access.log.pos # 用于标记已经读取到位置的文件(position file)所在的路径
  tag minio.nginx.access
  <parse> # 日志格式解析
    @type nginx
  </parse>
</source>

<match minio.nginx.**>
  @type s3                                    # 输出到的服务类型  
  aws_key_id "#{ENV['MINIO_ROOT_USER']}"      # Minio 用户名
  aws_sec_key "#{ENV['MINIO_ROOT_PASSWORD']}" # Minio 密码
  s3_endpoint http://127.0.0.1:9000/          # Minio 访问地址  
  s3_bucket test                              # Minio 桶名称
  s3_region en-west-test2                     # Minio 地区 
  time_slice_format %Y%m%d%H%M                # 每个文件名都加上这个时间戳
  force_path_style true                       # 防止 AWS SDK 破坏端点 URL
  path logs/
  <buffer time>                               # 日志的缓冲区用于缓存日志事件,提高系统性能。默认使用内存,也可以使用file文件
    @type file
    path /var/log/nginx/s3
    timekey 1m             # 每 60 秒刷新一次累积的chunk        
    timekey_wait 10s       # 等待 10 秒再刷新        
    chunk_limit_size 256m  # 每个块的最大大小       
  </buffer>
</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

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
8月前
|
弹性计算 JSON 数据可视化
Grafana 10 新特性解读,体验与协作全面提升
Grafana 10 新特性解读:体验与协作全面提升
31483 5
|
Prometheus 监控 Kubernetes
开源监控利器Prometheus初探
前言: Kubernetes作为当下最炙手可热的容器管理平台,在给应用部署运维带来便捷的同时,也给应用及性能监控带来了新的挑战。本文给大家分享一款十分火热的开源监控工具Prometheus,让我们一起来看它是如何兼顾传统的应用监控、主机性能监控和Kubernetes监控的。
2849 0
|
5月前
|
Prometheus Kubernetes Cloud Native
prometheus|云原生|轻型日志收集系统loki+promtail的部署说明
prometheus|云原生|轻型日志收集系统loki+promtail的部署说明
186 0
|
5月前
|
运维 监控
分布式运维监控平台WGCLOUD 之 【常用命令笔记】
WGCLOUD 在 v3.4.9版本 新增了一个模块【常用命令笔记】
|
存储 应用服务中间件 Linux
开源日志管理系统Graylog之Sidecar功能实践
开源日志管理系统Graylog之Sidecar功能实践
595 0
开源日志管理系统Graylog之Sidecar功能实践
|
11月前
|
存储 索引
EFK实战二 - 日志集成
EFK实战二 - 日志集成
258 0
|
Kubernetes 监控 Java
K8s企业级管理神器:Rancher 你值得拥有!
K8s企业级管理神器:Rancher 你值得拥有!
|
Prometheus 监控 Cloud Native
夜莺系列 1 夜莺V6版本初体验
部署并体验夜莺V6版本
463 0
|
Prometheus 监控 Cloud Native
简单易用的监控告警系统 | HertzBeat 在 Rainbond 上的使用分享
在现有的监控告警体系中 Prometheus + AlertManger + Grafana 一直是主流,但对于中小团队或个人来说,这种体系显的较为复杂。而 HertzBeat 能让中小团队或个人很快速的搭建监控告警系统,并通过简单的配置实现应用、数据库、操作系统的监控与告警等。
|
监控 数据可视化 Go
不得不学!从零到一搭建ELK日志,在Docker环境下部署 Filebeat 日志收集工具
最近在玩 ELK 日志平台,它是 Elastic 公司推出的一整套日志收集、分析和展示的解决方案。