当前位置:网站首页>动手写prometheus的exporter-01-Gauge(仪表盘)
动手写prometheus的exporter-01-Gauge(仪表盘)
2022-08-08 23:01:00 【开发运维玄德公】
特点:数据可增减(反应当前状态)。
1. 不带lab的Gauge
1.1 定义指标
语法
- 实例化
func NewGauge(opts GaugeOpts) Gauge
- GaugeOpts
type GaugeOpts Opts
- 结构体Opts
type Opts struct {
Namespace string
Subsystem string
Name string
Help string
ConstLabels Labels
}
完整示例
- 写一段简单的exporter如下:
package main
import (
"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 main
import (
"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 main
import (
"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 main
import (
"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
边栏推荐
猜你喜欢
随机推荐
Analysis of WLAN - Wireless Local Area Network
Roson的Qt之旅#108 QML ListView的布局、方向和堆叠顺序
Kubernetes 企业如何落地
Application Layer Protocol - RADIUS
JSDay2- 长度最小的子数组
Unity图文混排实现
Kubernetes 资源编排系列之二: Helm 篇
4399 it operations intern interview experience
win10电脑安装Photoshop cs7软件版本
深拷贝与浅拷贝
wps表格分两页断开怎么办?wps表格分两页断开的解决方法
PHP7.2开发物流自动拣货机流程
The second side of Tencent technical support internship - Tencent's father's luck is so sudden (offer received)
Unity Text三重渐变色
炒股开户去哪里办理,网上客户经理开户安全吗
【Verilog基础】PPA优化问题总结(含面积优化、速度优化)
Unity Text自定义多重渐变色且渐变色位置可调
MES对接Simba实现展讯平台 IMEI 写号与耦合测试
MPLS Virtual Private Network Everywhere in Life
主机测探与端口扫描









