)
Vector 入门实战安装、配置与第一条可观测数据管道Hello World 与 Syslog 解析【免费下载链接】vectorA high-performance observability data pipeline.项目地址: https://gitcode.com/GitHub_Trending/vect/vector本文基于 Vector 官方入门指南 getting-started.md 编写完整带你走一遍 Vector 的首次使用流程安装 Vector、编写第一份拓扑配置文件sources / transforms / sinks 三类组件并亲手跑通两条数据管道——从 stdin 回显事件的最小管道到使用demo_logs源生成 Syslog 日志、用 VRLVector Remap Language一条语句完成结构化解析的进阶管道。读完并动手复现后你将掌握 Vector 配置文件的组件 ID 与inputs连线规则、编码encoding选项以及 VRLparse_syslog!等核心函数的用法。Vector 是什么Vector 是一个高性能的可观测性数据管道high-performance observability data pipeline用于**收集collect、转换transform、路由route**你的全部日志与指标。整个入门过程可以概括为三步安装 Vector 二进制编写一个描述“拓扑topology”的配置文件运行vector --config ./vector.yaml观察数据如何在组件之间流动。安装并验证 Vector安装 Vector 很快。官方提供了一键安装脚本对应仓库内的 scripts/install.shcurl --proto https --tlsv1.2 -sSfL https://sh.vector.dev | bash如果你偏好其他渠道包管理器、容器镜像、Helm Chart、RPM/DEB 包等可以查阅仓库中的发行说明distribution/debian、distribution/docker、distribution/helm、distribution/rpm、distribution/systemd安装方式文档位于 website/content/en/docs/setup/。安装完成后先确认二进制可用vector --version该命令会打印当前安装的 Vector 版本号。如果输出了版本号说明安装成功可以进入下一步配置。配置 Vector三类组件与拓扑Vector 的拓扑topology由一个配置文件定义它告诉 Vector 要运行哪些组件components、以及这些组件如何交互。拓扑由三类组件构成Sources源从可观测数据源头收集或接收数据进入 VectorTransforms转换在 Vector 内部操作或修改这些可观测数据Sinks汇把数据从 Vector 发送出去到外部服务或目的地。仓库自带的 config/vector.yaml 就是一份典型的“生成 Syslog → 解析 → 打印到控制台”配置与本文后半部分示例同构可直接作为参考。第一个配置stdin 进、console 出先创建一份最简单的配置文件sources: in: type: stdin sinks: out: inputs: [in] type: console encoding: codec: text逐段解读这份配置每个组件都有唯一的 ID并以组件类型作为前缀例如源放在sources段下。第一个组件sources.in使用stdin源告诉 Vector 从标准输入接收数据其 ID 为in。第二个组件sinks.out使用console汇把数据直接打印到标准输出。encoding.codec选项告诉 Vector 以纯文本未编码形式打印数据。sinks.out中的inputs选项告诉 Vector 该汇的事件来源——在我们的例子里事件来自 ID 为in的源组件。inputs就是拓扑中组件之间“连线”的方式一个组件的 ID 出现在下游组件的inputs列表里事件流就沿这条边流动。从源码结构看stdin源的实现位于 src/sources/file_descriptors/stdin.rsconsole汇位于 src/sinks/console/sink.rs 与 src/sinks/console/config.rs它们都通过configurable_component宏注册进组件体系配置中的type: stdin/type: console正是按注册名解析的。Hello World让一条事件流过管道配置就绪现在把一条事件推进去echo Hello World! | vector --config ./vector.yamlecho通过 stdin 向 Vector 发送一条日志vector --config ./vector.yaml用我们刚创建的配置启动 Vector。我们发出的事件会被sources.in组件接收然后传给sinks.out组件后者把它回显到控制台... some logs ... Hello World!想看到点不一样的效果把 sink 配置里的encoding.codec改成json事件就会以 JSON 形式打印出来。Hello World Mark II生成、解析并输出 Syslog 日志单纯回显事件并不过瘾。下面用一个经典场景——采集并处理 Syslog 事件——看看 Vector 如何处理真实形态的可观测数据。我们在原配置上增加两个新组件sources: generate_syslog: type: demo_logs format: syslog count: 100 transforms: remap_syslog: inputs: [generate_syslog] type: remap source: | structured parse_syslog!(.message) . merge(., structured) sinks: emit_syslog: inputs: [remap_syslog] type: console encoding: codec: jsondemo_logs 源模拟各类日志格式的生成器第一个组件使用demo_logs源它生成样例日志数据让你可以模拟不同格式的事件流。之所以选生成数据而不是“真实”数据是因为官方无法确定你正在什么平台上试用 Vector也就难以为所有人写一份统一的数据接入文档。从源码 src/sources/demo_logs.rs 可以看到它的完整参数面参数说明默认值源码format生成日志的格式可选shuffle从自定义lines列表随机取行可配sequence前缀序号、apache_common、apache_error、syslogRFC 5424、bsd_syslogRFC 3164、jsonjsoncount总共输出多少行无限isize::MAX持续输出interval每批输出之间的暂停秒数设为0.0表示尽快输出1秒我们示例中format: syslog指定生成 Syslog 格式日志count: 100指定只输出 100 行——这也是后面“跑完 100 行即退出”的原因count有限时demo_logs生成完毕后源即结束Vector 处理完积压事件后自然退出。源码还有一个值得留意的细节demo_logs发出的每条日志会被注入标准源元数据例如host设为localhost、service设为vector见insert_standard_vector_source_metadata与insert_source_metadata调用所以 JSON 输出里除了 Syslog 字段外还可能看到host、service等元信息。remap 转换与 VRL一行完成 Syslog 解析第二个组件是名为remap的转换。remap转换是 Vector 处理可观测数据能力的核心它暴露了一种名为Vector Remap LanguageVRL的简洁语言允许你在事件流过 Vector 时解析、操作和“装饰”数据。借助remap你可以把静态事件变成能回答“环境状态如何”这类问题的信息型数据。我们的transforms.remap_syslog组件指定了inputs: [generate_syslog]表示它从generate_syslog源接收事件转换类型为remap。真正体现威力的是source选项structured parse_syslog!(.message) . merge(., structured)source包含对每条事件依次应用的 VRL 转换语句。这里只做两件事调用parse_syslog函数并把包含 Syslog 事件的message字段传进去——这是一个“all-in-one”函数接收 Syslog 格式消息、解析其内容输出结构化事件再用merge把解析结果合并回事件本身。你还在为一大堆 Syslog 解析正则发愁吗remap省去了这些让你专注于事件的价值而不是如何提取它。Vector 支持解析多种日志格式。如果你的事件格式未被内置支持也可以在remap中指定自定义正则注意parse_syslog后面的!它告诉 Vector 在解析失败时抛出错误这样你一旦收到非标准 Syslog 就能立刻知道并据此调整 remapping 逻辑。remap转换的 Rust 实现在 src/transforms/remap.rsVRL 函数与语言的文档参见 website/content/en/docs/reference/vrl/functions.md、website/content/en/docs/reference/vrl/expressions.md。仓库中的 tests/behavior/transforms/remap.yaml 也提供了remap转换含 Syslog 相关场景的行为级测试用例可进一步验证上述行为。汇把解析结果以 JSON 输出最后我们把 sink 组件的 ID 改成了emit_sysloginputs更新为处理remap_syslog转换产出的事件并指定以 JSON 格式输出事件。运行第二条管道重新运行 Vector。这次不需要向它 echo 任何数据直接运行即可。它会处理 100 行生成的 Syslog 数据把处理后的数据以 JSON 输出然后退出vector --config ./vector.yaml你应该会看到一连串 JSON 格式的事件形如{appname:benefritz,facility:authpriv,hostname:some.de,message:Were gonna need a bigger boat,msgid:ID191,procid:9473,severity:crit,timestamp:2021-01-20T19:38:55.329Z} {appname:meln1ks,facility:local1,hostname:for.com,message:Take a breath, let it go, walk away,msgid:ID451,procid:484,severity:debug,timestamp:2021-01-20T19:38:55.329Z} {appname:shaneIxD,facility:uucp,hostname:random.com,message:A bug was encountered but not in Vector, which doesnt have bugs,msgid:ID428,procid:3093,severity:alert,timestamp:2021-01-20T19:38:55.329Z}可以看到Vector 已把 Syslog 消息解析成了包含所有 Syslog 字段的结构化事件——全部只用了 VRL 一行代码。接下来可以做什么这只是 Vector 能力的起点。你可以从数十种 sources接收日志与事件源组件实现集中在 src/sourcessyslog.rs、kafka/、prometheus/、opentelemetry/等用 Vector 与remap修改数据、添加字段、把日志转成指标、丢弃字段等日常处理任务全部转换见 src/transforms把事件路由、输出到数十种 destinations汇组件实现集中在 src/sinkselasticsearch/、loki/、splunk_hec/、kafka/、prometheus/等深入Vector Remap Language它是 Vector 数据处理的“心脏”参考 website/content/en/docs/reference/vrl/学习组件配置的更多细节与校验方式配置示例见 config/examples/如 config/examples/stdio.yaml、config/examples/prometheus_to_console.yaml把 Vector 部署到生产环境相关部署材料与清单见 distribution/systemd、distribution/kubernetes 及 website/content/en/docs/setup/ 下的安装与部署文档。仓库中 config/vector.yaml 这份“开箱即用”的配置与上文第二条管道几乎一一对应demo_logsremapconsole可以作为你动手实验时的起点模板。【免费下载链接】vectorA high-performance observability data pipeline.项目地址: https://gitcode.com/GitHub_Trending/vect/vector创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考