基本介绍

同步类型用于快速暴露监控指标,无论metrics reader是否使用该监控指标,指标的计算结果已完成,待读取使用。例如,HTTP的请求总数、请求大小,这些数值必须在请求执行流程中记录到对应的监控指标数值中,适合作为同步指标来管理。

gmetric提供的同步类型指标包含:Counter, UpDownCounter, Histogram

我们用一个简单的示例来演示同步指标的基本使用。

  1. package main
  2. import (
  3. "go.opentelemetry.io/otel/exporters/prometheus"
  4. "github.com/gogf/gf/contrib/metric/otelmetric/v2"
  5. "github.com/gogf/gf/v2/frame/g"
  6. "github.com/gogf/gf/v2/os/gctx"
  7. "github.com/gogf/gf/v2/os/gmetric"
  8. )
  9. var (
  10. meter = gmetric.GetGlobalProvider().Meter(gmetric.MeterOption{
  11. Instrument: "github.com/gogf/gf/example/metric/basic",
  12. InstrumentVersion: "v1.0",
  13. })
  14. counter = meter.MustCounter(
  15. "goframe.metric.demo.counter",
  16. gmetric.MetricOption{
  17. Help: "This is a simple demo for Counter usage",
  18. Unit: "bytes",
  19. },
  20. )
  21. upDownCounter = meter.MustUpDownCounter(
  22. "goframe.metric.demo.updown_counter",
  23. gmetric.MetricOption{
  24. Help: "This is a simple demo for UpDownCounter usage",
  25. Unit: "%",
  26. },
  27. )
  28. histogram = meter.MustHistogram(
  29. "goframe.metric.demo.histogram",
  30. gmetric.MetricOption{
  31. Help: "This is a simple demo for histogram usage",
  32. Unit: "ms",
  33. Buckets: []float64{0, 10, 20, 50, 100, 500, 1000, 2000, 5000, 10000},
  34. },
  35. )
  36. )
  37. func main() {
  38. var ctx = gctx.New()
  39. // Prometheus exporter to export metrics as Prometheus format.
  40. exporter, err := prometheus.New(
  41. prometheus.WithoutCounterSuffixes(),
  42. prometheus.WithoutUnits(),
  43. )
  44. if err != nil {
  45. g.Log().Fatal(ctx, err)
  46. }
  47. // OpenTelemetry provider.
  48. provider := otelmetric.MustProvider(otelmetric.WithReader(exporter))
  49. provider.SetAsGlobal()
  50. defer provider.Shutdown(ctx)
  51. // Counter.
  52. counter.Inc(ctx)
  53. counter.Add(ctx, 10)
  54. // UpDownCounter.
  55. upDownCounter.Inc(ctx)
  56. upDownCounter.Add(ctx, 10)
  57. upDownCounter.Dec(ctx)
  58. // Record values for histogram.
  59. histogram.Record(1)
  60. histogram.Record(20)
  61. histogram.Record(30)
  62. histogram.Record(101)
  63. histogram.Record(2000)
  64. histogram.Record(9000)
  65. histogram.Record(20000)
  66. // HTTP Server for metrics exporting.
  67. otelmetric.StartPrometheusMetricsServer(8000, "/metrics")
  68. }

Counter&UpDownCounter

其中的CounterUpDownCounter比较简单,这里就不详细介绍了,需要注意的是CounterUpDownCounter虽然看起来差不多,实际上也是如此,只是为了更严谨和精细化区分使用场景。如果将这两种数据类型映射到经典的Prometheus指标类型中,Counter对应的就是PrometheusCounter指标类型,而UpDownCounter对应的是PrometheusGauge指标类型。

Histogram

Histogram是一种统计类型,通过该指标可以快速统计出指标的p95, p99等百分位统计结果直方图,例如时间开销、成功/失败率等指标。但需要注意该指标比较占内存和空间,不能为其添加过多的动态属性,因为不同的属性会衍生出同一种Histogram指标不同的存储数值。

Primetheus Exporter

在该示例中,我们使用了比较常用的Prometheus协议输出指标内容,通常用于对外暴露指标供外部组件抓取。通过以下路由将指标通过Prometheus协议暴露:

  1. otelmetric.StartPrometheusMetricsServer(8000, "/metrics")

执行后,访问 http://127.0.0.1:8000/metrics 查看暴露的指标:

监控告警-同步指标 - 图1

我们这里只关注本次示例中的指标,其他自动暴露的指标在后续章节介绍。