open-falcon监控系统组件学习之——agent组件

本文深入解析小米Open-Falcon监控系统中的Agent模块,包括启动流程、数据采集机制及自定义插件编写方法。Agent作为核心组件,通过RPC与Server端通信,定时收集CPU、硬盘信息,并支持自定义监控数据的上报。

agent是监控系统中比较重要的一块,小米的oprn-falcon采用rpc的方式与server端进行通信,点击agent可以看到源码,当然,后面随着代码commit,本文介绍的部分内容会与实际代码不同,但思路是不会变的。

一、 Agent 模块启动流程

1. flag参数

main函数是整个agnet代码的入口,我们从这里开始进行分析。

cfg := flag.String("c", "cfg.json", "configuration file")
version := flag.Bool("v", false, "show version")
check := flag.Bool("check", false, "check collector")

flag.Parse()

首先通过flag包接收参数,用来配置agent,它包括以下三个参数:

  • v参数用来查看agent的版本。
  • check会调用funcs.CheckCollector()来检查当前环境是否可用,并且输出输出检查结果:
  • c参数用来指定配置文件
2.初始化

加载完配置文件后,main函数调用下面三个函数进行初始化:

  • g.InitRootDir()
var Root string
// 这个函数用来获取当前路径PWD的值
func InitRootDir() {
   
   
	var err error
	Root, err = os.Getwd()
	if err != nil {
   
   
		log.Fatalln("getwd fail:", err)
	}
}
  • g.InitLocalIp()
var LocalIp string
// 获取当前agent所在主机的IP
func InitLocalIp() {
   
   
	if Config().Heartbeat.Enabled {
   
   
		conn, err := net.DialTimeout("tcp", Config().Heartbeat.Addr, time.Second*10)
		if err != nil {
   
   
			log.Println("get local addr failed !")
		} else {
   
   
			LocalIp = strings.Split(conn.LocalAddr().String(), ":")[0]
			conn.Close()
		}
	} else {
   
   
		log.Println("hearbeat is not enabled, can't get localip")
	}
}
  • g.InitRpcClients()
var (
	HbsClient *SingleConnRpcClient
)
# 初始化一个rpc客户端
func InitRpcClients() {
   
   
	if Config().Heartbeat.Enabled {
   
   
		HbsClient = &SingleConnRpcClient{
   
   
			RpcServer: Config().Heartbeat.Addr,
			Timeout:   time.Duration(Config().Heartbeat.Timeout) * time.Millisecond,
		}
	}
}
3.更新CPU和硬盘信息

接着main函数创建了一个Goroutine,调用了cron.InitDataHistory(),这是一个定期更新CPU和硬盘信息的函数。

func InitDataHistory() {
   
   
	for {
   
   
		funcs
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值