- 云原生
- 微服务
- 运维
- DevOps
【免费下载链接】meshery
Meshery, the cloud native manager
Meshery 作为云原生管理平台,通过"模型(Model)"机制把各类基础设施与技术栈纳入可视化设计环境。本指南聚焦 Meshery 仓库中的Fluentbit Operator 模型:它由 Artifact Hub 注册、源自 KubeSphere 的 Fluentbit Operator Helm Chart,归类于Observability and Analysis / Logging分类,用于在 Meshery 的可视化画布上以拖拽、连线的方式设计、部署与管理 Fluent Bit / Fluentd 日志处理管道。阅读本文后,你将掌握该模型提供的 6 类组件(FluentBit、FluentBitConfig、Input、Filter、Output、Parser)的能力边界、核心配置字段,以及三种日志处理模式(Fluent Bit only、Fluent Bit + Fluentd、Fluentd only)的适用场景,并能结合实际 Schema 直接规划自己的日志流水线。
Fluentbit Operator 模型是什么
Fluent Bit 与 Fluentd 是 CNCF 生态中两个广为人知的数据采集器(log shipper),它们都能完成日志的采集、处理(解析与过滤)和转发,但各有擅长:Fluent Bit 轻量、高效,适合作为日志代理(logging agent);Fluentd 插件丰富、处理能力强,适合对日志做高级加工。
Fluentbit Operator(即 KubeSphere 社区的 fluent-bit-operator / Fluent Operator)通过 CRD 与控制器把这两者以 Kubernetes 原生对象的方式暴露出来:Fluent Bit 会被自动部署为 DaemonSet,Fluentd 会被自动部署为 StatefulSet。Meshery 将其封装为集成模型后,用户可以在 Meshery 的图形化界面中直接编排这些 CRD 对象,而不必手写大量 YAML。
在 Meshery 仓库中,该模型的技术定义位于 模型定义文件(schemaVersionmodels.meshery.io/v1beta2,模型版本v0.1.0),其模型级元数据如下:
| 属性 | 值 |
|---|---|
| 模型名称 / Display Name | fluentbit-operator/ Fluentbit Operator |
| 分类 / 子分类 | Observability and Analysis / Logging |
| 注册源(registrant) | Artifact Hub(Chart 源为 KubeSphere Helm 仓库) |
| API 组版本(组件级) | logging.kubesphere.io/v1alpha2 |
| 组件数量 / 关系数量 | 6 个组件 / 0 个内置关系 |
| UI 主色 / 次色 / 形状 | #7bb09f/#00D3A9/ circle |
说明:模型注册表中
relationships-count为 0,表示该模型当前不附带预定义的关系规则;组件之间的逻辑关系(例如FluentBitConfig通过 label selector 关联各类插件)需要通过 selector 机制显式建立,详见下文。
六大组件:日志管道的积木
原文档 front matter 列出了该模型的 6 个组件,每个组件在 Meshery 画布上都对应一个可拖拽、可配置的图形节点,其定义文件位于 组件目录:
| 组件(kind) | 作用 | 仓库定义文件 |
|---|---|---|
FluentBit | Fluent Bit 实例本体(DaemonSet),声明镜像、调度、存储与关联的配置对象 | FluentBit.json |
FluentBitConfig | 通过 label selector 聚合各类插件并下发全局 Service 配置 | FluentBitConfig.json |
Input | 定义日志来源(tail、systemd、dummy) | Input.json |
Filter | 定义日志过滤/加工链(grep、kubernetes、lua、modify 等) | Filter.json |
Output | 定义日志去向(Elasticsearch、Kafka、Loki、HTTP 等) | Output.json |
Parser | 定义日志解析器(regex、json、logfmt、ltsv) | Parser.json |
从组件 Schema 可以看出,6 个组件均属于命名空间级资源(isNamespaced: true),API 版本统一为logging.kubesphere.io/v1alpha2,并且每个组件在 Meshery 中默认具备 8 项能力(capabilities),包括:
- Performance Test(对实例发起性能测试、采集指标并呈现结果);
- Workload Configuration(声明式配置工作负载专属设置);
- Labels and Annotations Configuration(声明式配置标签与注解);
- Relationships(查看组件间关系);
- Json Schema(查看组件定义);
- Styling / Change Shape(调整画布视觉样式与图形形状);
- Compound Drag And Drop(在关系图中将子组件拖入父组件)。
这组能力意味着:在 Meshery 画布上放入任一组件后,都可以通过配置表单直接编辑其工作负载参数、注入标签注解,并对其执行性能测试。
三种日志处理模式:如何选择架构
原文档的howItWorksDetails给出了该模型的架构决策模型,这是理解该集成的关键。Fluent Bit 与 Fluentd 虽然都能完成"采集 → 解析/过滤 → 转发",但优势各不相同,因此 Fluent Operator 支持以下三种模式,你可以按需自由组合:
模式一:Fluent Bit only
适用场景:只需要采集日志并把日志发送到最终目的地,不需要对日志做高级加工。
此时整个管道只由 Fluent Bit 承担:它以 DaemonSet 形态在每个节点上采集容器日志,经内置或自定义 Parser 结构化后直接转发给 Output。这是资源开销最小、最常用的模式——绝大多数场景下,一条 "tail → (parser) → elasticsearch/loki/kafka" 的管道就够了。
模式二:Fluent Bit + Fluentd
适用场景:需要对采集到的日志做高级加工,或者需要把日志转发到更多目标(sink)。
Fluent Bit 负责节点侧的轻量采集,随后把日志转发给 Fluentd(StatefulSet,作为集中处理层),由 Fluentd 利用其丰富的插件体系完成复杂的解析、富化、路由与多路转发。典型链路为:
容器日志 → Fluent Bit (DaemonSet) → Forward → Fluentd (StatefulSet) → 多路 Output模式三:Fluentd only
适用场景:需要通过 HTTP、Syslog 等网络协议接收日志,再做处理并投递到最终 sink。
如果日志不是来自节点本地文件,而是来自外部系统主动推送(如通过 HTTP Forward、Syslog),则不需要节点级代理,直接部署 Fluentd 即可。
设计要点:由于 Operator 同时提供 Fluent Bit 与 Fluentd 两套 CRD 和控制器,三种模式可以在同一集群中并存,甚至对不同的 namespace 应用不同的模式——这正是"as you wish"(按需自由配置)的体现,也是该模型在 Meshery 中做多环境可视化管理时的核心价值。
核心组件配置字段详解
下面结合仓库中各组件 JSON Schema 的spec字段,给出可直接用于规划配置的关键参数。所有字段均来自 组件定义目录 下的真实 Schema。
FluentBit 实例(DaemonSet 主体)
FluentBit的spec描述 Fluent Bit 实例的期望状态,核心字段包括:
| 字段 | 类型 | 说明 |
|---|---|---|
image/imagePullPolicy | string | Fluent Bit 镜像地址与拉取策略 |
imagePullSecrets | array | 拉取私有镜像所需的 Secret 引用 |
fluentBitConfigName | string | 关联的FluentBitConfig对象名,这是把配置挂载到实例的桥梁 |
containerLogRealPath | string | 容器日志路径(用于 hostPath 挂载采集) |
positionDB | object | position db 存储,启用tail输入时必用;支持emptyDir、hostPath、persistentVolumeClaim、configMap、secret、nfs、csi等 Kubernetes 标准卷源 |
nodeSelector/tolerations/affinity | object / array / object | 节点调度、污点容忍与亲和性约束(含 node/pod 亲和与反亲和) |
resources | object | requests/limits(CPU、内存) |
secrets | array | 将被挂载到/fluent-bit/secrets/<secret-name>的 Secret 名列表 |
runtimeClassName | string | 容器运行时类 |
其中fluentBitConfigName与positionDB值得特别关注:前者决定了实例加载哪一份插件聚合配置,后者在 tail 场景下负责记录文件偏移,避免重启后重复读取。
FluentBitConfig:用 label selector 聚合插件
FluentBitConfig是整个模型的"粘合剂",它不直接描述日志行为,而是声明"聚合哪些插件"以及"引擎全局行为如何":
inputSelector/outputSelector/filterSelector/parserSelector:均为标准 Kubernetes LabelSelector(matchLabels+matchExpressions,多条表达式之间为 AND 关系)。Operator 会根据这些 selector 自动收集集群中带匹配标签的Input、Output、Filter、Parser对象,并生成最终的 Fluent Bit 配置文件。service:定义 Fluent Bit 引擎的全局行为,包括:flushSeconds(interval):输出刷新的时间间隔;httpServer/httpPort/httpListen:是否开启内置监控 HTTP 服务及其监听地址端口(用于暴露/api/v1/metrics等统计端点);logLevel:诊断级别(error/warning/info/debug/trace);logFile、parsersFile、daemon、graceSeconds:日志文件、附加 parsers 文件、后台运行开关与退出等待时间。
实操建议:为Input/Output/Filter/Parser对象打上形如fluentbit.operator/component: true之类的标签,然后在FluentBitConfig中通过matchLabels统一筛选,即可实现"配置随标签走"的解耦管理。
Input:定义日志来源
Input的spec支持三类输入插件(以及alias别名,用于在指标中区分各输入):
tail(采集文件日志,最常用):path(支持通配符的文件路径)、tag/tagRegex(为记录打标签以便路由)、parser(结构化解析器)、db/dbSync(记录偏移的数据库与同步方式)、excludePath、ignoreOlder、memBufLimit、bufferChunkSize/bufferMaxSize、skipLongLines、multiline/parserFirstline/parserN(多行日志处理)、dockerMode(重组被 Docker 拆分的日志行)、pathKey、refreshIntervalSeconds、rotateWaitSeconds等。systemd:从 Journald 采集,支持systemdFilter/systemdFilterType(按 Journald key/value 过滤)、readFromTail、stripUnderscores(去除字段下划线前缀)、maxEntries/maxFields、path(自定义 journal 目录)。dummy:生成模拟 JSON 日志,dummy、rate(每秒事件数)、samples、tag,非常适合测试管道。
Filter:定义处理链
Filter通过match(支持*通配符的 tag 匹配)或matchRegex(完整正则)选择要处理的记录流,filters为有序的过滤插件列表,支持:
grep:regex(保留字段匹配正则的记录)、exclude(剔除字段匹配正则的记录),值格式均为FIELD REGEX;kubernetes:Kubernetes 元数据富化,如labels/annotations(是否注入资源标签/注解)、mergeLog/mergeLogKey(合并 JSON 格式的 log 字段)、k8sLoggingExclude/k8sLoggingParser(允许 Pod 通过注解排除日志或指定解析器)、keepLog、kubeURL/kubeCAFile/kubeTokenFile/tlsVerify/tlsDebug、bufferSize、dummyMeta、kubeMetaPreloadCacheDir、useJournal、regexParser等;modify:记录修改规则集,conditions(如keyExists、keyValueEquals、keyValueMatches、aKeyMatches等条件)与rules(set、add、remove、rename、hardRename、copy、hardCopy、removeWildcard、removeRegex等,按顺序作用于上一步结果);lua:script(ConfigMap 引用的 Lua 脚本)、call(触发函数名)、protectedMode、timeAsTable、typeIntKey;parser:keyName(要解析的字段)、parser(解析器名,可逗号分隔多个)、reserveData/preserveKey/unescapeKey;nest:operation(nest/lift)、wildcard、nestUnder、nestedUnder、addPrefix/removePrefix;recordModifier:records(追加键值对)、removeKeys、whitelistKeys;throttle:限速,rate(窗口内消息量)、interval(时间窗,如3s/1.5m)、window(求平均的窗口数)、printStatus。
Output:定义日志去向
Output通过match/matchRegex指定接收哪些 tag 的日志,alias用于指标区分。spec内置了十余种输出插件:
es(Elasticsearch):host/port、index、type、logstashFormat/logstashPrefix/logstashDateFormat、timeKey/timeKeyFormat、currentTimeIndex、generateID、includeTagKey/tagKey、replaceDots、pipeline、path、httpUser/httpPassword、tls、bufferSize、traceOutput/traceError;http:host/port/uri、format(如msgpack/json)、headers/headerTag、httpUser/httpPassword、compress(gzip)、jsonDateKey/jsonDateFormat、proxy、tls、allowDuplicatedHeaders,以及 GELF 格式相关键(gelfFullMessageKey、gelfShortMessgeKey、gelfHostKey、gelfLevelKey、gelfTimestampKey);kafka:brokers、topics、topicKey/messageKey/messageKeyField、format(json/msgpack)、timestampKey/timestampFormat、rdkafka(任意 librdkafka 属性);loki:host/port、labels/labelKeys(作为 stream labels 的记录键)、lineFormat(json或key_value)、autoKubernetesLabels、httpUser/httpPassword、tenantID、tls;forward(Fluentd 转发):host/port、sharedKey/emptySharedKey、username/password、selfHostname、requireAckResponse(at-least-once 语义)、sendOptions、timeAsInteger、tls;stdout/file:调试与落盘,stdout支持format(msgpack/json/json_lines)、jsonDateKey/jsonDateFormat;file支持path、file、format(如out_file/csv/ltsv/template)、delimiter、labelDelimiter、template;syslog:host/port、mode(tcp/tls/udp)、syslogFormat(rfc3164/rfc5424)、syslogMaxSize及各字段键映射(syslogAppnameKey、syslogFacilityKey、syslogHostnameKey、syslogMessageIDKey、syslogMessageKey、syslogProcessIDKey、syslogSDKey、syslogSeverityKey)、tls;tcp:host/port、format、jsonDateKey/jsonDateFormat、tls;null:丢弃记录(无子属性),常用于调试路由。
Parser:定义解析规则
Parser定义日志解析模板,供 Input 与 Filter 引用:
regex:正则解析器;json:JSON 解析器;logfmt:logfmt 格式解析;ltsv:Labeled Tab-separated Values 解析;decoders:内置解码器(decoders)列表,可在每个 Parser 定义上按需附加。
在 Meshery 中落地一套日志管道
综合以上信息,在 Meshery 中设计一套典型的 "Fluent Bit only" 日志管道可遵循如下步骤(该模型在画布中以组件拖拽方式编排):
- 从集成目录中找到Fluentbit Operator模型,向画布放入一个
FluentBit节点,配置其image、fluentBitConfigName与所需的positionDB(tail 场景建议使用emptyDir或persistentVolumeClaim持久化偏移)。 - 放入一个
FluentBitConfig节点,在service中设置flushSeconds与logLevel,并通过inputSelector、outputSelector、parserSelector声明要聚合的插件标签。 - 放入
Input节点(如tail,配置path与parser)和Output节点(如es、loki或kafka),为它们打上与第 2 步 selector 一致的标签。 - 如有解析或加工需求,放入
Parser与Filter节点并打上对应标签;需要高级处理时,可按上文"模式二"引入 Fluentd(StatefulSet)。 - 通过组件能力中的Json Schema能力随时检视组件的完整字段定义,通过Workload Configuration能力微调工作负载设置,确认无误后执行部署;
FluentBit组件还支持Performance Test能力,可对实例发起负载验证。
关于最终的 YAML 形态:Operator 控制器会把FluentBitConfig聚合的插件对象渲染为 Fluent Bit 运行时的配置文件,并把FluentBit实例部署为 DaemonSet——这正是"Fluent Bit 以 DaemonSet、Fluentd 以 StatefulSet 自动部署"这一模型承诺的底层实现。
进一步探索
- 模型与组件的最新定义可在 模型目录 中查看,按"模型版本 → 组件版本 → components"的目录层级组织(当前为
0.1.0/v1.0.0)。 - 想了解 Meshery 如何加载、展示这类集成模型并为其生成可视化组件,可继续阅读仓库根目录的 README.md 与 docs 目录。
- 本文所有组件字段均以仓库内真实 Schema 为准;若你使用的 Operator 版本与此处
v0.1.0不同,部分字段名或枚举值(如syslogFormat的rfc3164/rfc5424)可能略有差异,请在部署前以目标版本的 CRD 文档核对。
- 云原生
- 微服务
- 运维
- DevOps
【免费下载链接】meshery
Meshery, the cloud native manager
相关推荐
Meshery 中的 APISIX 集成模型:以可视化设计协作管理 Kubernetes 中的 API 网关
Meshery 中的 APISIX 集成模型:以可视化设计协作管理 Kubernetes 中的 API 网关 本指南以仓库中的 APISIX 集成模型文档( d
云原生微服务运维DevOps基于 Meshery 的 Fluent Bit 日志处理管道设计(fluentbit-log-pipeline)深度解析
基于 Meshery 的 Fluent Bit 日志处理管道设计(fluentbit log pipeline)深度解析 导读 fluentbit log pi
云原生微服务运维DevOps在 Meshery 中使用 Fluentd-ES 设计构建 Kubernetes 日志采集与 Elasticsearch 转发管道
在 Meshery 中使用 Fluentd ES 设计构建 Kubernetes 日志采集与 Elasticsearch 转发管道 导读 本文围绕 Mesher
云原生微服务运维DevOps
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考