Junsheng-Wu.github.io

返回

TSDB 数据存储流程及数据压缩过程

avatar

ScrapeManager 管理targets, 每一个target 生成一个 ScrapePool.

关键协程及关键函数

- prometheus/main.go

//生成 scrapeManager 传入fanoutStorage
scrapeManager = scrape.NewManager(log.With(logger, "component", "scrape manager"), fanoutStorage)


- scrape/manager.go 

// 每一个 targetSet 生成一个scrapeLoop, m.append 即为传入的fanoutStorage
    newScrapePool(scrapeConfig, m.append, m.jitterSeed, log.With(m.logger, "scrape_pool", setName)

- scrape/scrape.go
    同步所有的scrapePool
    go func(sp *scrapePool, groups []*targetgroup.Group) {
        sp.Sync(groups)
        wg.Done()
    }(m.scrapePools[setName], groups)
    

    每一个target运行一个协程执行进行抓取动作
    go l.run(interval, timeout, nil)
    
// appender 追加并提交抓取到的数据    
1.    sl.scrapeAndReport(interval, timeout, last, scrapeTime, errc)

2.    app := sl.appender(sl.parentCtx)

3.    sl.append(app, b, contentType, appendTime)
    
4.    app.Append(ref, lset, t, v)

5.    app.Commit()

HeadAppender 追加数据到Head中。

avatar

Head 存储流程

Compact