Add ControllerSyncCallCount metric

Signed-off-by: Michael Tsang <michael.tsang@jetstack.io>
This commit is contained in:
Michael Tsang 2019-05-17 13:22:09 +01:00
parent 3201d126d0
commit f2e57a1c95
18 changed files with 49 additions and 3 deletions

View File

@ -22,6 +22,7 @@ go_library(
"//pkg/issuer/acme/dns/util:go_default_library",
"//pkg/issuer/acme/http:go_default_library",
"//pkg/logs:go_default_library",
"//pkg/metrics:go_default_library",
"//third_party/crypto/acme:go_default_library",
"//vendor/k8s.io/api/core/v1:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library",

View File

@ -37,6 +37,7 @@ import (
"github.com/jetstack/cert-manager/pkg/issuer/acme/dns"
"github.com/jetstack/cert-manager/pkg/issuer/acme/http"
logf "github.com/jetstack/cert-manager/pkg/logs"
"github.com/jetstack/cert-manager/pkg/metrics"
)
type Controller struct {
@ -63,6 +64,7 @@ type Controller struct {
watchedInformers []cache.InformerSynced
queue workqueue.RateLimitingInterface
metrics *metrics.Metrics
scheduler *scheduler.Scheduler
}
@ -104,6 +106,7 @@ func New(ctx *controllerpkg.Context) (*Controller, error) {
ctrl.helper = issuer.NewHelper(ctrl.issuerLister, ctrl.clusterIssuerLister)
ctrl.acmeHelper = acme.NewHelper(ctrl.secretLister, ctrl.Context.ClusterResourceNamespace)
ctrl.metrics = metrics.Default
ctrl.httpSolver = http.NewSolver(ctx)
var err error

View File

@ -56,6 +56,8 @@ type solver interface {
// Sync will process this ACME Challenge.
// It is the core control function for ACME challenges.
func (c *Controller) Sync(ctx context.Context, ch *cmapi.Challenge) (err error) {
c.metrics.ControllerSyncCallCount.WithLabelValues("acmechallenges").Inc()
log := logf.FromContext(ctx).WithValues("dnsName", ch.Spec.DNSName, "type", ch.Spec.Type)
ctx = logf.NewContext(ctx, log)
oldChal := ch

View File

@ -17,6 +17,7 @@ go_library(
"//pkg/controller:go_default_library",
"//pkg/issuer:go_default_library",
"//pkg/logs:go_default_library",
"//pkg/metrics:go_default_library",
"//third_party/crypto/acme:go_default_library",
"//vendor/k8s.io/api/core/v1:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library",

View File

@ -36,6 +36,7 @@ import (
controllerpkg "github.com/jetstack/cert-manager/pkg/controller"
"github.com/jetstack/cert-manager/pkg/issuer"
logf "github.com/jetstack/cert-manager/pkg/logs"
"github.com/jetstack/cert-manager/pkg/metrics"
)
type Controller struct {
@ -57,6 +58,7 @@ type Controller struct {
watchedInformers []cache.InformerSynced
queue workqueue.RateLimitingInterface
metrics *metrics.Metrics
// used for testing
clock clock.Clock
@ -94,6 +96,7 @@ func New(ctx *controllerpkg.Context) *Controller {
secretInformer := ctrl.KubeSharedInformerFactory.Core().V1().Secrets()
ctrl.watchedInformers = append(ctrl.watchedInformers, secretInformer.Informer().HasSynced)
ctrl.secretLister = secretInformer.Lister()
ctrl.metrics = metrics.Default
ctrl.helper = issuer.NewHelper(ctrl.issuerLister, ctrl.clusterIssuerLister)
ctrl.acmeHelper = acme.NewHelper(ctrl.secretLister, ctrl.Context.ClusterResourceNamespace)

View File

@ -48,6 +48,8 @@ var (
// - create a Challenge resource in order to fulfill required validations
// - waiting for Challenge resources to enter the 'ready' state
func (c *Controller) Sync(ctx context.Context, o *cmapi.Order) (err error) {
c.metrics.ControllerSyncCallCount.WithLabelValues("acmeorders").Inc()
oldOrder := o
o = o.DeepCopy()

View File

@ -69,6 +69,8 @@ var (
)
func (c *Controller) Sync(ctx context.Context, crt *v1alpha1.Certificate) (err error) {
c.metrics.ControllerSyncCallCount.WithLabelValues("certificates").Inc()
log := logf.FromContext(ctx)
dbg := log.V(logf.DebugLevel)

View File

@ -17,6 +17,7 @@ go_library(
"//pkg/controller:go_default_library",
"//pkg/issuer:go_default_library",
"//pkg/logs:go_default_library",
"//pkg/metrics:go_default_library",
"//vendor/k8s.io/api/core/v1:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/labels:go_default_library",

View File

@ -33,6 +33,7 @@ import (
controllerpkg "github.com/jetstack/cert-manager/pkg/controller"
"github.com/jetstack/cert-manager/pkg/issuer"
logf "github.com/jetstack/cert-manager/pkg/logs"
"github.com/jetstack/cert-manager/pkg/metrics"
)
type Controller struct {
@ -48,6 +49,7 @@ type Controller struct {
watchedInformers []cache.InformerSynced
queue workqueue.RateLimitingInterface
metrics *metrics.Metrics
}
func New(ctx *controllerpkg.Context) *Controller {
@ -66,6 +68,7 @@ func New(ctx *controllerpkg.Context) *Controller {
ctrl.secretLister = secretsInformer.Lister()
ctrl.issuerFactory = issuer.NewIssuerFactory(ctx)
ctrl.ctx = logf.NewContext(ctx.RootContext, nil, ControllerName)
ctrl.metrics = metrics.Default
return ctrl
}

View File

@ -21,7 +21,7 @@ import (
"fmt"
"reflect"
"k8s.io/api/core/v1"
v1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/util/errors"
apiutil "github.com/jetstack/cert-manager/pkg/api/util"
@ -38,6 +38,8 @@ const (
)
func (c *Controller) Sync(ctx context.Context, iss *v1alpha1.ClusterIssuer) (err error) {
c.metrics.ControllerSyncCallCount.WithLabelValues("clusterissuers").Inc()
log := logf.FromContext(ctx)
issuerCopy := iss.DeepCopy()

View File

@ -16,6 +16,7 @@ go_library(
"//pkg/client/listers/certmanager/v1alpha1:go_default_library",
"//pkg/controller:go_default_library",
"//pkg/issuer:go_default_library",
"//pkg/metrics:go_default_library",
"//pkg/util:go_default_library",
"//vendor/k8s.io/api/core/v1:go_default_library",
"//vendor/k8s.io/api/extensions/v1beta1:go_default_library",

View File

@ -38,6 +38,7 @@ import (
cmlisters "github.com/jetstack/cert-manager/pkg/client/listers/certmanager/v1alpha1"
controllerpkg "github.com/jetstack/cert-manager/pkg/controller"
"github.com/jetstack/cert-manager/pkg/issuer"
"github.com/jetstack/cert-manager/pkg/metrics"
"github.com/jetstack/cert-manager/pkg/util"
extinformers "k8s.io/client-go/informers/extensions/v1beta1"
)
@ -72,6 +73,7 @@ type Controller struct {
workerWg sync.WaitGroup
syncedFuncs []cache.InformerSynced
defaults defaults
metrics *metrics.Metrics
}
// New returns a new Certificates controller. It sets up the informer handler
@ -107,6 +109,7 @@ func New(
}
ctrl.helper = issuer.NewHelper(ctrl.issuerLister, ctrl.clusterIssuerLister)
ctrl.metrics = metrics.Default
return ctrl
}

View File

@ -60,6 +60,8 @@ const (
var ingressGVK = extv1beta1.SchemeGroupVersion.WithKind("Ingress")
func (c *Controller) Sync(ctx context.Context, ing *extv1beta1.Ingress) error {
c.metrics.ControllerSyncCallCount.WithLabelValues("ingress-shim").Inc()
if !shouldSync(ing, c.defaults.autoCertificateAnnotations) {
klog.Infof("Not syncing ingress %s/%s as it does not contain necessary annotations", ing.Namespace, ing.Name)
return nil

View File

@ -28,6 +28,7 @@ import (
"github.com/jetstack/cert-manager/pkg/apis/certmanager/v1alpha1"
testpkg "github.com/jetstack/cert-manager/pkg/controller/test"
"github.com/jetstack/cert-manager/pkg/metrics"
"github.com/jetstack/cert-manager/test/unit/gen"
)
@ -910,7 +911,8 @@ func TestSync(t *testing.T) {
issuerKind: test.DefaultIssuerKind,
autoCertificateAnnotations: []string{testAcmeTLSAnnotation},
},
helper: &fakeHelper{issuer: test.Issuer},
helper: &fakeHelper{issuer: test.Issuer},
metrics: metrics.Default,
}
b.Sync()

View File

@ -17,6 +17,7 @@ go_library(
"//pkg/controller:go_default_library",
"//pkg/issuer:go_default_library",
"//pkg/logs:go_default_library",
"//pkg/metrics:go_default_library",
"//vendor/k8s.io/api/core/v1:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/labels:go_default_library",

View File

@ -33,6 +33,7 @@ import (
controllerpkg "github.com/jetstack/cert-manager/pkg/controller"
"github.com/jetstack/cert-manager/pkg/issuer"
logf "github.com/jetstack/cert-manager/pkg/logs"
"github.com/jetstack/cert-manager/pkg/metrics"
)
type Controller struct {
@ -49,6 +50,7 @@ type Controller struct {
watchedInformers []cache.InformerSynced
queue workqueue.RateLimitingInterface
metrics *metrics.Metrics
}
func New(ctx *controllerpkg.Context) *Controller {
@ -70,6 +72,7 @@ func New(ctx *controllerpkg.Context) *Controller {
ctrl.secretLister = secretsInformer.Lister()
ctrl.issuerFactory = issuer.NewIssuerFactory(ctx)
ctrl.ctx = logf.NewContext(ctx.RootContext, nil, ControllerName)
ctrl.metrics = metrics.Default
return ctrl
}

View File

@ -21,7 +21,7 @@ import (
"fmt"
"reflect"
"k8s.io/api/core/v1"
v1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/util/errors"
apiutil "github.com/jetstack/cert-manager/pkg/api/util"
@ -38,6 +38,8 @@ const (
)
func (c *Controller) Sync(ctx context.Context, iss *v1alpha1.Issuer) (err error) {
c.metrics.ControllerSyncCallCount.WithLabelValues("issuers").Inc()
log := logf.FromContext(ctx)
issuerCopy := iss.DeepCopy()

View File

@ -84,6 +84,15 @@ var ACMEClientRequestDurationSeconds = prometheus.NewSummaryVec(
[]string{"scheme", "host", "path", "method", "status"},
)
var ControllerSyncCallCount = prometheus.NewCounterVec(
prometheus.CounterOpts{
Namespace: namespace,
Name: "controller_sync_call_count",
Help: "The number of sync() calls made by a controller.",
},
[]string{"controller"},
)
type Metrics struct {
ctx context.Context
http.Server
@ -93,6 +102,7 @@ type Metrics struct {
CertificateExpiryTimeSeconds *prometheus.GaugeVec
ACMEClientRequestDurationSeconds *prometheus.SummaryVec
ACMEClientRequestCount *prometheus.CounterVec
ControllerSyncCallCount *prometheus.CounterVec
}
func New(ctx context.Context) *Metrics {
@ -112,6 +122,7 @@ func New(ctx context.Context) *Metrics {
CertificateExpiryTimeSeconds: CertificateExpiryTimeSeconds,
ACMEClientRequestDurationSeconds: ACMEClientRequestDurationSeconds,
ACMEClientRequestCount: ACMEClientRequestCount,
ControllerSyncCallCount: ControllerSyncCallCount,
}
router.Handle("/metrics", promhttp.HandlerFor(s.registry, promhttp.HandlerOpts{}))
@ -141,6 +152,7 @@ func (m *Metrics) Start(stopCh <-chan struct{}) {
m.registry.MustRegister(m.CertificateExpiryTimeSeconds)
m.registry.MustRegister(m.ACMEClientRequestDurationSeconds)
m.registry.MustRegister(m.ACMEClientRequestCount)
m.registry.MustRegister(m.ControllerSyncCallCount)
go func() {
log := log.WithValues("address", m.Addr)