Skip to content

Commit

Permalink
Add metrics (#67)
Browse files Browse the repository at this point in the history
<!-- Thank you for your contribution. Before you submit the pull
request:
1. Follow contributing guidelines, templates, the recommended Git
workflow, and any related documentation.
2. Read and submit the required Contributor Licence Agreements
(https://github.com/kyma-project/community/blob/main/CONTRIBUTING.md#agreements-and-licenses).
3. Test your changes and attach their results to the pull request.
4. Update the relevant documentation.

If the pull request requires a decision, follow the [decision-making
process](https://github.com/kyma-project/community/blob/main/governance.md)
and replace the PR template with the [decision record
template](https://github.com/kyma-project/community/blob/main/.github/ISSUE_TEMPLATE/decision-record.md).
-->

**Description**

Initial metrics PR, more metrics will be added when dashboard is
connected

**Related issue(s)**
<!-- If you refer to a particular issue, provide its number. For
example, `Resolves #123`, `Fixes #43`, or `See also #33`. -->
#28
  • Loading branch information
kyma-bot authored Dec 18, 2023
2 parents ac39865 + db8cdac commit 554b286
Show file tree
Hide file tree
Showing 12 changed files with 120 additions and 20 deletions.
1 change: 1 addition & 0 deletions config/manager/kustomization.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
resources:
- manager.yaml
- metrics.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
images:
Expand Down
5 changes: 5 additions & 0 deletions config/manager/manager.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ spec:
app.kubernetes.io/component: compass-manager.kyma-project.io
labels:
control-plane: compass-manager
app.kubernetes.io/name: compass-manager
app.kubernetes.io/component: compass-manager.kyma-project.io
spec:
securityContext:
runAsNonRoot: true
Expand All @@ -43,6 +45,9 @@ spec:
value: /director-secret/director.yaml
- name : APP_ENABLED_REGISTRATION
value: "false"
ports:
- containerPort: 8080
name: metrics
volumeMounts:
- name: director-oauth
mountPath: /director-secret/
Expand Down
23 changes: 23 additions & 0 deletions config/manager/metrics.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
apiVersion: v1
kind: Service
metadata:
labels:
control-plane: compass-manager
app.kubernetes.io/name: metrics
app.kubernetes.io/instance: compass-manager
app.kubernetes.io/component: compass-manager.kyma-project.io
app.kubernetes.io/created-by: compass-manager
app.kubernetes.io/part-of: compass-manager
app.kubernetes.io/managed-by: kustomize
name: compass-manager-metrics
namespace: kcp-system
spec:
ports:
- name: metrics
port: 8080
protocol: TCP
appProtocol: http
targetPort: metrics
selector:
app.kubernetes.io/name: compass-manager
app.kubernetes.io/component: compass-manager.kyma-project.io
14 changes: 6 additions & 8 deletions config/prometheus/monitor.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ kind: ServiceMonitor
metadata:
labels:
control-plane: compass-manager
app.kubernetes.io/name: servicemonitor
app.kubernetes.io/instance: compass-manager-metrics-monitor
app.kubernetes.io/name: compass-metrics-monitor
app.kubernetes.io/component: metrics
app.kubernetes.io/instance: compass-manager-metrics-monitor
app.kubernetes.io/created-by: compass-manager
app.kubernetes.io/part-of: compass-manager
app.kubernetes.io/managed-by: kustomize
Expand All @@ -16,11 +16,9 @@ metadata:
spec:
endpoints:
- path: /metrics
port: https
scheme: https
bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
tlsConfig:
insecureSkipVerify: true
port: metrics
scheme: http
selector:
matchLabels:
control-plane: compass-manager
app.kubernetes.io/name: metrics
app.kubernetes.io/component: compass-manager.kyma-project.io
16 changes: 15 additions & 1 deletion controllers/compassmanager_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (
"time"

"github.com/kyma-project/compass-manager/api/v1beta1"
"github.com/kyma-project/compass-manager/controllers/metrics"
kyma "github.com/kyma-project/lifecycle-manager/api/v1beta2"
"github.com/pkg/errors"
log "github.com/sirupsen/logrus"
Expand Down Expand Up @@ -94,9 +95,18 @@ type CompassManagerReconciler struct {
requeueTime time.Duration
enabledRegistration bool
cluster *ControlPlaneInterface
metrics metrics.Metrics
}

func NewCompassManagerReconciler(mgr manager.Manager, log *log.Logger, c Configurator, r Registrator, requeueTime time.Duration, enabledRegistration bool) *CompassManagerReconciler {
func NewCompassManagerReconciler(
mgr manager.Manager,
log *log.Logger,
c Configurator,
r Registrator,
requeueTime time.Duration,
enabledRegistration bool,
metrics metrics.Metrics,
) *CompassManagerReconciler {
return &CompassManagerReconciler{
Client: mgr.GetClient(),
Scheme: mgr.GetScheme(),
Expand All @@ -106,6 +116,7 @@ func NewCompassManagerReconciler(mgr manager.Manager, log *log.Logger, c Configu
requeueTime: requeueTime,
enabledRegistration: enabledRegistration,
cluster: NewControlPlaneInterface(mgr.GetClient(), log),
metrics: metrics,
}
}

Expand Down Expand Up @@ -219,6 +230,7 @@ func (cm *CompassManagerReconciler) handleKymaDeletion(name types.NamespacedName
cm.Log.Warnf("Failed to deregister Runtime from Compass for Kyma Resource %s: %v", name.Name, err)
return errors.Wrap(&DirectorError{message: err}, "failed to deregister Runtime from Compass")
}
cm.metrics.IncUnregister()
cm.Log.Infof("Runtime %s deregistered from Compass", name.Name)
} else {
cm.Log.Infof("Runtime was not connected in Compass, deleting without deregistering")
Expand Down Expand Up @@ -268,6 +280,7 @@ func (cm *CompassManagerReconciler) registerRuntimeInCompassAndRequeue(kymaName
return ctrl.Result{Requeue: true}, errors.Wrapf(regError, "failed attempt to register runtime for Kyma resource: %s", kymaName.Name)
}

cm.metrics.IncRegister()
cm.Log.Infof("Runtime %s registered in Compass", newCompassRuntimeID)
cmerr := cm.cluster.UpsertCompassMapping(kymaName, newCompassRuntimeID)
if cmerr != nil {
Expand All @@ -292,6 +305,7 @@ func (cm *CompassManagerReconciler) configureRuntimeAndSetMappingStatus(kymaName
return ctrl.Result{Requeue: true}, errors.Wrapf(cfgError, "failed attempt to configure Compass Runtime Agent for Kyma resource %s", kymaName.Name)
}

cm.metrics.IncConfigure()
cm.Log.Infof("Compass Runtime Agent for Runtime %s configured.", compassRuntimeID)

statErr := cm.cluster.SetCompassMappingStatus(kymaName, Registered|Configured)
Expand Down
43 changes: 43 additions & 0 deletions controllers/metrics/metrics.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package metrics

import (
"github.com/prometheus/client_golang/prometheus"
"sigs.k8s.io/controller-runtime/pkg/metrics"
)

type Metrics struct {
configured prometheus.Counter
registered prometheus.Counter
unregistered prometheus.Counter
}

func NewMetrics() Metrics {
m := Metrics{
configured: prometheus.NewCounter(prometheus.CounterOpts{
Name: "configure_counter",
Help: "Number of cluster configured",
}),
registered: prometheus.NewCounter(prometheus.CounterOpts{
Name: "register_counter",
Help: "Number of cluster registered",
}),
unregistered: prometheus.NewCounter(prometheus.CounterOpts{
Name: "unregister_counter",
Help: "Number of cluster unregistered",
}),
}
metrics.Registry.MustRegister(m.configured, m.registered, m.unregistered)
return m
}

func (m Metrics) IncConfigure() {
m.configured.Inc()
}

func (m Metrics) IncRegister() {
m.registered.Inc()
}

func (m Metrics) IncUnregister() {
m.unregistered.Inc()
}
14 changes: 12 additions & 2 deletions controllers/suite_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
"time"

"github.com/kyma-project/compass-manager/api/v1beta1"
"github.com/kyma-project/compass-manager/controllers/metrics"
"github.com/kyma-project/compass-manager/controllers/mocks"
kyma "github.com/kyma-project/lifecycle-manager/api/v1beta2"
. "github.com/onsi/ginkgo/v2" //nolint:revive
Expand Down Expand Up @@ -75,8 +76,17 @@ var _ = BeforeSuite(func() {
prepareMockFunctions(mockConfigurator, mockRegistrator)

requeueTime := time.Second * 5

cm = NewCompassManagerReconciler(k8sManager, log, mockConfigurator, mockRegistrator, requeueTime, true)
metrics := metrics.NewMetrics()

cm = NewCompassManagerReconciler(
k8sManager,
log,
mockConfigurator,
mockRegistrator,
requeueTime,
true,
metrics,
)
k8sClient = k8sManager.GetClient()
err = cm.SetupWithManager(k8sManager)
Expect(err).ToNot(HaveOccurred())
Expand Down
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ require (
github.com/onsi/ginkgo/v2 v2.13.2
github.com/onsi/gomega v1.30.0
github.com/pkg/errors v0.9.1
github.com/prometheus/client_golang v1.17.0
github.com/sirupsen/logrus v1.9.3
github.com/stretchr/testify v1.8.4
github.com/vektah/gqlparser/v2 v2.5.10
Expand Down Expand Up @@ -196,7 +197,6 @@ require (
github.com/pelletier/go-toml/v2 v2.1.0 // indirect
github.com/philhofer/fwd v1.1.2 // indirect
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
github.com/prometheus/client_golang v1.17.0 // indirect
github.com/prometheus/client_model v0.5.0 // indirect
github.com/prometheus/common v0.45.0 // indirect
github.com/prometheus/procfs v0.12.0 // indirect
Expand Down
5 changes: 1 addition & 4 deletions internal/director/mocks/Client.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 0 additions & 1 deletion internal/graphql/mocks/Client.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 1 addition & 2 deletions internal/oauth/mocks/Client.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

13 changes: 12 additions & 1 deletion main.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (

"github.com/kyma-project/compass-manager/api/v1beta1"
"github.com/kyma-project/compass-manager/controllers"
"github.com/kyma-project/compass-manager/controllers/metrics"
"github.com/kyma-project/compass-manager/internal/director"
"github.com/kyma-project/compass-manager/internal/graphql"
"github.com/kyma-project/compass-manager/internal/oauth"
Expand Down Expand Up @@ -113,7 +114,17 @@ func main() {
runtimeAgentConfigurator := controllers.NewRuntimeAgentConfigurator(directorClient, log)
requeueTime := time.Second * 5 //nolint:gomnd

compassManagerReconciler := controllers.NewCompassManagerReconciler(mgr, log, runtimeAgentConfigurator, compassRegistrator, requeueTime, cfg.EnabledRegistration)
metrics := metrics.NewMetrics()

compassManagerReconciler := controllers.NewCompassManagerReconciler(
mgr,
log,
runtimeAgentConfigurator,
compassRegistrator,
requeueTime,
cfg.EnabledRegistration,
metrics,
)
if err = compassManagerReconciler.SetupWithManager(mgr); err != nil {
setupLog.Error(err, "unable to create controller", "controller", "CompassManager")
os.Exit(1)
Expand Down

0 comments on commit 554b286

Please sign in to comment.