本文主要是介绍filebeat 启动流程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
因为各种各样的原因,好久没有写博客了,还是希望能够坚持下来
讲解一下filebeat
的启动流程吧,核心功能先不描述了0.0
filebeat
启动入口在main.go
文件内, cmd.RootCmd.Execute()
启动filebeat
;
func main() {if err := cmd.RootCmd.Execute(); err != nil {os.Exit(1)}
}
在 filebeat/cmd/root.go
文件内,加载&初始化相关的配置,以及构建filebeat
对象。下面代码里的beater.New
方法会构建了filebeat
对象。GenRootCmdWithSettings
方法内会构建启动filebeat
相关命令。
var RootCmd *cmd.BeatsRootCmdfunc init() {...RootCmd = cmd.GenRootCmdWithSettings(beater.New, instance.Settings{RunFlags: runFlags, Name: Name})...
}
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 {name := settings.NamerunCmd := cobra.Command{Use: "run",Short: "Run " + name,Run: func(cmd *cobra.Command, args []string) {err := instance.Run(settings, beatCreator)if err != nil {os.Exit(1)}},}...
}
根据方法名字就能关注到重点
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 {...beater, err := b.createBeater(bt)...return beater.Run(&b.Beat)
}
在Run
方法内,会构建一个crawler
对象,此对象用来采集数据,工作原理其实是对Inputs
的包装,Inputs
就是filebeat
官网介绍的核心组件之一。
// Run allows the beater to be run as a beat.
func (fb *Filebeat) Run(b *beat.Beat) error {...crawler, err := crawler.New(channel.NewOutletFactory(outDone, wgEvents).Create,config.Inputs,b.Info.Version,fb.done,*once)if err != nil {logp.Err("Could not init crawler: %v", err)return err}...err = crawler.Start(b.Publisher, registrar, config.ConfigInput, config.ConfigModules, pipelineLoaderFactory, config.OverwritePipelines)if err != nil {crawler.Stop()return err}...
}
至此整个filebeat
启动流程基本清晰了。
这篇关于filebeat 启动流程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!