【云原生】metrics类型及Golang服务如何计算指标

48 阅读1分钟

1.metrics类型是什么

统计数据指标的四种形式
1.Counter:只增不减的计数。 如:请求数
2.Gauge:能增能减的数值。 如:cpu使用率
3.Histogram:统计分布。 如:请求耗时区间
4.Summary:平均值 和 百分位。 如:平均响应时间

2.如何计算这些指标

1.counter:

requestCount := prometheus.NewCounterVec(
    prometheus.CounterOpts{Name: "myapp_requests_total", Help: "Total requests"},
    []string{"path"},
)
prometheus.MustRegister(requestCount)

// 每次请求
requestCount.WithLabelValues("/home").Inc()

2.Gauge

cpuUsage := prometheus.NewGauge(prometheus.GaugeOpts{
    Name: "myapp_cpu_usage", Help: "Current CPU usage",
})
prometheus.MustRegister(cpuUsage)

// 获取 CPU 使用率
percent, _ := cpu.Percent(0, false)
cpuUsage.Set(percent[0] / 100) // 更新当前值

3.Histogram

requestDuration := prometheus.NewHistogram(prometheus.HistogramOpts{
    Name:    "myapp_request_duration_seconds",
    Help:    "Request duration in seconds",
    Buckets: prometheus.LinearBuckets(0.1, 0.1, 10), // 0.1s ~ 1s
})
prometheus.MustRegister(requestDuration)
// 每次请求记录耗时
responseTime.Observe(0.45)

4.Summary

responseTime := prometheus.NewSummary(prometheus.SummaryOpts{
    Name:       "myapp_response_time_seconds",
    Help:       "Response time in seconds",
    Objectives: map[float64]float64{0.5: 0.05, 0.9: 0.01, 0.99: 0.001}, // P50,P90,P99
})
prometheus.MustRegister(responseTime)
// 每次请求记录耗时
requestDuration.Observe(0.23)

3.如何收集数据库(如mysql)的这些指标

1.下载相应数据库对应的 Exporter
2.Exporter连接到数据库
3.Exporter被访问/metrics时执行SQL查询,收集连接数,QPS 慢查询等
4.Exporter将结果暴露成 /metrics接口
5.Prometheus 拉取这些数据