-
Story
-
Resolution: Done
-
Critical
-
None
-
None
-
None
-
None
The user interface would give users the option to specify a profile they want CMO to scrape. The set of possible profiles will be pre-defined by us.
If this new option is used, CMO populates the [pod|service]MonitorSelector to select resources that carry the requested profile, probably as a label with the respective value (label name tbd, lets call it the profile label for now), and monitors that do not have the label set at all. So monitors will be picked from two sets: a monitor with the profile label and the requests label value and all monitors without the profile label present (additionally to the current namespace selector).
After this it is up to the ServiceMonitors to implement the scrape profiles. Without any change to the ServiceMonitors, even after setting a profile in the CMO config, things should work as they did before. When a ServiceMonitor owner wants to implement scrape profiles, they needs to provide ServiceMonitors for all profiles and no unlabeled ServiceMonitor. If a profile label is not used, this ServiceMonitor will not be scraped at all for a given profile.
Let's say that we support 3 scrape profiles:
- "full" (same as today)
- "operational" (only collect metrics for recording rules and dashboards)
- "uponly" (collect the up metric only and none of the exposed metrics)
When the cluster admin enables the "operational" profile, the k8s Prometheus resource would be
apiVersion: monitoring.coreos.com/v1
kind: Prometheus
metadata:
name: k8s
namespace: openshift-monitoring
spec:
serviceMonitorSelector:
matchExpressions:
- key: monitoring.openshift.io/scrape-profile
operator: NotIn
values:
- "full"
- "uponly"
An hypothetical component that want to support the scrape profiles would need to provision 3 service monitors for each service (1 service monitor per profile).
---
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
labels:
monitoring.openshift.io/scrape-profile: full
name: foo-full
namespace: openshift-bar
spec:
endpoints:
port: metrics
selector:
matchLabels:
app.kubernetes.io/name: foo
---
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
labels:
monitoring.openshift.io/scrape-profile: operational
name: foo-operational
namespace: openshift-bar
metricRelabelings:
- sourceLabels: [__name__]
action: keep
regex: "requests_total|requests_failed_total"
spec:
endpoints:
port: metrics
selector:
matchLabels:
app.kubernetes.io/name: foo
---
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
labels:
monitoring.openshift.io/scrape-profile: uponly
name: foo-uponly
namespace: openshift-bar
spec:
endpoints:
port: metrics
metricRelabelings:
- sourceLabels: [__name__]
action: drop
regex: ".+"
selector:
matchLabels:
app.kubernetes.io/name: foo
A component that doesn't need/want to adopt scrape profile should be scraped as before irrespective of the configured scrape profile.
AI
- Demonstrate that the proposed implementation actually works.
1.
|
Pre-merge Testing |
|
Closed | |
Junqi Zhao |
2.
|
Post-merge Testing |
|
Closed | |
Junqi Zhao |
3.
|
E2E Automation |
|
Closed | |
Junqi Zhao |
4.
|
CI Integration |
|
Closed | |
Junqi Zhao |