filebeat 启动流程

2024-02-29 19:48
文章标签 流程 启动 filebeat

本文主要是介绍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 启动流程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/759875

相关文章

SpringBoot启动报错的11个高频问题排查与解决终极指南

《SpringBoot启动报错的11个高频问题排查与解决终极指南》这篇文章主要为大家详细介绍了SpringBoot启动报错的11个高频问题的排查与解决,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一... 目录1. 依赖冲突:NoSuchMethodError 的终极解法2. Bean注入失败:No qu

一文带你了解SpringBoot中启动参数的各种用法

《一文带你了解SpringBoot中启动参数的各种用法》在使用SpringBoot开发应用时,我们通常需要根据不同的环境或特定需求调整启动参数,那么,SpringBoot提供了哪些方式来配置这些启动参... 目录一、启动参数的常见传递方式二、通过命令行参数传递启动参数三、使用 application.pro

SpringBoot项目启动报错"找不到或无法加载主类"的解决方法

《SpringBoot项目启动报错找不到或无法加载主类的解决方法》在使用IntelliJIDEA开发基于SpringBoot框架的Java程序时,可能会出现找不到或无法加载主类com.example.... 目录一、问题描述二、排查过程三、解决方案一、问题描述在使用 IntelliJ IDEA 开发基于

Spring AI ectorStore的使用流程

《SpringAIectorStore的使用流程》SpringAI中的VectorStore是一种用于存储和检索高维向量数据的数据库或存储解决方案,它在AI应用中发挥着至关重要的作用,本文给大家介... 目录一、VectorStore的基本概念二、VectorStore的核心接口三、VectorStore的

python之流程控制语句match-case详解

《python之流程控制语句match-case详解》:本文主要介绍python之流程控制语句match-case使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录match-case 语法详解与实战一、基础值匹配(类似 switch-case)二、数据结构解构匹

SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法

《SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法》本文主要介绍了SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法,具有一定的参考价值,感兴趣的可以了解一下... 目录方法1:更改IDE配置方法2:在Eclipse中清理项目方法3:使用Maven命令行在开发Sprin

在VSCode中本地运行DeepSeek的流程步骤

《在VSCode中本地运行DeepSeek的流程步骤》本文详细介绍了如何在本地VSCode中安装和配置Ollama和CodeGPT,以使用DeepSeek进行AI编码辅助,无需依赖云服务,需要的朋友可... 目录步骤 1:在 VSCode 中安装 Ollama 和 CodeGPT安装Ollama下载Olla

linux环境openssl、openssh升级流程

《linux环境openssl、openssh升级流程》该文章详细介绍了在Ubuntu22.04系统上升级OpenSSL和OpenSSH的方法,首先,升级OpenSSL的步骤包括下载最新版本、安装编译... 目录一.升级openssl1.官网下载最新版openssl2.安装编译环境3.下载后解压安装4.备份

C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)

《C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)》本文主要介绍了C#集成DeepSeek模型实现AI私有化的方法,包括搭建基础环境,如安装Ollama和下载DeepS... 目录前言搭建基础环境1、安装 Ollama2、下载 DeepSeek R1 模型客户端 ChatBo

Nginx启动失败:端口80被占用问题的解决方案

《Nginx启动失败:端口80被占用问题的解决方案》在Linux服务器上部署Nginx时,可能会遇到Nginx启动失败的情况,尤其是错误提示bind()to0.0.0.0:80failed,这种问题通... 目录引言问题描述问题分析解决方案1. 检查占用端口 80 的进程使用 netstat 命令使用 ss