当前位置:网站首页>动手写prometheus的exporter-02-Counter(计数器)
动手写prometheus的exporter-02-Counter(计数器)
2022-08-10 05:16:00 【开发运维玄德公】
概述
- 特点:只增不减(除非系统发生重启,或者用户进程有异常)。
常见的监控指标如http_requests_total, node_cpu都是Counter类型的监控指标。
- 标记:一般以
_total作为后缀。
1. 不带标签的Counter
1.1 定义指标
语法
- 实例化
func NewCounter(opts CounterOpts) Counter
- CounterOpts类型
type CounterOpts Opts
- Opts结构体
type Opts struct {
Namespace string
Subsystem string
Name string
Help string
ConstLabels Labels
}
完整示例
- 代码
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.NewCounter(prometheus.CounterOpts{
Namespace: "xi_shu",
Subsystem: "jing_zhou_team",
Name: "guanyu_eaten_num_all",
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))
}
- 结果显示
# 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 counter
xi_shu_jing_zhou_team_guanyu_eaten_num_all 0
1.2 获取数据
语法
- Add() 增加N
func (Counter) Add(float64)
- Inc() 增加1
func (Counter) Inc()
完整示例
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.NewCounter(prometheus.CounterOpts{
Namespace: "xi_shu",
Subsystem: "jing_zhou_team",
Name: "guanyu_eaten_num_all",
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))
}
- 结果显示
# HELP xi_shu_jing_zhou_team_guanyu_eaten_num_all Number of steamed buns eaten by Guan Yu
# TYPE xi_shu_jing_zhou_team_guanyu_eaten_num_all counter
xi_shu_jing_zhou_team_guanyu_eaten_num_all 74
2. 带标签的Counter
2.1 定义指标
语法
- 实例化
func NewCounterVec(opts CounterOpts, labelNames []string) *CounterVec
- CounterOpts类型
type CounterOpts Opts
- Opts结构体
type Opts struct {
Namespace string
Subsystem string
Name string
Help string
ConstLabels Labels
}
完整示例
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.NewCounterVec(prometheus.CounterOpts{
Namespace: "xi_shu",
Subsystem: "jing_zhou_team",
Name: "eaten_num_all",
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))
}
- 输出
带标签的指标,没有打标签之前,不会显示。
2.2 获取数据
语法
- Add() 增加N
func (Counter) Add(float64)
- Inc() 增加1
func (Counter) Inc()
完整示例
- 代码
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.NewCounterVec(prometheus.CounterOpts{
Namespace: "xi_shu",
Subsystem: "jing_zhou_team",
Name: "eaten_num_all",
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)
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"} 33
xi_shu_jing_zhou_team_eaten_num{
age="25",name="guan_yu"} 22

边栏推荐
- Arduino框架下合宙ESP32C3 +1.8“tft 网络时钟
- aliases节点分析
- 二进制中负数为何要用补码形式来表示——二进制加减法
- 元宇宙 | 你能通过图灵测试吗?
- Shell编程三剑客之awk
- tensorflow分词深度学习——影评预测
- pytorch learning
- oracle rac 11g安装执行root.sh时报错
- `id` bigint(20) unsigned NOT NULL COMMENT 'Database primary key',
- Why are negative numbers in binary represented in two's complement form - binary addition and subtraction
猜你喜欢

MySql之json_extract函数处理json字段

An article to master the entire JVM, JVM ultra-detailed analysis!!!

看了几十篇轻量化目标检测论文扫盲做的摘抄笔记

Order table delete, insert and search operations

实战小技巧19:List转Map List的几种姿势

通过一个案例轻松入门OAuth协议

深度学习之-01

基于BP神经网络的多因素房屋价格预测matlab仿真

2022 R2 transportable pressure vessel filling operation examination question bank simulation platform

Flutter development: error The following assertion was thrown resolving an image codec: Solution for Unable to...
随机推荐
OAuth2 usage scenarios, common misunderstandings, use cases
并发工具类——CountDownLatch、CyclicBarrier、Semaphore、Exchanger的介绍与使用
如何取得某月的最后一天
Important transformation and upgrading
summer preschool assignments
Introduction to curl command
最强大脑(1)
Ask you guys.The FlinkCDC2.2.0 version in the CDC community has a description of the supported sqlserver version, please
重要转型升级
FPGA工程师面试试题集锦21~30
线程(中):线程安全
SQL数据库字段追加到主表
pytorch learning
FPGA engineer interview questions collection 41~50
2022 R2 transportable pressure vessel filling operation examination question bank simulation platform
2022 T Elevator Repair Exam Questions and Mock Exams
线程(下):读写者模型\环形队列\线程池
一文带你搞懂OAuth2.0
What are the common commands of mysql
暑期学前作业