当前位置:网站首页>Hand-written prometheus exporter-01-Gauge (dashboard)
Hand-written prometheus exporter-01-Gauge (dashboard)
2022-08-08 23:08:00 【DevOps Xuande Gong】
文章目录
特点
:Data can be increased or decreased(Reflect the current state).
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
页面,The following paragraph can be found
# 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 Get a value for the indicator
语法
- 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)
- The set value is the current time timestamp
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))
}
- 结果
We keep refreshing visible,The steamed bread that Guan Yu eats every second
+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的CounterNo assignment is invisible(The above example shows that,没有tag的CounterThe mode value is0.)
2.2 取值
语法
- 添加lab
实例化之后,The instance needs to be marked firstlab,因为不同的labwill be displayed as a single data.
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
边栏推荐
猜你喜欢
Kubernetes资源编排系列之四: CRD+Operator篇
2021 RoboCom 世界机器人开发者大赛-本科组(决赛)7-1绿色围栏(模拟)
Hi3516 使用 wifi模块
wps备份与恢复在哪里?
Low-Light Image Enhancement via a Deep Hybrid Network阅读札记
Manacher(求解最长回文子串)
(codeforce547)C-Mike and Foam(质因子+容斥原理)
STM8L 液晶数码管驱动,温度计液晶屏显示
ArcPy elements batch to dwg
Modal dialog is used to implement the sign-in
随机推荐
meta learning
(2022牛客多校五)H-Cutting Papers(签到)
(Codeforce 757)E. Bash Plays with Functions(积性函数)
ArcPy elements batch to dwg
2022杭电多校六 1006-Maex (树形DP)
WeChat small program "decompiled" combat "behind to unpack the eggs
Dynamic Host Configuration Protocol DHCP (DHCPv4)
Kubernetes 实现 CI/CD 发布流程
The concept of GIL and pools
【Verilog基础】关于芯片中信号串扰的理解
JS中的作用域与作用域链
stm32 利用 串口接收空闲中断 + dma 实现不定长度dma 接收
Kubernetes 资源核心原理
C language library function summary2019.10.31
(2022牛客多校四)A-Task Computing (排序+动态规划)
容斥原理
(2022杭电多校六)1010-Planar graph(最小生成树)
如何使用 Eolink 实现 API 文档自动生成
(2022牛客多校四)H-Wall Builder II(思维)
2022牛客多校六 J-Number Game(简单推理)