37.2 prometheus分析接口源码讲解

server/2024/12/26 19:55:10/

本节重点介绍 :

  • 获取配置文件 config
  • 获取运行信息 runtimeinfo
  • 编译的信息 buildinfo
  • tsdb统计信息 tsdb
  • walreplay的信息
  • target统计信息
  • 获取metrics的元信息

状态信息相关

获取配置文件

  • path /api/v1/status/config
  • 代码位置 D:\go_path\src\github.com\prometheus\prometheus\web\api\v1\api.go
func (api *API) serveConfig(_ *http.Request) apiFuncResult {cfg := &prometheusConfig{YAML: api.config().String(),}return apiFuncResult{cfg, nil, nil, nil}
}
  • 通过yaml.Marshal获取配置

获取运行信息

  • path /api/v1/status/runtimeinfo
func (api *API) serveRuntimeInfo(_ *http.Request) apiFuncResult {status, err := api.runtimeInfo()if err != nil {return apiFuncResult{status, &apiError{errorInternal, err}, nil, nil}}return apiFuncResult{status, nil, nil, nil}
}

底层信息函数

func (h *Handler) runtimeInfo() (api_v1.RuntimeInfo, error) {status := api_v1.RuntimeInfo{StartTime:      h.birth,CWD:            h.cwd,GoroutineCount: runtime.NumGoroutine(),GOMAXPROCS:     runtime.GOMAXPROCS(0),GOGC:           os.Getenv("GOGC"),GODEBUG:        os.Getenv("GODEBUG"),}if h.options.TSDBRetentionDuration != 0 {status.StorageRetention = h.options.TSDBRetentionDuration.String()}if h.options.TSDBMaxBytes != 0 {if status.StorageRetention != "" {status.StorageRetention = status.StorageRetention + " or "}status.StorageRetention = status.StorageRetention + h.options.TSDBMaxBytes.String()}metrics, err := h.gatherer.Gather()if err != nil {return status, errors.Errorf("error gathering runtime status: %s", err)}for _, mF := range metrics {switch *mF.Name {case "prometheus_tsdb_wal_corruptions_total":status.CorruptionCount = int64(toFloat64(mF))case "prometheus_config_last_reload_successful":status.ReloadConfigSuccess = toFloat64(mF) != 0case "prometheus_config_last_reload_success_timestamp_seconds":status.LastConfigTime = time.Unix(int64(toFloat64(mF)), 0).UTC()}}return status, nil
}
  • 字段解读
    • StartTime 启动时间
    • CWD 运行位置
    • GoroutineCount 代表goroutine数量
    • GOMAXPROCS 代表p数量
    • lastConfigTime 上次加载配置文件的时间
    • ReloadConfigSuccess 上次加载配置文件是否成功

编译的信息

  • path /api/v1/status/buildinfo
  • 字段解读
    • version 版本信息
    • revision commit号
    • branch 分支
    • buildUser 编译的user
    • buildDate 编译的时间
    • goVersion go版本

命令行参数

	cfg.web.Flags = map[string]string{}// Exclude kingpin default flags to expose only Prometheus ones.boilerplateFlags := kingpin.New("", "").Version("")for _, f := range a.Model().Flags {if boilerplateFlags.GetFlag(f.Name) != nil {continue}cfg.web.Flags[f.Name] = f.Value.String()}

tsdb统计信息

  • path /api/v1/status/tsdb
  • 源码在 32.2和倒排索引一起讲了

walreplay的信息

  • /api/v1/status/walreplay
func (api *API) serveWALReplayStatus(w http.ResponseWriter, r *http.Request) {httputil.SetCORS(w, api.CORSOrigin, r)status, err := api.db.WALReplayStatus()if err != nil {api.respondError(w, &apiError{errorInternal, err}, nil)}api.respond(w, walReplayStatus{Min:     status.Min,Max:     status.Max,Current: status.Current,}, nil)
}

target统计信息

  • path /api/v1/targets
  • target源码在 24.2讲解过了

获取metrics的元信息

  • path /api/v1/metadata
  • 底层来自于 Target.metadata字段,位置 D:\go_path\src\github.com\prometheus\prometheus\scrape\target.go
type Target struct {// Labels before any processing.discoveredLabels labels.Labels// Any labels that are added to this target and its metrics.labels labels.Labels// Additional URL parameters that are part of the target URL.params url.Valuesmtx                sync.RWMutexlastError          errorlastScrape         time.TimelastScrapeDuration time.Durationhealth             TargetHealthmetadata           MetricMetadataStore
}

本节重点总结 :

  • 获取配置文件 config
  • 获取运行信息 runtimeinfo
  • 编译的信息 buildinfo
  • tsdb统计信息 tsdb
  • walreplay的信息
  • target统计信息
  • 获取metrics的元信息

http://www.ppmy.cn/server/153421.html

相关文章

1. 深度学习介绍

深度学习关系 如下图,深度学习是机器学习的一部分 深度学习怎么个“深度”法 传统机器学习不能主动进行特征学习,需要人为进行特征工程提取特征,所以只是浅层学习。 而深度学习可以自动学习特征。 也就是说:深度学习传动机器学…

Java语言的网络编程

Java语言的网络编程 网络编程是现代软件开发中不可或缺的一部分。随着互联网的普及和信息技术的发展,网络编程的应用越来越广泛。Java语言以其平台独立性、强大的库支持和简洁的语法,成为了网络编程的热门选择。本文将深入探讨Java网络编程的基本概念、…

linux创建虚拟串口

要将一个终端bash作为串口,并使其可以被pyserial打开,你可以使用 socat 工具。socat 是一个多功能的网络工具,可以创建虚拟串口对。以下是具体步骤: 安装 socat: bash复制代码 sudo apt-get install socat 创建虚拟串…

某科技局国产服务器PVE虚拟化技术文档

环境介绍 硬件配置 服务器品牌:黄河 型号:Huanghe 2280 V2 Cpu型号:kunpeng-920 磁盘信息 :480SSD * 2 ,4T*4 网卡:板载四口千兆 如下表 四台服务器同等型号配置,均做单节点虚拟化,数据保护采用底层r…

iOS开发代码块-OC版

iOS开发代码块-OC版 资源分享资源使用详情Xcode自带代码块自定义代码块 资源分享 自提: 通过网盘分享的文件:CodeSnippets 2.zip 链接: https://pan.baidu.com/s/1Yh8q9PbyeNpuYpasG4IiVg?pwddn1i 提取码: dn1i Xcode中的代码片段默认放在下面的目录中…

HarmonyOS NEXT 实战之元服务:静态案例效果--- 手机一键加速、手机垃圾清理

背景: 前几篇学习了元服务,后面几期就让我们开发简单的元服务吧,里面丰富的内容大家自己加,本期案例 仅供参考 先上本期效果图 ,里面图片自行替换 效果图1完整代码案例如下: import { authentication } …

Scala课堂小结

(一)数组: 1.不可变数组 2.创建数组

使用Python实现智能家居控制系统:开启智慧生活的钥匙

友友们好! 我的新专栏《Python进阶》正式启动啦!这是一个专为那些渴望提升Python技能的朋友们量身打造的专栏,无论你是已经有一定基础的开发者,还是希望深入挖掘Python潜力的爱好者,这里都将是你不可错过的宝藏。 在这个专栏中,你将会找到: ● 深入解析:每一篇文章都将…