/
stats.go
142 lines (122 loc) · 4.51 KB
/
stats.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
package opencensus
import (
"go.opencensus.io/stats"
"go.opencensus.io/stats/view"
"go.opencensus.io/tag"
)
// The following client RPC measures are supported for use in custom views.
var (
ClientRequestCount = stats.Int64("opencensus.io/rpc/client/request_count", "Number of RPC requests started", stats.UnitNone)
ClientLatency = stats.Float64("opencensus.io/rpc/client/latency", "End-to-end latency", stats.UnitMilliseconds)
)
// The following server RPC measures are supported for use in custom views.
var (
ServerRequestCount = stats.Int64("opencensus.io/rpc/server/request_count", "Number of RPC requests received", stats.UnitNone)
ServerLatency = stats.Float64("opencensus.io/rpc/server/latency", "End-to-end latency", stats.UnitMilliseconds)
)
// The following tags are applied to stats recorded by this package.
// Service and Method are applied to all measures.
// StatusCode is not applied to ClientRequestCount or ServerRequestCount,
// since it is recorded before the status is known.
var (
// StatusCode is the RPC status code.
StatusCode, _ = tag.NewKey("rpc.status")
// Service is the name of the micro-service.
Service, _ = tag.NewKey("rpc.service")
// Method is the service method called.
Endpoint, _ = tag.NewKey("rpc.endpoint")
)
// Default distributions used by views in this package.
var (
DefaultLatencyDistribution = view.Distribution(0, 1, 2, 3, 4, 5, 6, 8, 10, 13, 16, 20, 25, 30, 40, 50, 65, 80, 100, 130, 160, 200, 250, 300, 400, 500, 650, 800, 1000, 2000, 5000, 10000, 20000, 50000, 100000)
)
// This package provides some convenience views.
// You need to subscribe to the views for data to actually be collected.
var (
ClientRequestCountView = &view.View{
Name: "opencensus.io/rpc/client/request_count",
Description: "Count of RPC requests started",
Measure: ClientRequestCount,
Aggregation: view.Count(),
}
ClientLatencyView = &view.View{
Name: "opencensus.io/rpc/client/latency",
Description: "Latency distribution of RPC requests",
Measure: ClientLatency,
Aggregation: DefaultLatencyDistribution,
}
ClientRequestCountByMethod = &view.View{
Name: "opencensus.io/rpc/client/request_count_by_method",
Description: "Client request count by RPC method",
TagKeys: []tag.Key{Endpoint},
Measure: ClientRequestCount,
Aggregation: view.Count(),
}
ClientResponseCountByStatusCode = &view.View{
Name: "opencensus.io/rpc/client/response_count_by_status_code",
Description: "Client response count by RPC status code",
TagKeys: []tag.Key{StatusCode},
Measure: ClientLatency,
Aggregation: view.Count(),
}
ServerRequestCountView = &view.View{
Name: "opencensus.io/rpc/server/request_count",
Description: "Count of RPC requests received",
Measure: ServerRequestCount,
Aggregation: view.Count(),
}
ServerLatencyView = &view.View{
Name: "opencensus.io/rpc/server/latency",
Description: "Latency distribution of RPC requests",
Measure: ServerLatency,
Aggregation: DefaultLatencyDistribution,
}
ServerRequestCountByMethod = &view.View{
Name: "opencensus.io/rpc/server/request_count_by_method",
Description: "Server request count by RPC method",
TagKeys: []tag.Key{Endpoint},
Measure: ServerRequestCount,
Aggregation: view.Count(),
}
ServerResponseCountByStatusCode = &view.View{
Name: "opencensus.io/rpc/server/response_count_by_status_code",
Description: "Server response count by RPC status code",
TagKeys: []tag.Key{StatusCode},
Measure: ServerLatency,
Aggregation: view.Count(),
}
)
// DefaultClientViews are the default client views provided by this package.
var DefaultClientViews = []*view.View{
ClientRequestCountView,
ClientLatencyView,
ClientRequestCountByMethod,
ClientResponseCountByStatusCode,
}
// DefaultServerViews are the default server views provided by this package.
var DefaultServerViews = []*view.View{
ServerRequestCountView,
ServerLatencyView,
ServerRequestCountByMethod,
ServerResponseCountByStatusCode,
}
// StatsProfile groups metrics-related data.
type StatsProfile struct {
Role string
CountMeasure *stats.Int64Measure
LatencyMeasure *stats.Float64Measure
}
var (
// ClientProfile is used for RPC clients.
ClientProfile = &StatsProfile{
Role: "client",
CountMeasure: ClientRequestCount,
LatencyMeasure: ClientLatency,
}
// ServerProfile is used for RPC servers.
ServerProfile = &StatsProfile{
Role: "server",
CountMeasure: ServerRequestCount,
LatencyMeasure: ServerLatency,
}
)