Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
K
k3s
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jacklull
k3s
Commits
92dd8b50
Commit
92dd8b50
authored
Nov 26, 2017
by
Joe Betz
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Reduce memory footprint of admission metrics
parent
0a3cf593
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
31 additions
and
21 deletions
+31
-21
metrics.go
...ing/src/k8s.io/apiserver/pkg/admission/metrics/metrics.go
+31
-18
metrics_test.go
...rc/k8s.io/apiserver/pkg/admission/metrics/metrics_test.go
+0
-3
No files found.
staging/src/k8s.io/apiserver/pkg/admission/metrics/metrics.go
View file @
92dd8b50
...
@@ -32,7 +32,8 @@ const (
...
@@ -32,7 +32,8 @@ const (
)
)
var
(
var
(
latencyBuckets
=
prometheus
.
ExponentialBuckets
(
25000
,
2.0
,
7
)
// Use buckets ranging from 25 ms to ~2.5 seconds.
latencyBuckets
=
prometheus
.
ExponentialBuckets
(
25000
,
2.5
,
5
)
latencySummaryMaxAge
=
5
*
time
.
Hour
latencySummaryMaxAge
=
5
*
time
.
Hour
// Metrics provides access to all admission metrics.
// Metrics provides access to all admission metrics.
...
@@ -112,17 +113,17 @@ func newAdmissionMetrics() *AdmissionMetrics {
...
@@ -112,17 +113,17 @@ func newAdmissionMetrics() *AdmissionMetrics {
// Each step is identified by a distinct type label value.
// Each step is identified by a distinct type label value.
step
:=
newMetricSet
(
"step"
,
step
:=
newMetricSet
(
"step"
,
[]
string
{
"type"
,
"operation"
,
"group"
,
"version"
,
"resource"
,
"subresource"
,
"rejected"
},
[]
string
{
"type"
,
"operation"
,
"group"
,
"version"
,
"resource"
,
"subresource"
,
"rejected"
},
"Admission sub-step %s, broken out for each operation and API resource and step type (validate or admit)."
)
"Admission sub-step %s, broken out for each operation and API resource and step type (validate or admit)."
,
true
)
// Built-in admission controller metrics. Each admission controller is identified by name.
// Built-in admission controller metrics. Each admission controller is identified by name.
controller
:=
newMetricSet
(
"controller"
,
controller
:=
newMetricSet
(
"controller"
,
[]
string
{
"name"
,
"type"
,
"operation"
,
"group"
,
"version"
,
"resource"
,
"subresource"
,
"rejected"
},
[]
string
{
"name"
,
"type"
,
"operation"
,
"group"
,
"version"
,
"resource"
,
"subresource"
,
"rejected"
},
"Admission controller %s, identified by name and broken out for each operation and API resource and type (validate or admit)."
)
"Admission controller %s, identified by name and broken out for each operation and API resource and type (validate or admit)."
,
false
)
// Admission webhook metrics. Each webhook is identified by name.
// Admission webhook metrics. Each webhook is identified by name.
webhook
:=
newMetricSet
(
"webhook"
,
webhook
:=
newMetricSet
(
"webhook"
,
[]
string
{
"name"
,
"type"
,
"operation"
,
"group"
,
"version"
,
"resource"
,
"subresource"
,
"rejected"
},
[]
string
{
"name"
,
"type"
,
"operation"
,
"group"
,
"version"
,
"resource"
,
"subresource"
,
"rejected"
},
"Admission webhook %s, identified by name and broken out for each operation and API resource and type (validate or admit)."
)
"Admission webhook %s, identified by name and broken out for each operation and API resource and type (validate or admit)."
,
false
)
step
.
mustRegister
()
step
.
mustRegister
()
controller
.
mustRegister
()
controller
.
mustRegister
()
...
@@ -159,7 +160,21 @@ type metricSet struct {
...
@@ -159,7 +160,21 @@ type metricSet struct {
latenciesSummary
*
prometheus
.
SummaryVec
latenciesSummary
*
prometheus
.
SummaryVec
}
}
func
newMetricSet
(
name
string
,
labels
[]
string
,
helpTemplate
string
)
*
metricSet
{
func
newMetricSet
(
name
string
,
labels
[]
string
,
helpTemplate
string
,
hasSummary
bool
)
*
metricSet
{
var
summary
*
prometheus
.
SummaryVec
if
hasSummary
{
summary
=
prometheus
.
NewSummaryVec
(
prometheus
.
SummaryOpts
{
Namespace
:
namespace
,
Subsystem
:
subsystem
,
Name
:
fmt
.
Sprintf
(
"%s_admission_latencies_seconds_summary"
,
name
),
Help
:
fmt
.
Sprintf
(
helpTemplate
,
"latency summary"
),
MaxAge
:
latencySummaryMaxAge
,
},
labels
,
)
}
return
&
metricSet
{
return
&
metricSet
{
latencies
:
prometheus
.
NewHistogramVec
(
latencies
:
prometheus
.
NewHistogramVec
(
prometheus
.
HistogramOpts
{
prometheus
.
HistogramOpts
{
...
@@ -171,34 +186,32 @@ func newMetricSet(name string, labels []string, helpTemplate string) *metricSet
...
@@ -171,34 +186,32 @@ func newMetricSet(name string, labels []string, helpTemplate string) *metricSet
},
},
labels
,
labels
,
),
),
latenciesSummary
:
prometheus
.
NewSummaryVec
(
prometheus
.
SummaryOpts
{
latenciesSummary
:
summary
,
Namespace
:
namespace
,
Subsystem
:
subsystem
,
Name
:
fmt
.
Sprintf
(
"%s_admission_latencies_seconds_summary"
,
name
),
Help
:
fmt
.
Sprintf
(
helpTemplate
,
"latency summary"
),
MaxAge
:
latencySummaryMaxAge
,
},
labels
,
),
}
}
}
}
// MustRegister registers all the prometheus metrics in the metricSet.
// MustRegister registers all the prometheus metrics in the metricSet.
func
(
m
*
metricSet
)
mustRegister
()
{
func
(
m
*
metricSet
)
mustRegister
()
{
prometheus
.
MustRegister
(
m
.
latencies
)
prometheus
.
MustRegister
(
m
.
latencies
)
prometheus
.
MustRegister
(
m
.
latenciesSummary
)
if
m
.
latenciesSummary
!=
nil
{
prometheus
.
MustRegister
(
m
.
latenciesSummary
)
}
}
}
// Reset resets all the prometheus metrics in the metricSet.
// Reset resets all the prometheus metrics in the metricSet.
func
(
m
*
metricSet
)
reset
()
{
func
(
m
*
metricSet
)
reset
()
{
m
.
latencies
.
Reset
()
m
.
latencies
.
Reset
()
m
.
latenciesSummary
.
Reset
()
if
m
.
latenciesSummary
!=
nil
{
m
.
latenciesSummary
.
Reset
()
}
}
}
// Observe records an observed admission event to all metrics in the metricSet.
// Observe records an observed admission event to all metrics in the metricSet.
func
(
m
*
metricSet
)
observe
(
elapsed
time
.
Duration
,
labels
...
string
)
{
func
(
m
*
metricSet
)
observe
(
elapsed
time
.
Duration
,
labels
...
string
)
{
elapsedMicroseconds
:=
float64
(
elapsed
/
time
.
Microsecond
)
elapsedMicroseconds
:=
float64
(
elapsed
/
time
.
Microsecond
)
m
.
latencies
.
WithLabelValues
(
labels
...
)
.
Observe
(
elapsedMicroseconds
)
m
.
latencies
.
WithLabelValues
(
labels
...
)
.
Observe
(
elapsedMicroseconds
)
m
.
latenciesSummary
.
WithLabelValues
(
labels
...
)
.
Observe
(
elapsedMicroseconds
)
if
m
.
latenciesSummary
!=
nil
{
m
.
latenciesSummary
.
WithLabelValues
(
labels
...
)
.
Observe
(
elapsedMicroseconds
)
}
}
}
staging/src/k8s.io/apiserver/pkg/admission/metrics/metrics_test.go
View file @
92dd8b50
...
@@ -69,11 +69,9 @@ func TestObserveAdmissionController(t *testing.T) {
...
@@ -69,11 +69,9 @@ func TestObserveAdmissionController(t *testing.T) {
"rejected"
:
"false"
,
"rejected"
:
"false"
,
}
}
expectHistogramCountTotal
(
t
,
"apiserver_admission_controller_admission_latencies_seconds"
,
wantLabels
,
1
)
expectHistogramCountTotal
(
t
,
"apiserver_admission_controller_admission_latencies_seconds"
,
wantLabels
,
1
)
expectFindMetric
(
t
,
"apiserver_admission_controller_admission_latencies_seconds_summary"
,
wantLabels
)
wantLabels
[
"type"
]
=
"validate"
wantLabels
[
"type"
]
=
"validate"
expectHistogramCountTotal
(
t
,
"apiserver_admission_controller_admission_latencies_seconds"
,
wantLabels
,
1
)
expectHistogramCountTotal
(
t
,
"apiserver_admission_controller_admission_latencies_seconds"
,
wantLabels
,
1
)
expectFindMetric
(
t
,
"apiserver_admission_controller_admission_latencies_seconds_summary"
,
wantLabels
)
}
}
func
TestObserveWebhook
(
t
*
testing
.
T
)
{
func
TestObserveWebhook
(
t
*
testing
.
T
)
{
...
@@ -90,7 +88,6 @@ func TestObserveWebhook(t *testing.T) {
...
@@ -90,7 +88,6 @@ func TestObserveWebhook(t *testing.T) {
"rejected"
:
"false"
,
"rejected"
:
"false"
,
}
}
expectHistogramCountTotal
(
t
,
"apiserver_admission_webhook_admission_latencies_seconds"
,
wantLabels
,
1
)
expectHistogramCountTotal
(
t
,
"apiserver_admission_webhook_admission_latencies_seconds"
,
wantLabels
,
1
)
expectFindMetric
(
t
,
"apiserver_admission_webhook_admission_latencies_seconds_summary"
,
wantLabels
)
}
}
func
TestWithMetrics
(
t
*
testing
.
T
)
{
func
TestWithMetrics
(
t
*
testing
.
T
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment