Configuring metrics collection for External Secrets Operator for Red Hat OpenShift by using a ServiceMonitor
The External Secrets Operator for Red Hat OpenShift exposes metrics by default on port 8443 at the /metrics service endpoint. You can configure metrics collection for the Operator by creating a ServiceMonitor custom resource (CR) that enables the Prometheus Operator to collect custom metrics. For more information, see "Configuring user workload monitoring".
-
You have access to the cluster as a user with the
cluster-adminrole. -
You have installed the External Secrets Operator for Red Hat OpenShift.
-
You have enabled the user workload monitoring.
-
Configure the Operator to use
HTTPfor the metrics server.HTTPSis enabled by default.-
Update the subscription object for External Secrets Operator for Red Hat OpenShift to configure the
HTTPprotocol by running the following command:$ oc -n external-secrets-operator patch subscription openshift-external-secrets-operator --type='merge' -p '{"spec":{"config":{"env":[{"name":"METRICS_BIND_ADDRESS","value":":8080"}, {"name": "METRICS_SECURE", "value": "false"}]}}}' -
To verify that the External Secrets Operator pod is redeployed and that the configured values for
METRICS_BIND_ADDRESSandMETRICS_SECUREare updated, run the following command:$ oc set env --list deployment/external-secrets-operator-controller-manager -n external-secrets-operator | grep -e METRICS_BIND_ADDRESS -e METRICS_SECURE -e containerThe following example shows that the
METRICS_BIND_ADDRESSandMETRICS_SECUREhave been updated:# deployments/external-secrets-operator-controller-manager, container manager METRICS_BIND_ADDRESS=:8080 METRICS_SECURE=false
-
-
Create the
Secretresource with thekubernetes.io/service-account.nameannotation to inject the token required for authenticating with the metrics server.-
Create the
secret-external-secrets-operator.yamlYAML file:apiVersion: v1 kind: Secret metadata: labels: app: external-secrets-operator name: external-secrets-operator-metrics-auth namespace: external-secrets-operator annotations: kubernetes.io/service-account.name: external-secrets-operator-controller-manager type: kubernetes.io/service-account-token -
Create the
Secretresource by running the following command:$ oc apply -f secret-external-secrets-operator.yaml
-
-
Create the
ClusterRoleBindingresource required for granting permissions to access metrics:-
Create the
clusterrolebinding-external-secrets.yamlYAML file:The following example shows a
clusterrolebinding-external-secrets.yamlfile.apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: labels: app: external-secrets-operator name: external-secrets-allow-metrics-access roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: external-secrets-operator-metrics-reader subjects: - kind: ServiceAccount name: external-secrets-operator-controller-manager namespace: external-secrets-operator -
Create the
ClusterRoldeBindingcustom resource by running the following command:$ oc apply -f clusterrolebinding-external-secrets.yaml
-
-
Create the
ServiceMonitorCR if using the defaultHTTPS:-
Create the
servicemonitor-external-secrets-operator-https.yamlYAML file:apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: labels: app: external-secrets-operator name: external-secrets-operator-metrics-monitor namespace: external-secrets-operator spec: endpoints: - authorization: credentials: name: external-secrets-operator-metrics-auth key: token type: Bearer interval: 60s path: /metrics port: metrics-https scheme: https scrapeTimeout: 30s tlsConfig: ca: configMap: name: openshift-service-ca.crt key: service-ca.crt serverName: external-secrets-operator-controller-manager-metrics-service.external-secrets-operator.svc.cluster.local namespaceSelector: matchNames: - external-secrets-operator selector: matchLabels: app: external-secrets-operator svc: external-secrets-operator-controller-manager-metrics-service -
Create the
ServiceMonitorCR by running the following command:$ oc apply -f servicemonitor-external-secrets-operator-https.yaml
-
-
Create the
ServiceMonitorCR if configured to useHTTP:-
Create the
servicemonitor-external-secrets-operator-http.yamlYAML file:apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: labels: app: external-secrets-operator name: external-secrets-operator-metrics-monitor namespace: external-secrets-operator spec: endpoints: - authorization: credentials: name: external-secrets-operator-metrics-auth key: token type: Bearer interval: 60s path: /metrics port: metrics-http scheme: http scrapeTimeout: 30s namespaceSelector: matchNames: - external-secrets-operator selector: matchLabels: app: external-secrets-operator svc: external-secrets-operator-controller-manager-metrics-service -
Create the
ServiceMonitorCR by running the following command:$ oc apply -f servicemonitor-external-secrets-operator-http.yamlAfter the
ServiceMonitorCR is created, the user workload Prometheus instance begins metrics collection from the Operator. The collected metrics are labeled withjob="external-secrets-operator-controller-manager-metrics-service".
-
-
In the Red Hat OpenShift Container Platform web console, navigate to Observe → Targets.
-
In the Label filter field, enter the following labels to filter the metrics targets for each operand:
$ service=external-secrets-operator-controller-manager-metrics-service -
Confirm that the Status column shows
Upfor theexternal-secrets-operator.