KubeCon 2018 参会记录 —— FluentBit Deep Dive

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 在最近的上海和北美KubeCon大会上,来自于Treasure Data的Eduardo Silva(Fluentd Maintainer)带来了最期待的关于容器日志采集工具FluentBit的最新进展以及深入解析的分享,本文主要下跟大家分享一下关于FluentBit的发展历程以及技术解析。

在最近的上海和北美KubeCon大会上,来自于Treasure Data的Eduardo Silva(Fluentd Maintainer)带来了最期待的关于容器日志采集工具FluentBit的最新进展以及深入解析的分享;我们知道Fluentd是在2016年底正式加入CNCF,成为CNCF项目家族的一员,其被广泛用于容器集群中进行应用日志的采集、处理和聚合,但今天主要是跟大家分享一下同样来自于Treasure Data新开源的日志采集工具——FluentBit。

image

FluentBit vs Fluentd

既然已经有了Fluentd,那么为什么还要开发一个FluentBit呢?我们知道,Fluentd是基于Ruby语言的,在一些应用日志量较大或者单节点日志量较大的场景下,通过Fluentd采集日志的速率会远落后于应用日志的产生速率,进而导致日志采集的延迟时间较大,这对于一些实时性要求较高的业务系统或者监控系统来说是不可接受的;另外一方面,也是由于Fluentd自身的日志处理逻辑越来越复杂,全部放置在一个组件里来完成会导致越来越臃肿,因此Treasure Data在基于Fluentd优秀的架构和设计理念上重新开发了一个更加轻量级、更加高性能的日志采集工具——FluentBit,其主要采用C语言进行开发。

image

从上面我们可以清晰地看到FluentBit本身占用的内存资源会比Fluentd少很多,且基本没有其他额外的环境依赖,但是支持的插件数相较于Fluentd会少很多,需要时间来慢慢丰富。

FluentBit Workflow

image

FluentBit 内置了一个Service Engine,其每采集到一条日志时都会执行从Input到Output的整个Action Chain:

- Input

image

日志数据入口,FluentBit支持多种不同数据来源类型的Input Plugin,不仅能采集容器日志、内核日志、syslog、systemd日志,还支持通过TCP监听接收远程客户端的日志,同时还能够采集系统的CPU、内存和DISK的使用率情况以及本机Network流量日志。

- Parser

image

通过情况下我们的应用日志都是非结构化的,那么Parser主要是负责将采集到的非结构化日志解析成结构化的日志数据,一般为JSON格式;FluentBit 默认已经预置了下面几种Parser:

  1. JSON:按照JSON格式来进行日志数据解析;
  2. Regex:依据配置的正则表达式来进行日志数据解析;
  3. Apache:遵循Apache日志格式来进行解析;
  4. Nginx:遵循Nginx日志格式来进行解析;
  5. Docker:遵循Docker标准输出日志格式进行解析;
  6. Syslog rfc5424:按照syslog rfc5424规范格式进行日志解析;
  7. Syslog rfc3164:按照syslog rfc3164规范格式进行日志解析;

- Filter

image

在实际的生产应用中,我们通常需要对采集到的应用日志记录进行修改或者添加一些关键信息,这都可以Filter Plugin来完成;目前FluentBit也已预置了多种Filter插件:

  1. Grep:允许匹配或者过滤掉符合特定正则表达式的日志记录;
  2. Record Modifier:允许对日志数据进行修改或者添加新的KV数据,通过此可以方便我们对日志数据进行打标;
  3. Throttle:支持采用漏桶和滑动窗口算法进行日志采集速率控制;
  4. Kubernetes:自动提取容器或者POD相关信息并添加到日志数据中;
  5. Modify:基于设置的规则来对日志数据进行修改;
  6. Standard Output:允许将日志数据直接打印到标准输出;
  7. Lua:支持通过嵌入Lua Script来修改添加日志数据;

- Buffer

image

FluentBit 内部本身提供了Buffer机制,会将采集到的日志数据暂存在Memory中直到该日志数据被成功路由转发到指定的目标存储后端。

- Routing

image

路由是FluentBit的一个核心功能,它允许我们配置不同的路由规则来将同一条日志数据记录转发到一个或多个不同的接收后端,其内部主要是基于每条日志数据的Tag来进行路由转发,同时支持正则匹配方式;如下面配置则表示希望将Tag满足正则表达式my_*的日志直接打印到标准输出中:

[INPUT]
    Name cpu
    Tag  my_cpu
​
[INPUT]
    Name mem
    Tag  my_mem
​
[OUTPUT]
    Name   stdout
    Match  my_*

- Output

image

Output 主要是用来配置采集到的日志数据将要被转发到哪些日志存储服务中,目前已支持多种主流的存储服务,如ElasticSearch、NATS、InfluxDB、Kafka、Splunk、File、Console等,同样也支持将日志数据继续通过HTTP(S)协议将其传输到其他服务接口中;另外这里有一个比较特殊的Output就是Fluentd,可能大家会比较奇怪,其实在未来的日志架构模型中,FluentBit主要是在采集端专职负责日志的高性能采集,然后可以将采集到的日志在Fluentd中进行较复杂的聚合处理(同Filebeat和Logstash):
image

Other Features

  • Event Driven
    内置的Service Engine采用完全异步的事件驱动模型来进行日志的采集和分发。
  • Configuration
    简单灵活的、高可读性的配置方式,FluentBit的Workflow模型可完全通过配置文件的方式清晰制定。
  • Upstream Manager
    采用统一的日志上游服务的网络连接管理,包括Keepalive和IO Error处理。
  • TLSv1.2 / Security
    对于安全敏感的日志数据,支持通过TLS加密通道进行日志传输。

Upcoming Features

  • Filesystem buffering mode
    当前FluentBit只支持Memory的buffer方式,但考虑到内存的易失性,未来也将会支持基于Filesystem的buffer机制。
  • Optional plugins as shared libraries
    未来会将一些已内置的但又不是必需的插件以共享链接库的方式来进行动态加载。
  • Kubernetes Filter improvements
    未来会继续深度整合Kubernetes,通过API获取更多POD关键信息并自动添加到日志数据记录中。

Summary

这两次的KubeCon大会上Eduardo Silva对日志采集工具FluentBit都进行了深度的解析分享,不仅介绍了FluentBit的整个架构模型,而且还分享了未来的发展方向,从整个分享来看FluentBit会侧重在日志的高性能采集方面;而阿里云容器服务在2017年初开源的Log-Pilot:https://github.com/AliyunContainerService/log-pilot ,其不仅能够采集容器的标准输出日志,而且还能动态地发现采集容器内文件日志,同时支持简单高效的日志声明式配置、支持日志路由、日志数据打标以及多种日志采集插件,未来我们将进一步与社区紧密结合,整合FluentBit的高性能采集特性以及Log-Pilot的动态发现和声明式配置优势来进一步增强容器化应用日志的配置采集效率。

目录
相关文章
|
消息中间件 Kubernetes 监控
Fluentd/FluentBit K8s日志采集方案介绍
Fluent Bit 是一个开源的多平台日志采集器,旨在打造日志采集处理和分发的通用利器。2014 年,Fluentd 团队预测对于嵌入式 Linux 和 Gateways 等受约束的环境,需要更轻量级的日志处理器,于是便开发了Fluent Bit,并把该项目建设成为Fluentd 生态系统的一部分。
1803 0
|
JSON 编解码 网络协议
记一次Logstash日志丢失问题
大量的json解析错误,根据日志情况分析,原因是日志数据传输到logstash之后被截断成了多条数据,于是有的数据就解析异常了,自然无法正常到归集到es的索引文档中。
|
SQL 机器学习/深度学习 存储
七大经典技术场景!Apache Flink 在多维领域应用的 40+ 实践案例
随着 Apache Flink 自身的发展,越来越多的企业选择 Apache Flink 应用于自身的业务场景,如底层平台建设、实时数仓、实时推荐、实时分析、实时大屏、风控、数据湖等场景中,解决实时计算的需求。
七大经典技术场景!Apache Flink 在多维领域应用的 40+ 实践案例
|
Prometheus 监控 Cloud Native
Prometheus VS InfluxDB
前言 除了传统的监控系统如 Nagios,Zabbix,Sensu 以外,基于时间序列数据库的监控系统随着微服务的兴起越来越受欢迎,比如 Prometheus,比如 InfluxDB。gtt 也尝试了一下这两个系统,希望能找到两者的差别,为以后选型提供一些帮助。
8538 0
|
5月前
|
机器学习/深度学习 自然语言处理 数据可视化
简单的知识图谱可视化+绘制nx.Graph()时报错TypeError: ‘_AxesStack‘ object is not callable
简单的知识图谱可视化+绘制nx.Graph()时报错TypeError: ‘_AxesStack‘ object is not callable
132 0
|
5月前
|
开发框架 前端开发 Java
J2EE之自定义MVC框架(上篇)
J2EE之自定义MVC框架(上篇)
61 0
|
12月前
|
存储 SQL 运维
日志服务 SLS 和开源 ELK 全面对比
本文阐述了阿里云日志服务 SLS 和开源 ELK 在性能、成本、功能等维度的对比分析。 如需了解从ES平滑迁移到SLS 攻略,请参考文章链接https://developer.aliyun.com/article/1412611
31637 1
|
存储 运维 Prometheus
全栈声明式可观测:KubeVela 开箱即用且灵活定制的云原生应用洞察
作者: 晖树,天元KubeVela是一个开箱即用的现代化应用交付与管理平台,它通过统一的应用模型、可编程可扩展的架构,帮助企业构建统一的平台,向上为不同场景的业务团队按需提供差异化、且开箱即用的平台层能力,大大降低了云原生技术的使用门槛。除了核心的云资源交付、应用管理、多集群、工作流等技术,KubeVela 还提供了全栈的声明式可观测能力,帮助业务开发者灵活定制,轻松洞察各类复杂的云原生工作负载。
全栈声明式可观测:KubeVela 开箱即用且灵活定制的云原生应用洞察
|
数据采集 存储 消息中间件
iLogtail开源之路
2022年6月底,阿里云iLogtail代码完整开源,正式发布了完整功能的iLogtail社区版。iLogtail作为阿里云SLS官方标配的采集器,多年以来一直稳定服务阿里集团、蚂蚁集团以及众多公有云上的企业客户,目前已经有千万级的安装量,每天采集数十PB的可观测数据,广泛应用于线上监控、问题分析/定位、运营分析、安全分析等多种场景。此次完整开源,iLogtail社区版首次在内核能力上与企业版完全对齐,开发者可以构建出与企业版性能相当的iLogtail云原生可观测性数据采集器。
747 1
iLogtail开源之路
|
数据采集 存储 运维
iLogtail开源之路
2022年6月底,阿里云iLogtail代码完整开源,正式发布了完整功能的iLogtail社区版。iLogtail作为阿里云SLS官方标配的采集器,多年以来一直稳定服务阿里集团、蚂蚁集团以及众多公有云上的企业客户,目前已经有千万级的安装量,每天采集数十PB的可观测数据,广泛应用于线上监控、问题分析/定位、运营分析、安全分析等多种场景。此次完整开源,iLogtail社区版首次在内核能力上与企业版完全对齐,开发者可以构建出与企业版性能相当的iLogtail云原生可观测性数据采集器。
iLogtail开源之路