Remove key in tags to reduce metrics count (#1494)

* Remove key in tags to reduce metrics count
Issue: https://github.com/knative/serving/issues/8609

Signed-off-by: Lance Liu <xuliuxl@cn.ibm.com>

* remove tag key for OpenCensus

Signed-off-by: Lance Liu <xuliuxl@cn.ibm.com>
This commit is contained in:
Lance Liu 2020-07-15 16:29:32 +08:00 committed by GitHub
parent cb1281d05c
commit e863db0344
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 13 additions and 16 deletions

View File

@ -452,7 +452,7 @@ func (c *Impl) processNextWorkItem() bool {
if err != nil { if err != nil {
status = falseString status = falseString
} }
c.statsReporter.ReportReconcile(time.Since(startTime), keyStr, status) c.statsReporter.ReportReconcile(time.Since(startTime), status)
}() }()
// Embed the key into the logger and attach that to the context we pass // Embed the key into the logger and attach that to the context we pass

View File

@ -46,7 +46,6 @@ var (
// - length between 1 and 255 inclusive // - length between 1 and 255 inclusive
// - characters are printable US-ASCII // - characters are printable US-ASCII
reconcilerTagKey = tag.MustNewKey("reconciler") reconcilerTagKey = tag.MustNewKey("reconciler")
keyTagKey = tag.MustNewKey("key")
successTagKey = tag.MustNewKey("success") successTagKey = tag.MustNewKey("success")
) )
@ -167,12 +166,12 @@ func init() {
Description: "Number of reconcile operations", Description: "Number of reconcile operations",
Measure: reconcileCountStat, Measure: reconcileCountStat,
Aggregation: view.Count(), Aggregation: view.Count(),
TagKeys: []tag.Key{reconcilerTagKey, keyTagKey, successTagKey}, TagKeys: []tag.Key{reconcilerTagKey, successTagKey},
}, { }, {
Description: "Latency of reconcile operations", Description: "Latency of reconcile operations",
Measure: reconcileLatencyStat, Measure: reconcileLatencyStat,
Aggregation: reconcileDistribution, Aggregation: reconcileDistribution,
TagKeys: []tag.Key{reconcilerTagKey, keyTagKey, successTagKey}, TagKeys: []tag.Key{reconcilerTagKey, successTagKey},
}} }}
views = append(views, wp.DefaultViews()...) views = append(views, wp.DefaultViews()...)
views = append(views, rp.DefaultViews()...) views = append(views, rp.DefaultViews()...)
@ -192,7 +191,7 @@ type StatsReporter interface {
ReportQueueDepth(v int64) error ReportQueueDepth(v int64) error
// ReportReconcile reports the count and latency metrics for a reconcile operation // ReportReconcile reports the count and latency metrics for a reconcile operation
ReportReconcile(duration time.Duration, key, success string) error ReportReconcile(duration time.Duration, success string) error
} }
// Reporter holds cached metric objects to report metrics // Reporter holds cached metric objects to report metrics
@ -234,11 +233,10 @@ func (r *reporter) ReportQueueDepth(v int64) error {
} }
// ReportReconcile reports the count and latency metrics for a reconcile operation // ReportReconcile reports the count and latency metrics for a reconcile operation
func (r *reporter) ReportReconcile(duration time.Duration, key, success string) error { func (r *reporter) ReportReconcile(duration time.Duration, success string) error {
ctx, err := tag.New( ctx, err := tag.New(
context.Background(), context.Background(),
tag.Insert(reconcilerTagKey, r.reconciler), tag.Insert(reconcilerTagKey, r.reconciler),
tag.Insert(keyTagKey, key),
tag.Insert(successTagKey, success)) tag.Insert(successTagKey, success))
if err != nil { if err != nil {
return err return err

View File

@ -68,7 +68,6 @@ func TestReportReconcile(t *testing.T) {
r, _ := NewStatsReporter("testreconciler") r, _ := NewStatsReporter("testreconciler")
wantTags := map[string]string{ wantTags := map[string]string{
"reconciler": "testreconciler", "reconciler": "testreconciler",
"key": "test/key",
"success": "true", "success": "true",
} }
@ -81,11 +80,11 @@ func TestReportReconcile(t *testing.T) {
initialReconcileLatency = d[0].Data.(*view.DistributionData).Sum() initialReconcileLatency = d[0].Data.(*view.DistributionData).Sum()
} }
expectSuccess(t, func() error { return r.ReportReconcile(10*time.Millisecond, "test/key", "true") }) expectSuccess(t, func() error { return r.ReportReconcile(10*time.Millisecond, "true") })
metricstest.CheckCountData(t, "reconcile_count", wantTags, initialReconcileCount+1) metricstest.CheckCountData(t, "reconcile_count", wantTags, initialReconcileCount+1)
metricstest.CheckDistributionData(t, "reconcile_latency", wantTags, 1, initialReconcileLatency+10, initialReconcileLatency+10) metricstest.CheckDistributionData(t, "reconcile_latency", wantTags, 1, initialReconcileLatency+10, initialReconcileLatency+10)
expectSuccess(t, func() error { return r.ReportReconcile(15*time.Millisecond, "test/key", "true") }) expectSuccess(t, func() error { return r.ReportReconcile(15*time.Millisecond, "true") })
metricstest.CheckCountData(t, "reconcile_count", wantTags, initialReconcileCount+2) metricstest.CheckCountData(t, "reconcile_count", wantTags, initialReconcileCount+2)
metricstest.CheckDistributionData(t, "reconcile_latency", wantTags, 2, initialReconcileLatency+10, initialReconcileLatency+15) metricstest.CheckDistributionData(t, "reconcile_latency", wantTags, 2, initialReconcileLatency+10, initialReconcileLatency+15)
} }

View File

@ -31,7 +31,7 @@ type FakeStatsReporter struct {
// FakeReconcileStatData is used to record the calls to ReportReconcile // FakeReconcileStatData is used to record the calls to ReportReconcile
type FakeReconcileStatData struct { type FakeReconcileStatData struct {
Duration time.Duration Duration time.Duration
Key, Success string Success string
} }
// ReportQueueDepth records the call and returns success. // ReportQueueDepth records the call and returns success.
@ -43,10 +43,10 @@ func (r *FakeStatsReporter) ReportQueueDepth(v int64) error {
} }
// ReportReconcile records the call and returns success. // ReportReconcile records the call and returns success.
func (r *FakeStatsReporter) ReportReconcile(duration time.Duration, key, success string) error { func (r *FakeStatsReporter) ReportReconcile(duration time.Duration, success string) error {
r.Lock.Lock() r.Lock.Lock()
defer r.Lock.Unlock() defer r.Lock.Unlock()
r.reconcileData = append(r.reconcileData, FakeReconcileStatData{duration, key, success}) r.reconcileData = append(r.reconcileData, FakeReconcileStatData{duration, success})
return nil return nil
} }

View File

@ -38,8 +38,8 @@ func TestReportQueueDepth(t *testing.T) {
func TestReportReconcile(t *testing.T) { func TestReportReconcile(t *testing.T) {
r := &FakeStatsReporter{} r := &FakeStatsReporter{}
r.ReportReconcile(time.Duration(123), "testkey", "False") r.ReportReconcile(time.Duration(123), "False")
if got, want := r.GetReconcileData(), []FakeReconcileStatData{{time.Duration(123), "testkey", "False"}}; !reflect.DeepEqual(want, got) { if got, want := r.GetReconcileData(), []FakeReconcileStatData{{time.Duration(123), "False"}}; !reflect.DeepEqual(want, got) {
t.Errorf("reconcile data len: want: %v, got: %v", want, got) t.Errorf("reconcile data len: want: %v, got: %v", want, got)
} }
} }