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
feb0d1da
Commit
feb0d1da
authored
Sep 29, 2016
by
Chao Xu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
decouple workqueue metrics from prometheus
parent
a1b1a1a7
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
189 additions
and
62 deletions
+189
-62
controller-manager.go
cmd/kube-controller-manager/controller-manager.go
+2
-1
controller-manager.go
...n/cmd/federation-controller-manager/controller-manager.go
+1
-0
metrics.go
pkg/util/workqueue/metrics.go
+103
-61
prometheus.go
pkg/util/workqueue/prometheus/prometheus.go
+82
-0
controller.go
plugin/pkg/admission/resourcequota/controller.go
+1
-0
No files found.
cmd/kube-controller-manager/controller-manager.go
View file @
feb0d1da
...
...
@@ -30,7 +30,8 @@ import (
"k8s.io/kubernetes/pkg/healthz"
"k8s.io/kubernetes/pkg/util/flag"
"k8s.io/kubernetes/pkg/util/logs"
_
"k8s.io/kubernetes/pkg/version/prometheus"
// for version metric registration
_
"k8s.io/kubernetes/pkg/util/workqueue/prometheus"
// for workqueue metric registration
_
"k8s.io/kubernetes/pkg/version/prometheus"
// for version metric registration
"k8s.io/kubernetes/pkg/version/verflag"
"github.com/spf13/pflag"
...
...
federation/cmd/federation-controller-manager/controller-manager.go
View file @
feb0d1da
...
...
@@ -26,6 +26,7 @@ import (
"k8s.io/kubernetes/pkg/healthz"
"k8s.io/kubernetes/pkg/util/flag"
"k8s.io/kubernetes/pkg/util/logs"
_
"k8s.io/kubernetes/pkg/util/workqueue/prometheus"
// for workqueue metric registration
"k8s.io/kubernetes/pkg/version/verflag"
)
...
...
pkg/util/workqueue/metrics.go
View file @
feb0d1da
...
...
@@ -17,63 +17,54 @@ limitations under the License.
package
workqueue
import
(
"sync"
"time"
"github.com/prometheus/client_golang/prometheus"
)
// This file provides abstractions for setting the provider (e.g., prometheus)
// of metrics.
type
queueMetrics
interface
{
add
(
item
t
)
get
(
item
t
)
done
(
item
t
)
}
type
defaultQueueMetrics
struct
{
depth
prometheus
.
Gauge
adds
prometheus
.
Counter
latency
prometheus
.
Summary
workDuration
prometheus
.
Summary
addTimes
map
[
t
]
time
.
Time
processingStartTimes
map
[
t
]
time
.
Time
// GaugeMetric represents a single numerical value that can arbitrarily go up
// and down.
type
GaugeMetric
interface
{
Inc
()
Dec
()
}
func
newQueueMetrics
(
name
string
)
queueMetrics
{
var
ret
*
defaultQueueMetrics
if
len
(
name
)
==
0
{
return
ret
}
// CounterMetric represents a single numerical value that only ever
// goes up.
type
CounterMetric
interface
{
Inc
()
}
ret
=
&
defaultQueueMetrics
{
depth
:
prometheus
.
NewGauge
(
prometheus
.
GaugeOpts
{
Subsystem
:
name
,
Name
:
"depth"
,
Help
:
"Current depth of workqueue: "
+
name
,
}),
adds
:
prometheus
.
NewCounter
(
prometheus
.
CounterOpts
{
Subsystem
:
name
,
Name
:
"adds"
,
Help
:
"Total number of adds handled by workqueue: "
+
name
,
}),
latency
:
prometheus
.
NewSummary
(
prometheus
.
SummaryOpts
{
Subsystem
:
name
,
Name
:
"queue_latency"
,
Help
:
"How long an item stays in workqueue"
+
name
+
" before being requested."
,
}),
workDuration
:
prometheus
.
NewSummary
(
prometheus
.
SummaryOpts
{
Subsystem
:
name
,
Name
:
"work_duration"
,
Help
:
"How long processing an item from workqueue"
+
name
+
" takes."
,
}),
addTimes
:
map
[
t
]
time
.
Time
{},
processingStartTimes
:
map
[
t
]
time
.
Time
{},
}
// SummaryMetric captures individual observations.
type
SummaryMetric
interface
{
Observe
(
float64
)
}
type
noopMetric
struct
{}
prometheus
.
Register
(
ret
.
depth
)
prometheus
.
Register
(
ret
.
adds
)
prometheus
.
Register
(
ret
.
latency
)
prometheus
.
Register
(
ret
.
workDuration
)
func
(
noopMetric
)
Inc
()
{}
func
(
noopMetric
)
Dec
()
{}
func
(
noopMetric
)
Observe
(
float64
)
{}
return
ret
type
defaultQueueMetrics
struct
{
// current depth of a workqueue
depth
GaugeMetric
// total number of adds handled by a workqueue
adds
CounterMetric
// how long an item stays in a workqueue
latency
SummaryMetric
// how long processing an item from a workqueue takes
workDuration
SummaryMetric
addTimes
map
[
t
]
time
.
Time
processingStartTimes
map
[
t
]
time
.
Time
}
func
(
m
*
defaultQueueMetrics
)
add
(
item
t
)
{
...
...
@@ -122,32 +113,83 @@ type retryMetrics interface {
}
type
defaultRetryMetrics
struct
{
retries
prometheus
.
Counter
retries
CounterMetric
}
func
newRetryMetrics
(
name
string
)
retryMetrics
{
var
ret
*
defaultRetryMetrics
if
len
(
name
)
==
0
{
return
ret
func
(
m
*
defaultRetryMetrics
)
retry
()
{
if
m
==
nil
{
return
}
ret
=
&
defaultRetryMetrics
{
retries
:
prometheus
.
NewCounter
(
prometheus
.
CounterOpts
{
Subsystem
:
name
,
Name
:
"retries"
,
Help
:
"Total number of retries handled by workqueue: "
+
name
,
}),
}
m
.
retries
.
Inc
()
}
// MetricsProvider generates various metrics used by the queue.
type
MetricsProvider
interface
{
NewDepthMetric
(
name
string
)
GaugeMetric
NewAddsMetric
(
name
string
)
CounterMetric
NewLatencyMetric
(
name
string
)
SummaryMetric
NewWorkDurationMetric
(
name
string
)
SummaryMetric
NewRetriesMetric
(
name
string
)
CounterMetric
}
prometheus
.
Register
(
ret
.
retries
)
type
noopMetricsProvider
struct
{}
return
ret
func
(
_
noopMetricsProvider
)
NewDepthMetric
(
name
string
)
GaugeMetric
{
return
noopMetric
{}
}
func
(
m
*
defaultRetryMetrics
)
retry
()
{
if
m
==
nil
{
return
func
(
_
noopMetricsProvider
)
NewAddsMetric
(
name
string
)
CounterMetric
{
return
noopMetric
{}
}
func
(
_
noopMetricsProvider
)
NewLatencyMetric
(
name
string
)
SummaryMetric
{
return
noopMetric
{}
}
func
(
_
noopMetricsProvider
)
NewWorkDurationMetric
(
name
string
)
SummaryMetric
{
return
noopMetric
{}
}
func
(
_
noopMetricsProvider
)
NewRetriesMetric
(
name
string
)
CounterMetric
{
return
noopMetric
{}
}
var
metricsFactory
=
struct
{
metricsProvider
MetricsProvider
setProviders
sync
.
Once
}{
metricsProvider
:
noopMetricsProvider
{},
}
func
newQueueMetrics
(
name
string
)
queueMetrics
{
var
ret
*
defaultQueueMetrics
if
len
(
name
)
==
0
{
return
ret
}
return
&
defaultQueueMetrics
{
depth
:
metricsFactory
.
metricsProvider
.
NewDepthMetric
(
name
),
adds
:
metricsFactory
.
metricsProvider
.
NewAddsMetric
(
name
),
latency
:
metricsFactory
.
metricsProvider
.
NewLatencyMetric
(
name
),
workDuration
:
metricsFactory
.
metricsProvider
.
NewWorkDurationMetric
(
name
),
addTimes
:
map
[
t
]
time
.
Time
{},
processingStartTimes
:
map
[
t
]
time
.
Time
{},
}
}
m
.
retries
.
Inc
()
func
newRetryMetrics
(
name
string
)
retryMetrics
{
var
ret
*
defaultRetryMetrics
if
len
(
name
)
==
0
{
return
ret
}
return
&
defaultRetryMetrics
{
retries
:
metricsFactory
.
metricsProvider
.
NewRetriesMetric
(
name
),
}
}
// SetProvider sets the metrics provider of the metricsFactory.
func
SetProvider
(
metricsProvider
MetricsProvider
)
{
metricsFactory
.
setProviders
.
Do
(
func
()
{
metricsFactory
.
metricsProvider
=
metricsProvider
})
}
pkg/util/workqueue/prometheus/prometheus.go
0 → 100644
View file @
feb0d1da
/*
Copyright 2016 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package
prometheus
import
(
"k8s.io/kubernetes/pkg/util/workqueue"
"github.com/prometheus/client_golang/prometheus"
)
// Package prometheus sets the workqueue DefaultMetricsFactory to produce
// prometheus metrics. To use this package, you just have to import it.
func
init
()
{
workqueue
.
SetProvider
(
prometheusMetricsProvider
{})
}
type
prometheusMetricsProvider
struct
{}
func
(
_
prometheusMetricsProvider
)
NewDepthMetric
(
name
string
)
workqueue
.
GaugeMetric
{
depth
:=
prometheus
.
NewGauge
(
prometheus
.
GaugeOpts
{
Subsystem
:
name
,
Name
:
"depth"
,
Help
:
"Current depth of workqueue: "
+
name
,
})
prometheus
.
Register
(
depth
)
return
depth
}
func
(
_
prometheusMetricsProvider
)
NewAddsMetric
(
name
string
)
workqueue
.
CounterMetric
{
adds
:=
prometheus
.
NewCounter
(
prometheus
.
CounterOpts
{
Subsystem
:
name
,
Name
:
"adds"
,
Help
:
"Total number of adds handled by workqueue: "
+
name
,
})
prometheus
.
Register
(
adds
)
return
adds
}
func
(
_
prometheusMetricsProvider
)
NewLatencyMetric
(
name
string
)
workqueue
.
SummaryMetric
{
latency
:=
prometheus
.
NewSummary
(
prometheus
.
SummaryOpts
{
Subsystem
:
name
,
Name
:
"queue_latency"
,
Help
:
"How long an item stays in workqueue"
+
name
+
" before being requested."
,
})
prometheus
.
Register
(
latency
)
return
latency
}
func
(
_
prometheusMetricsProvider
)
NewWorkDurationMetric
(
name
string
)
workqueue
.
SummaryMetric
{
workDuration
:=
prometheus
.
NewSummary
(
prometheus
.
SummaryOpts
{
Subsystem
:
name
,
Name
:
"work_duration"
,
Help
:
"How long processing an item from workqueue"
+
name
+
" takes."
,
})
prometheus
.
Register
(
workDuration
)
return
workDuration
}
func
(
_
prometheusMetricsProvider
)
NewRetriesMetric
(
name
string
)
workqueue
.
CounterMetric
{
retries
:=
prometheus
.
NewCounter
(
prometheus
.
CounterOpts
{
Subsystem
:
name
,
Name
:
"retries"
,
Help
:
"Total number of retries handled by workqueue: "
+
name
,
})
prometheus
.
Register
(
retries
)
return
retries
}
plugin/pkg/admission/resourcequota/controller.go
View file @
feb0d1da
...
...
@@ -33,6 +33,7 @@ import (
"k8s.io/kubernetes/pkg/util/sets"
"k8s.io/kubernetes/pkg/util/wait"
"k8s.io/kubernetes/pkg/util/workqueue"
_
"k8s.io/kubernetes/pkg/util/workqueue/prometheus"
// for workqueue metric registration
)
// Evaluator is used to see if quota constraints are satisfied.
...
...
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