|
6 | 6 | package timers |
7 | 7 |
|
8 | 8 | import ( |
| 9 | + "fmt" |
9 | 10 | "time" |
10 | 11 |
|
11 | 12 | "github.com/cockroachdb/cockroach/pkg/util/metric" |
@@ -34,34 +35,52 @@ func (*Timers) MetricStruct() {} |
34 | 35 | var _ metric.Struct = &Timers{} |
35 | 36 |
|
36 | 37 | func New(histogramWindow time.Duration) *Timers { |
37 | | - histogramOptsFor := func(name, desc string) metric.HistogramOptions { |
| 38 | + const ( |
| 39 | + stagePrefix = "changefeed.stage" |
| 40 | + latencySuffix = "latency" |
| 41 | + ptsSubCategory = "pts" |
| 42 | + ) |
| 43 | + |
| 44 | + histogramOptsFor := func(name, labeledName, labelName, desc string) metric.HistogramOptions { |
38 | 45 | return metric.HistogramOptions{ |
39 | 46 | Metadata: metric.Metadata{ |
40 | | - Name: name, |
41 | | - Help: desc, |
42 | | - Unit: metric.Unit_NANOSECONDS, |
43 | | - Measurement: "Latency", |
| 47 | + Name: name, |
| 48 | + Help: desc, |
| 49 | + Unit: metric.Unit_NANOSECONDS, |
| 50 | + Measurement: "Latency", |
| 51 | + LabeledName: labeledName, |
| 52 | + StaticLabels: metric.MakeLabelPairs(metric.LabelName, labelName), |
44 | 53 | }, |
45 | 54 | Duration: histogramWindow, |
46 | 55 | Buckets: prometheus.ExponentialBucketsRange(float64(1*time.Microsecond), float64(1*time.Hour), 60), |
47 | 56 | Mode: metric.HistogramModePrometheus, |
48 | 57 | } |
49 | 58 | } |
50 | 59 |
|
| 60 | + stageOpts := func(name, labelName, desc string) metric.HistogramOptions { |
| 61 | + labeledName := fmt.Sprintf("%s.%s", stagePrefix, latencySuffix) |
| 62 | + return histogramOptsFor(name, labeledName, labelName, desc) |
| 63 | + } |
| 64 | + |
| 65 | + ptsStageOpts := func(name, labelName, desc string) metric.HistogramOptions { |
| 66 | + labeledName := fmt.Sprintf("%s.%s.%s", stagePrefix, ptsSubCategory, latencySuffix) |
| 67 | + return histogramOptsFor(name, labeledName, labelName, desc) |
| 68 | + } |
| 69 | + |
51 | 70 | b := aggmetric.MakeBuilder("scope") |
52 | 71 | return &Timers{ |
53 | | - CheckpointJobProgress: b.Histogram(histogramOptsFor("changefeed.stage.checkpoint_job_progress.latency", "Latency of the changefeed stage: checkpointing job progress")), |
54 | | - FrontierPersistence: b.Histogram(histogramOptsFor("changefeed.stage.frontier_persistence.latency", "Latency of the changefeed stage: persisting frontier to job info")), |
55 | | - Encode: b.Histogram(histogramOptsFor("changefeed.stage.encode.latency", "Latency of the changefeed stage: encoding data")), |
56 | | - EmitRow: b.Histogram(histogramOptsFor("changefeed.stage.emit_row.latency", "Latency of the changefeed stage: emitting row to sink")), |
57 | | - DownstreamClientSend: b.Histogram(histogramOptsFor("changefeed.stage.downstream_client_send.latency", "Latency of the changefeed stage: flushing messages from the sink's client to its downstream. This includes sends that failed for most but not all sinks.")), |
58 | | - KVFeedWaitForTableEvent: b.Histogram(histogramOptsFor("changefeed.stage.kv_feed_wait_for_table_event.latency", "Latency of the changefeed stage: waiting for a table schema event to join to the kv event")), |
59 | | - KVFeedBuffer: b.Histogram(histogramOptsFor("changefeed.stage.kv_feed_buffer.latency", "Latency of the changefeed stage: waiting to buffer kv events")), |
60 | | - RangefeedBufferValue: b.Histogram(histogramOptsFor("changefeed.stage.rangefeed_buffer_value.latency", "Latency of the changefeed stage: buffering rangefeed value events")), |
61 | | - RangefeedBufferCheckpoint: b.Histogram(histogramOptsFor("changefeed.stage.rangefeed_buffer_checkpoint.latency", "Latency of the changefeed stage: buffering rangefeed checkpoint events")), |
62 | | - PTSManage: b.Histogram(histogramOptsFor("changefeed.stage.pts.manage.latency", "Latency of the changefeed stage: Time spent successfully managing protected timestamp records on highwater advance, including time spent creating new protected timestamps when needed")), |
63 | | - PTSManageError: b.Histogram(histogramOptsFor("changefeed.stage.pts.manage_error.latency", "Latency of the changefeed stage: Time spent managing protected timestamp when we eventually error")), |
64 | | - PTSCreate: b.Histogram(histogramOptsFor("changefeed.stage.pts.create.latency", "Latency of the changefeed stage: Time spent creating protected timestamp records on changefeed creation")), |
| 72 | + CheckpointJobProgress: b.Histogram(stageOpts("changefeed.stage.checkpoint_job_progress.latency", "checkpoint_job_progress", "Latency of the changefeed stage: checkpointing job progress")), |
| 73 | + FrontierPersistence: b.Histogram(stageOpts("changefeed.stage.frontier_persistence.latency", "frontier_persistence", "Latency of the changefeed stage: persisting frontier to job info")), |
| 74 | + Encode: b.Histogram(stageOpts("changefeed.stage.encode.latency", "encode", "Latency of the changefeed stage: encoding data")), |
| 75 | + EmitRow: b.Histogram(stageOpts("changefeed.stage.emit_row.latency", "emit_row", "Latency of the changefeed stage: emitting row to sink")), |
| 76 | + DownstreamClientSend: b.Histogram(stageOpts("changefeed.stage.downstream_client_send.latency", "downstream_client_send", "Latency of the changefeed stage: flushing messages from the sink's client to its downstream. This includes sends that failed for most but not all sinks.")), |
| 77 | + KVFeedWaitForTableEvent: b.Histogram(stageOpts("changefeed.stage.kv_feed_wait_for_table_event.latency", "kv_feed_wait_for_table_event", "Latency of the changefeed stage: waiting for a table schema event to join to the kv event")), |
| 78 | + KVFeedBuffer: b.Histogram(stageOpts("changefeed.stage.kv_feed_buffer.latency", "kv_feed_buffer", "Latency of the changefeed stage: waiting to buffer kv events")), |
| 79 | + RangefeedBufferValue: b.Histogram(stageOpts("changefeed.stage.rangefeed_buffer_value.latency", "rangefeed_buffer_value", "Latency of the changefeed stage: buffering rangefeed value events")), |
| 80 | + RangefeedBufferCheckpoint: b.Histogram(stageOpts("changefeed.stage.rangefeed_buffer_checkpoint.latency", "rangefeed_buffer_checkpoint", "Latency of the changefeed stage: buffering rangefeed checkpoint events")), |
| 81 | + PTSManage: b.Histogram(ptsStageOpts("changefeed.stage.pts.manage.latency", "manage", "Latency of the changefeed stage: Time spent successfully managing protected timestamp records on highwater advance, including time spent creating new protected timestamps when needed")), |
| 82 | + PTSManageError: b.Histogram(ptsStageOpts("changefeed.stage.pts.manage_error.latency", "manage_error", "Latency of the changefeed stage: Time spent managing protected timestamp when we eventually error")), |
| 83 | + PTSCreate: b.Histogram(ptsStageOpts("changefeed.stage.pts.create.latency", "create", "Latency of the changefeed stage: Time spent creating protected timestamp records on changefeed creation")), |
65 | 84 | } |
66 | 85 | } |
67 | 86 |
|
|
0 commit comments