Versions Compared
compared with
Key
- This line was added.
- This line was removed.
- Formatting was changed.
基本介绍
同步类型用于快速暴露监控指标,无论metrics reader
是否使用该监控指标,指标的计算结果已完成,待读取使用。例如,HTTP的请求总数、请求大小,这些数值必须在请求执行流程中记录到对应的监控指标数值中,适合作为同步指标来管理。
gmetric
提供的同步类型指标包含:Counter, UpDownCounter, Histogram
。
我们用一个简单的示例来演示同步指标的基本使用。
Code Block | ||
---|---|---|
| ||
package main import ( "github.com/prometheus/client_golang/prometheus/promhttp" "go.opentelemetry.io/otel/exporters/prometheus" "go.opentelemetry.io/otel/sdk/metric" "github.com/gogf/gf/contrib/metric/otelmetric/v2" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/net/ghttp" "github.com/gogf/gf/v2/os/gctx" "github.com/gogf/gf/v2/os/gmetric" ) var ( meter = gmetric.GetGlobalProvider().Meter(gmetric.MeterOption{ Instrument: "github.com/gogf/gf/example/metric/basic", InstrumentVersion: "v1.0", }) counter = meter.MustCounter( "goframe.metric.demo.counter", gmetric.MetricOption{ Help: "This is a simple demo for Counter usage", Unit: "bytes", }, ) upDownCounter = meter.MustUpDownCounter( "goframe.metric.demo.updown_counter", gmetric.MetricOption{ Help: "This is a simple demo for UpDownCounter usage", Unit: "%", }, ) histogram = meter.MustHistogram( "goframe.metric.demo.histogram", gmetric.MetricOption{ Help: "This is a simple demo for histogram usage", Unit: "ms", Buckets: []float64{0, 10, 20, 50, 100, 500, 1000, 2000, 5000, 10000}, }, ) ) func main() { var ctx = gctx.New() // Prometheus exporter to export metrics as Prometheus format. exporter, err := prometheus.New( prometheus.WithoutCounterSuffixes(), prometheus.WithoutUnits(), ) if err != nil { g.Log().Fatal(ctx, err) } // OpenTelemetry provider. provider := otelmetric.MustProvider(metricotelmetric.WithReader(exporter)) provider.SetAsGlobal() defer provider.Shutdown(ctx) // Counter. counter.Inc(ctx) counter.Add(ctx, 10) // UpDownCounter. upDownCounter.Inc(ctx) upDownCounter.Add(ctx, 10) upDownCounter.Dec(ctx) // Record values for histogram. histogram.Record(1) histogram.Record(20) histogram.Record(30) histogram.Record(101) histogram.Record(2000) histogram.Record(9000) histogram.Record(20000) // HTTP Server for metrics exporting. s := g.Server() s.BindHandler(otelmetric.StartPrometheusMetricsServer(8000, "/metrics", ghttp.WrapH(promhttp.Handler())) s.SetPort(8000) s.Run() } |
Counter&UpDownCounter
其中的Counter
和UpDownCounter
比较简单,这里就不详细介绍了,需要注意的是Counter
和UpDownCounter
虽然看起来差不多,实际上也是如此,只是为了更严谨和精细化区分使用场景。如果将这两种数据类型映射到经典的Prometheus
指标类型中,Counter
对应的就是Prometheus
的Counter
指标类型,而UpDownCounter
对应的是Prometheus
的Gauge
指标类型。
Histogram
Histogram
是一种统计类型,通过该指标可以快速统计出指标的p95, p99
等百分位统计结果,例如时间开销、成功等百分位统计结果直方图,例如时间开销、成功/失败率等指标。但需要注意该指标比较占内存和空间,不能为其添加过多的动态属性,因为不同的属性会衍生出同一种Histogram
指标不同的存储数值。
Primetheus Exporter
在该示例中,我们使用了比较常用的Prometheus
协议输出指标内容,通常用于对外暴露指标供外部组件抓取。通过以下路由将指标通过Prometheus
协议暴露:
Code Block | ||
---|---|---|
| ||
sotelmetric.BindHandlerStartPrometheusMetricsServer(8000, "/metrics", ghttp.WrapH(promhttp.Handler())) |
执行后,访问 http://127.0.0.1:8000/metrics 查看暴露的指标:
Image RemovedImage Added
我们这里只关注本次示例中的指标,其他自动暴露的指标在后续章节介绍。
Panel | ||
---|---|---|
| ||
|