源文件 | 行号 | 函数 | 说明 |
---|---|---|---|
app/vmselect/main.go | 63 | main | 入口 92行调用 requestHandler |
app/vmselect/main.go | 132 | -requestHandler | 处理http协议的入口 222行调用 selectHandler |
app/vmselect/main.go | 236 | --selectHandler | 处理查询逻辑 326行调用 prometheus.QueryRangeHandler |
app/vmselect/prometheus/prometheus.go | 1197 | ---QueryRangeHandler | 处理 /api/v1/query_range 1221调用queryRangeHandler |
app/vmselect/prometheus/prometheus.go | 1227 | ----queryRangeHandler | 查询的业务逻辑 1263行调用promql.Exec |
app/vmselect/promql/exec.go | 29 | -----Exec | 根据解析好的promql,执行查询逻辑 44行执行evalExpr |
app/vmselect/promql/eval.go | 203 | ------evalExpr | 根据解析好的metricsql.Expr结构,执行查询 (先看简单的根据一个监控项名字查询的情形)208行调用evalRollupFunc |
app/vmselect/promql/eval.go | 499 | -------evalRollupFunc | 执行汇总函数 526行调用evalRollupFuncWithMetricExpr |
app/vmselect/promql/eval.go | 665 | --------evalRollupFuncWithMetricExpr | 查询单个监控项的情况 703行调用netstorage.ProcessSearchQuery |
app/vmselect/netstorage/netstorage.go | 1405 | ---------ProcessSearchQuery | 把请求发到存储层 1439行调用processSearchQuery |
app/vmselect/netstorage/netstorage.go | 1471 | ----------processSearchQuery | 请求,并阻塞等待结果 1476行调用startStorageNodesRequest 1478行调用processSearchQuery |
app/vmselect/netstorage/netstorage.go | 1502 | -----------startStorageNodesRequest | 广播到所有存储节点 这里可以说明:vm-select到vm-storage这个路径上,对于选择后端的存储并没有复杂的算法,暴力广播而已! |
app/vmselect/netstorage/netstorage.go | 1853 | ------------func (sn *storageNode) processSearchQuery | 这里调用了sn.execOnConnWithPossibleRetry 可以看见,使用了 search_v4 这条命令来请求vm-storage |
app/vmselect/netstorage/netstorage.go | 1531 | -----------func (snr *storageNodesRequest) collectResults | processSearchQuery中调用collectResults来处理广播后的结果 |