HEKA-系统介绍

1. 系统介绍

  • 日志收集服务
  • golang
  • golnag/lua扩展
  • 流水线作业

2. UParse系统说明

2.1系统结构

UParse%E7%B3%BB%E7%BB%9F.png?version=2&modificationDate=1499331461000&api=v2

2.1 主要模块

    • pipeline-config
      核心调度模块,跟据配置文件启动相应的插件,启动流水线
    • input 
      从数据源读取数据,包括kafka_input,TCP_input等
    • decoder
      将数据解析成特定,有json,nginx等
    • filter
      对数据进行聚合,计算,过滤
    • encoder
      对数据重新编码成特定格式
    • output
      输出数据到外部存储或通道
    • router
      根据数据某些字段对filter和output进行路由

2.3 主要特性

2.3.1系统数据传输单元

 

type PipelinePack struct{

message.Message //处理后的数据,一个类似于hanshmap的多级嵌套数据结构

MsgByte //原始数据, []byte

}

 

系统中日志数据以PipelinePack数据来在流水线作业之间传递

2.3.2 系统初始化加载方式

  • 启动模式
    uparse -config   xxx.toml  
    uparse -config  config_dir
     
  • 组件注册
    系统初始化时,注册所有的插件到系统(input、output、filter、encoder、decoder),注册形式为 key:FactoryFunc
  • 插件启动和调度
    主goroutine根据配置文件管理类PipelineConfig启动各个插件
    首先启动outout插件,然后是filter插件,然后启动router,为filter和output插件建立消息传递通道

2.3.3 插件运行模式

  • Input、Filter、Output都运行在自己的goroutine,保持高的并发性
  • 各个组件之间使用channel或者文件buffer通信
  • 插件的生命周期由PluginRunners管理
  • 插件与goroutine的紧密耦合保持了并发的完整
  • 组件之间的关联
    input与decoder的关系是,属于inout的一个组件,每个input只接收一种格式数据源;
    input与filter之间通过router进行交互,多对多的对应关系;
    filter与output之间也是使用router进行交互,多对多的关系;
    encode和output之间也是从属关系, encode内嵌在output中,在数据输出之前按照encoder进行序列化
    %E7%BB%84%E4%BB%B6%E8%81%94%E7%B3%BB%20%281%29.png?version=1&modificationDate=1499916870000&api=v2
     

2.3.4 消息路由

  • 消息decode完成后使用router将数据传输到相应的filter插件和output插件
  • filter和output需要指定message matcher

方式:根据某些字段规则进行路由,规则由使用yacc语法解析,支持一下规则

1:Type == “test” && Severity == 6

2:Fields[MyBool] == TRUE

3: Type =~ /test/

  • message matcher运行在自己的goroutine,很快

2.3.5 SANDBOX-lua

  • 插件可以使用lua实现
  • lua加载模式为golang使用cgo调用lua脚本
  • lua可以动态加载,方便插件升级
  • lua属于性能比较快的脚本语言
  • lua的常用方式

2.3.6 消息路由缓冲队列

router提供了两种消息队列

  • golang内部channel机制(内存buffer,线程安全)
  • 使用文件作为缓冲buffer(磁盘buffer)

2.3.7 插件扩展

对所有的插件扩展开发提供了标准规范

    • golang插件实现特定接口,然后注册到系统

      type Input interface {

          Run(ir InputRunner, h PluginHelper) (err error)

          Stop()

      }

      type Decoder interface {

          Decode(pack *PipelinePack) (packs []*PipelinePack, err error)

      }

      type Filter interface {

          Prepare(fr FilterRunner, h PluginHelper) (err error)

          ProcessMessage(pack *PipelinePack) (err error)

          CleanUp()

      }

      type Encoder interface {

          Encode(pack *PipelinePack) (output []byte, err error)

      }

      type Output interface {

          Prepare(or OutputRunner, h PluginHelper) (err error)

          ProcessMessage(pack *PipelinePack) (err error)

          CleanUp()

      }

    • lua插件需要实现特定函数,然后将lua文件放到系统lua脚本文件夹下即可进行加载
          lua插件开发规范

3. 系统类图

UParse%E7%BB%84%E4%BB%B6%E5%9B%BE%20%283%29.png?version=1&modificationDate=1499917952000&api=v2

 

4 问题

转载于:https://my.oschina.net/miffa/blog/1509491

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值