## 一、自定义监控需求
### 1.1 需求描述
希望能在go项目中,暴露
* 下单总次数的数据指标
* 下单总金额的数据指标
### 1.2 实现步骤
go开发环境中,创建自定义监控器。创建专门的视图方法/order/addOrder增加下单总次数和下单总金额数据
* application.yaml配置修改暴露指定数据
* 测试访问/actuator/prometheus得到下单总次数和下单总金额数据
* Grafana中配置下单总次数和下单总金额数据
<br><hr><br>
## 二、go项目实现订单数据监控
### 2.1 testproject项目上创建自定义监控器
真实业务场景中,每次用户创建一个订单,就会订单总数+1,订单总金额加上当前金额此处定义两个业务指标
指标名 | 参数名
下单总次数 | order_request_count
下单总金额 | order_amount_sum
编写go代码
package main
import (
"fmt"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promhttp"
"log"
"net/http"
"time"
)
// 定义指标变量
var (
orderRequestCount = prometheus.NewCounter(
prometheus.CounterOpts{
Name: "order_request_count",
Help: "下单总次数",
},
)
orderAmountSum = prometheus.NewCounter(
prometheus.CounterOpts{
Name: "order_amount_sum",
Help: "下单总金额",
},
)
)
func init() {
// 注册指标到 Prometheus 默认注册表
prometheus.MustRegister(orderRequestCount)
prometheus.MustRegister(orderAmountSum)
}
func main() {
// 创建一个 HTTP 处理器,它将暴露指标
http.Handle("/metrics", promhttp.Handler())
// 模拟下单处理
go func() {
for {
// 模拟下单
orderRequestCount.Inc() // 增加下单次数
amount := float64(100 + (time.Now().UnixNano()%1000)/10) // 生成一个随机的订单金额
orderAmountSum.Add(amount) // 增加订单金额
// 模拟每秒钟一个订单
time.Sleep(1 * time.Second)
}
}()
// 启动 HTTP 服务器,监听在端口 8182
fmt.Println("Starting server on :8182")
log.Fatal(http.ListenAndServe(":8182", nil))
}
启动go项目后访问
http://192.168.100.141:8182/metrics
然后打开目标 go的项目 ,添加对应的监控指标
![](https://img.kancloud.cn/e3/89/e389cd3731ef6875e576aed6dcbe773e_1864x798.png)
![](https://img.kancloud.cn/fe/a6/fea6ba8bcc66f1833f228bd8f8906aa6_1458x326.png)
![](https://img.kancloud.cn/87/8a/878aa994674b7cce76b600dfc33c0396_1920x890.png)
- Prometheus教程
- 一. dokcer 安装
- 二. 安装docker-compose
- 三. docker-compose安装Prometheus
- 四. 配置grafana的数据源
- 五. Prometheus的Exporter
- 六. Prometheus的基本术语
- 七. 监控Linux
- 八. 监控redis和mongodb
- 九. 监控mysql数据库
- 十. 监控go程序
- 十一. 监控nginx
- 十二. 监控消息队列
- 十三. 监控docker
- 十四. 监控进程
- 十五. 域名监控
- 十六. SNMP监控
- 十七. 黑盒监控
- 十八. 自定义监控
- 十九. go实现自定义监控
- 二十. 服务发现概述
- 二十一. 基于文件的服务发现
- 二十二. 基于Consul的服务发现
- 二十三. relabeling机制