文章目录

  • 1. 不带lab的Gauge
    • 1.1 定义指标
      • 语法
      • 完整示例
    • 1.2 给指标取值
      • 语法
      • 完整示例
  • 2. 带lab的Gauge
    • 2.1 定义指标
      • 语法
      • 完整示例
    • 2.2 取值
      • 语法
      • 完整示例

特点:数据可增减(反应当前状态)。

1. 不带lab的Gauge

1.1 定义指标

语法

  • 实例化
func NewGauge(opts GaugeOpts) Gauge
  • GaugeOpts
type GaugeOpts Opts
  • 结构体Opts
type Opts struct {Namespace   stringSubsystem   stringName        stringHelp        stringConstLabels Labels
}

完整示例

  • 写一段简单的exporter如下:
package mainimport ("flag""github.com/prometheus/client_golang/prometheus""github.com/prometheus/client_golang/prometheus/promhttp""log""net/http"
)//自定义端口
var addr = flag.String("listen-address", ":1840", "The address to listen on for HTTP requests")var (numOfBuns = prometheus.NewGauge(prometheus.GaugeOpts{Namespace: "xi_shu",Subsystem: "jing_zhou_team",Name:      "guanyu_eaten_num",Help:      "Number of steamed buns eaten by Guan Yu",})
)func init() {prometheus.MustRegister(numOfBuns)
}func main() {flag.Parse()http.Handle("/metrics", promhttp.Handler())log.Fatal(http.ListenAndServe(*addr, nil))
}
  • 结果如下
    我们访问http://127.0.0.1:1840/metrics页面,可以找到如下一段
# HELP xi_shu_jing_zhou_team_guanyu_eaten_num Number of steamed buns eaten by Guan Yu
# TYPE xi_shu_jing_zhou_team_guanyu_eaten_num gauge
xi_shu_jing_zhou_team_guanyu_eaten_num 0

如上可知,我们的指标是用Opts结构体的实例化拼接出来的。

1.2 给指标取值

语法

  • add() 增加n
func (Gauge) Add(float64)
  • sub() 减去n
func (Gauge) Sub(float64)
  • Inc() 增加1
func (Gauge) Inc()
  • dec() 减少1
func (Gauge) Dec()
  • set() 重新设置
func (Gauge) Set(float64)
  • 设置值为当前时间时间戳
func (Gauge) SetToCurrentTime()

完整示例

  • 代码
package mainimport ("flag""github.com/prometheus/client_golang/prometheus""github.com/prometheus/client_golang/prometheus/promhttp""log""net/http""time"
)
var addr = flag.String("listen-address", ":1840", "The address to listen on for HTTP requests")var (numOfBuns = prometheus.NewGauge(prometheus.GaugeOpts{Namespace: "xi_shu",Subsystem: "jing_zhou_team",Name:      "guanyu_eaten_num",Help:      "Number of steamed buns eaten by Guan Yu",})
)func init() {prometheus.MustRegister(numOfBuns)
}func main() {flag.Parse()go func() {for true {numOfBuns.Add(2)time.Sleep(time.Second)}}()http.Handle("/metrics", promhttp.Handler())log.Fatal(http.ListenAndServe(*addr, nil))
}
  • 结果

我们不断刷新可见,每秒钟关羽吃的馒头+2

# HELP xi_shu_jing_zhou_team_guanyu_eaten_num Number of steamed buns eaten by Guan Yu
# TYPE xi_shu_jing_zhou_team_guanyu_eaten_num gauge
xi_shu_jing_zhou_team_guanyu_eaten_num 24

2. 带lab的Gauge

2.1 定义指标

语法

  • 实例化
func NewGaugeVec(opts GaugeOpts, labelNames []string) *GaugeVec
  • GaugeOpts 见上例

完整示例

package mainimport ("flag""github.com/prometheus/client_golang/prometheus""github.com/prometheus/client_golang/prometheus/promhttp""log""net/http""time"
)//自定义端口
var addr = flag.String("listen-address", ":1840", "The address to listen on for HTTP requests")var (numOfBuns = prometheus.NewGaugeVec(prometheus.GaugeOpts{Namespace: "xi_shu",Subsystem: "jing_zhou_team",Name:      "eaten_num",Help:      "Number of steamed buns eaten by Guan Yu",},[]string{"name","age"})
)func init() {prometheus.MustRegister(numOfBuns)
}func main() {flag.Parse()http.Handle("/metrics", promhttp.Handler())log.Fatal(http.ListenAndServe(*addr, nil))
}
  • 结果显示
    有lab的Counter没有赋值是看不见的(而上例可知,没有tag的Counter模式值是0。)

2.2 取值

语法

  • 添加lab
    实例化之后,需要先给实例打上lab,因为不同的lab会单独作为一个数据显示。
func (v *GaugeVec) WithLabelValues(lvs ...string) Gauge
  • 取值

见前文,同“不带lab的Gauge”

完整示例

  • 代码如下
package mainimport ("flag""github.com/prometheus/client_golang/prometheus""github.com/prometheus/client_golang/prometheus/promhttp""log""net/http""time"
)//自定义端口
var addr = flag.String("listen-address", ":1840", "The address to listen on for HTTP requests")var (numOfBuns = prometheus.NewGaugeVec(prometheus.GaugeOpts{Namespace: "xi_shu",Subsystem: "jing_zhou_team",Name:      "eaten_num",Help:      "Number of steamed buns eaten by Guan Yu",},[]string{"name","age"})
)func init() {prometheus.MustRegister(numOfBuns)
}func main() {flag.Parse()go func() {for true {numOfBuns.WithLabelValues("guan_yu","25").Add(2)time.Sleep(time.Second)}}()go func() {for true {numOfBuns.WithLabelValues("zhang_fei","22").Add(3)time.Sleep(time.Second)}}()http.Handle("/metrics", promhttp.Handler())log.Fatal(http.ListenAndServe(*addr, nil))
}
  • 结果
# HELP xi_shu_jing_zhou_team_eaten_num Number of steamed buns eaten by Guan Yu
# TYPE xi_shu_jing_zhou_team_eaten_num gauge
xi_shu_jing_zhou_team_eaten_num{age="22",name="zhang_fei"} 21
xi_shu_jing_zhou_team_eaten_num{age="25",name="guan_yu"} 14

动手写prometheus的exporter-01-Gauge(仪表盘)相关推荐

  1. 自己动手写一个印钞机 第四章

    2019独角兽企业重金招聘Python工程师标准>>> 作者:阿布? 未经本人允许禁止转载 ipython notebook git版本 目录章节地址: 自己动手写一个印钞机 第一章 ...

  2. 深入学习Tomcat----自己动手写服务器(附服务器源码)

    相信大多Web开发者对Tomcat是非常熟悉的,众所周知Tomcat是一款非常好用的开源Servlet容器,您一定对这个最流行的Servlet容器充满好奇,虽然它并不像一个黑盒子那样让人无法触摸但是T ...

  3. 自己动手写Tomcat

    今天看到有人写了个简单的tomcat,让我想起多年以前自己也写了个demo,兴奋了好意振.贴出来分享下.有些简陋...   自定义服务器及浏览器.rar 转: 最近研究一方socket编程,由于想动手 ...

  4. 技术实践丨Prometheus+Grafana搭建HBase监控仪表盘

    摘要:Grafana+Prometheus是目前非常流行的监控方案,图形化展示非常强大. 本文分享自华为云社区<Prometheus+Grafana搭建HBase监控仪表盘>,原文作者:L ...

  5. 自己动手写Docker系列 -- 6.3 手动配置容器网络(下)

    简介 网络部分较为复杂,本篇先利用之前写好的基础容器和网桥部分,加上手工给容器配置网络,让其容器与外部网络部分功能正常,为后面程序编写打下基础 源码说明 同时放到了Gitee和Github上,都可进行 ...

  6. 【无标题】自己动手写Docker系列 -- 6.3 手动配置容器网络(上)

    简介 网络部分较为复杂,本篇先利用之前写好的基础容器和网桥部分,加上手工给容器配置网络,让其容器与宿主机网络部分功能正常,为后面程序编写打下基础 源码说明 同时放到了Gitee和Github上,都可进 ...

  7. 自己动手写Docker系列 -- 3.1构造实现run命令版本的容器

    简介 通过对前面Linux的Namespace.Cgroups.Union File System的学习,对Docker实现的基础知识有了一点点了解,接下来就跟着作者开始编写 源码说明 同时放到了Gi ...

  8. php怎么自己写框架,PHP学习笔记,自己动手写个MVC的框架

    最新在大家自己的博客的过程中,发现各种开源的博客系统都或多或少的用起来别扭.于是想动手自己写个博客系统.既然写,就想好好写.那就先写个MVC框架.一点一点来.写的过程中有很多想法.还希望大家能够多多指 ...

  9. 自己动手写一个简单的bootloader

    自己动手写一个简单的bootloader 15年10月31日19:44:27 (一) start.S 写这一段代码前,先要清楚bootloader开始的时候都做什么了.无非就是硬件的初始化,我们想要写 ...

最新文章

  1. office技巧——编号与文字之间的空白大小调整
  2. cmd锁定计算机病毒,反病毒常用CMD命令大全
  3. golang LMDB入门例子——尼玛,LMDB的文档真的是太少了
  4. 解决LNMP环境下客户端远程连接不上mysql的问题(已经排除防火墙/selinux问题)...
  5. JPA注解(这里包含sequence类型的)
  6. 20160411作业
  7. 分區策略與數據傾斜處理策略的區別
  8. 具有Java 8支持的Spring Framework 4.0.3和Spring Data Redis 1.2.1
  9. python花萼长度表_python描述性统计实践
  10. w ndows8系统没有声音怎么,Windows 8.1 系统新装没有声音
  11. 程序员如何在 HTTPS 中高效配置通配符证书?| 技术头条
  12. sqlDevelopor客户端操作MySQL数据库
  13. HDU 5971 2016ICPC大连 A: Wrestling Match(二分图判断)
  14. RDKit | 处理RDKit分子Mol对象
  15. 五种开源协议的比较(BSD,Apache,GPL,LGPL,MIT)
  16. 如果有人问你爬虫抓取技术的门道,请叫他来看这篇文章
  17. mysql 存正负数_mysql 存储负数
  18. [转]ASP.NET 安全认证(三): 用Form 表单认证实现单点登录
  19. rk3399 Android9.0 ota升级失败
  20. 什么是make/Makefile?

热门文章

  1. HDU 4861 Couple doubi
  2. chrome 插件 页面请求转发_入门chrome插件开发教程和经验总结,一篇就搞掂!
  3. oracle pga 1407,ogg replicat OGG-00869 OCI Error ORA-01407 OGG-01154 SQL error 1407
  4. GPUImage 过滤器相关
  5. 成都线上果蔬超市APP软件开发能够为用户提供什么?
  6. testlink mysql配置_TestLink环境搭建
  7. 3D游戏建模选什么专业
  8. 【会助力】多样化签到方式,让会议灵活高效
  9. .NET开发工程师(中兴微品)
  10. 基于SVM的多故障分类器|和车神哥一起学系列