字节跳动下一代通用高性能 OneAgent

JS滚动广告
✨ AI前沿 | 每日人工智能最新资讯 ✨

为了解决上述问题,我们开发了基于新数据模型的 2.0 pipeline。2.0 Pipeline 中流动的每一条数据定义为 PipelineEvent,Metric、Trace、Log、Bytes,Profiling 等都是派生自 PipelineEvent 的具体事件,大幅提升了灵活性:

type PipelineEvent interface {
        GetName() string
        SetName(string)
        GetTags() Tags
        GetType() EventType
        GetTimestamp() uint64
        GetObservedTimestamp() uint64
        SetObservedTimestamp(uint64)

PipelineEvent 不但可以携带更丰富的信息,也更适合做 data pipeline 内的计算模型,大大提升了通用处理能力。

目前,我们已经把这项改造贡献给社区,社区也已经接受这个新的数据模型为核心处理模型,后续新的插件都将支持新的数据模型,存量的插件也在逐渐适配支持。

全新的构建方案

社区在 v1.4.0 之前要求插件必须放在项目主仓库内,但互联网时代,代码是企业最核心的资产之一,受限于字节跳动内部的安全合规要求,一些插件必须放在公司内部的私有仓库,不能贡献到开源社区。一般面对这种情况,我们只能 fork 一个新的仓库来增加一些内部专用的插件,但这会导致我们和社区上游渐行渐远,既也不能享受开源项目的新特性,也不利于把最终用户的反馈反哺社区。

针对这个问题,我们设计了一种产物构建机制,能够合并官方仓库和私有仓库的插件,一起构建出包。在方案上,我们重点参考了 OpenTelemetry Collector 的做法,使用 YAML 文件渲染成最终的 Go 文件。我们对仓库做了如下改造:

v1.4.0 之前,插件的引入都放在 plugins/all/all.go 下:

package all
import (
        _ "github.com/alibaba/ilogtail/plugins/aggregator"
        _ "github.com/alibaba/ilogtail/plugins/aggregator/baseagg"
        ...

v1.4.0 之后,项目主仓库添加 plugins.yml 文件,内置插件都加到这个文件里面进行注册,默认使用 plugins.yml 来生成内置插件的 all.go 。同时编译脚本支持传递多个 *_plugins.yml , 使用 external_plugins.yml 来加载外部仓库的插件,生成 external_all.go 文件。

plugin.yml:

plugins:
  common:
    - import: "github.com/alibaba/ilogtail/plugins/aggregator"
    - import: "github.com/alibaba/ilogtail/plugins/aggregator/baseagg"
    ...

external_plugins.yml:

plugins:    // 需要注册的plugins,按适用的系统分类
common:
    - gomod: code.private.org/private/custom_plugins v1.0.0  // 必须,插件module
      import: code.private.org/private/custom_plugins        // 可选,代码中import的package路径
      path: ../custom_plugins                            // 可选,replace 本地路径,用于调试
windows:
linux:
project:
replaces:       // 可选,array,用于解决多个插件module之间依赖冲突时的问题
go_envs:        // 可选,map,插件的repo是私有的时候,可以添加如GOPRIVATE环境等设置
  GOPRIVATE: *.code.org
git_configs:    // 可选,map,私有插件repo可能需要认证,可以通过设置git url insteadof调整
  url.https://user:token@github.com/user/.insteadof: https://github.com/user/

有了这个能力之后,各个公司能更自由地开发自己场景的插件,大大降低了开发门槛,大幅提升了开源项目的共建体验。

字节跳动的插件配置(脱敏)

基于上述这两个特性,我们开发一系列 OneAgent 插件运用在不同场景,很好地支撑了业务的需求:

输入插件:

发表评论