因為各種各樣的原因,好久沒有寫部落格了,還是希望能夠堅持下來
講解一下filebeat
的啟動流程吧,核心功能先不描述了0.0
filebeat
啟動入口在main.go
檔案內,cmd.rootcmd.execute()
啟動filebeat
;
func
main()
}
在filebeat/cmd/root.go
檔案內,載入&初始化相關的配置,以及構建filebeat
物件。下面**裡的beater.new
方法會構建了filebeat
物件。genrootcmdwithsettings
方法內會構建啟動filebeat
相關命令。
var rootcmd *cmd.beatsrootcmd
func
init()
)...
}
genrootcmdwithsettings
函式在filebeat/libbeat/cmd/root.go
檔案內。此函式內會呼叫filebeat/libbeat/cmd/run.go
檔案內的func genruncmd(settings instance.settings, beatcreator beat.creator) *cobra.command
方法。
func
genruncmd
(settings instance.settings, beatcreator beat.creator)
*cobra.command },
}...
}
根據方法名字就能關注到重點
instance.
run(settings, beatcreator)
run
方法內會構建beat
物件,並呼叫launch
方法。ps:go
裡面物件的命名真是蛋疼
b, err :=
newbeat
(name, idxprefix, version)
...return b.
launch
(settings, bt)
launch
方法內又構建了beater
物件(beater
是個介面),並且在最後呼叫了beater
介面的run
方法啟動。這個介面有多個實現,但是我們這裡只需要關注乙個,檔案filebeat/beater/filebeat.go
檔案內的run
方法,這裡就是啟動filebeat
的實現。
func
(b *beat)
launch
(settings settings, bt beat.creator)
error
在run
方法內,會構建乙個crawler
物件,此物件用來採集資料,工作原理其實是對inputs
的包裝,inputs
就是filebeat
官網介紹的核心元件之一。
// run allows the beater to be run as a beat.
func
(fb *filebeat)
run(b *beat.beat)
error
... err = crawler.
start
(b.publisher, registrar, config.configinput, config.configmodules, pipelineloade***ctory, config.overwritepipelines)
if err !=
nil...
}
至此整個filebeat
啟動流程基本清晰了。 filebeat 資料採集流程
filebeat啟動流程 講解了filebeat的啟動流程,filebeat在構建完crawler物件,開始採集流程。crawler的start方法內,會啟動inputs func c crawler start pipeline beat.pipeline,r registrar.registra...
uboot啟動流程概述 uboot啟動流程
u boot系統啟動流程 大多數bootloader都分為stage1和stage2兩大部分,u boot也不例外。依賴於cpu體系結構的 如裝置初始化 等 通常都放在stage1,且可以用組合語言來實現,而stage2則通常用c語言來實現,這樣可以實現複雜的功能,而且有更好的可讀性和移植性。2.1...
activity啟動流程 App啟動流程三問
裡面涉及到哪些重要的成員呢?都分別負責了什麼,比如ams?啟動流程了解後,對我們開發有什麼幫助呢?1 比如啟動優化,分析啟動過程,其實可以優化啟動速度的地方有三個地方 activity的oncreate方法,同樣進行執行緒處理,懶載入。或者預建立activity,提前類載入等等。2 又比如外掛程式化...