heka 輸出到mysql HEKA 系統介紹

2021-10-21 08:50:24 字數 2686 閱讀 5503

1. 系統介紹

日誌收集服務

golang

golnag/lua擴充套件

流水線作業

2. uparse系統說明

2.1系統結構

2.1 主要模組

pipeline-config

核心排程模組,跟據配置檔案啟動相應的外掛程式,啟動流水線

input

從資料來源讀取資料,包括kafka_input,tcp_input等

decoder

將資料解析成特定,有json,nginx等

filter

對資料進行聚合,計算,過濾

encoder

對資料重新編碼成特定格式

output

輸出資料到外部儲存或通道

router

根據資料某些欄位對filter和output進行路由

2.3 主要特性

2.3.1系統資料傳輸單元

typepipelinepack struct{

message.message //處理後的資料,乙個類似於hanshmap的多級巢狀資料結構

msgbyte //原始資料, byte

系統中日誌資料以pipelinepack資料來在流水線作業之間傳遞

2.3.2 系統初始化載入方式

啟動模式

uparse -config   ***.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進行序列化

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 inte***ce {

run(ir inputrunner, h pluginhelper) (err error)

stop()

type decoder inte***ce {

decode(pack *pipelinepack) (packs *pipelinepack, err error)

type filter inte***ce {

prepare(fr filterrunner, h pluginhelper) (err error)

processmessage(pack *pipelinepack) (err error)

cleanup()

type encoder inte***ce {

encode(pack *pipelinepack) (output byte, err error)

type output inte***ce {

prepare(or outputrunner, h pluginhelper) (err error)

processmessage(pack *pipelinepack) (err error)

cleanup()

lua外掛程式需要實現特定函式,然後將lua檔案放到系統lua指令碼資料夾下即可進行載入

lua外掛程式開發規範

3. 系統類圖

4 問題

頁面輸出到EXCEL

其實,利用asp.net輸出指定內容的word excel txt htm等型別的文件很容易的。主要分為三步來完成。一 定義文件型別 字元編碼 response.clear response.buffer true response.charset utf 8 filename fileflow.x...

c 除錯輸出到輸出視窗

首先新增預處理定義 crt secure no warnings 例子 除錯輸出 d和 d n 123,500 void 除錯輸出 const char stroutputstring,va list vlargs va start vlargs,stroutputstring vsnprintf ...

使cout輸出到檔案

方法1 最笨 fstream output 把cout全部替換成output。方法2 利用命名空間自定義乙個cout namespace calendar 函式內 using calendar cout 在當前作用域內的cout實現全部輸出到檔案 方法3 最好 改變cout的輸出物件,使其輸出到檔案...