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

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

被折叠的 条评论
为什么被折叠?



