From 9291ca3249e656bb0f50d79a18e37bac0ec0e959 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beatrice=20Dellac=C3=A0?= Date: Sun, 30 Mar 2025 20:32:32 +0200 Subject: [PATCH] update prometheus --- deploy/prometheus/deploy.jsonnet | 71 ++++++++++++++----- .../prometheus-self-servicemonitor.yaml | 18 +++++ 2 files changed, 73 insertions(+), 16 deletions(-) create mode 100644 deploy/prometheus/manifests/prometheus-self-servicemonitor.yaml diff --git a/deploy/prometheus/deploy.jsonnet b/deploy/prometheus/deploy.jsonnet index 1ede903..f0f0fdd 100644 --- a/deploy/prometheus/deploy.jsonnet +++ b/deploy/prometheus/deploy.jsonnet @@ -24,6 +24,9 @@ local kp = (import 'kube-prometheus/main.libsonnet') + { }, }, }, + // You may try enabling selfMonitor here if you want the built-in option, + // but as noted it doesn't work reliably: + // selfMonitor: { enabled: true }, }, }, }, @@ -112,19 +115,55 @@ local kp = (import 'kube-prometheus/main.libsonnet') + { }; // Assemble all manifests (kube-prometheus stack components) -{ 'setup/0namespace-namespace': kp.kubePrometheus.namespace } + -{ ['setup/prometheus-operator-' + name]: kp.prometheusOperator[name] - for name in std.filter(function(name) name != 'serviceMonitor' && name != 'prometheusRule', - std.objectFields(kp.prometheusOperator)) } + -{ 'prometheus-operator-serviceMonitor': kp.prometheusOperator.serviceMonitor } + -{ 'prometheus-operator-prometheusRule': kp.prometheusOperator.prometheusRule } + -{ 'kube-prometheus-prometheusRule': kp.kubePrometheus.prometheusRule } + -{ ['alertmanager-' + name]: kp.alertmanager[name] for name in std.objectFields(kp.alertmanager) } + -{ ['blackbox-exporter-' + name]: kp.blackboxExporter[name] for name in std.objectFields(kp.blackboxExporter) } + -// { ['grafana-' + name]: kp.grafana[name] for name in std.objectFields(kp.grafana) } + // Grafana disabled -{ ['kube-state-metrics-' + name]: kp.kubeStateMetrics[name] for name in std.objectFields(kp.kubeStateMetrics) } + -{ ['kubernetes-' + name]: kp.kubernetesControlPlane[name] for name in std.objectFields(kp.kubernetesControlPlane) } + -{ ['node-exporter-' + name]: kp.nodeExporter[name] for name in std.objectFields(kp.nodeExporter) } + -{ ['prometheus-' + name]: kp.prometheus[name] for name in std.objectFields(kp.prometheus) } + -{ ['prometheus-adapter-' + name]: kp.prometheusAdapter[name] for name in std.objectFields(kp.prometheusAdapter) } + -{ [name + '-ingress']: kp.ingress[name] for name in std.objectFields(kp.ingress) } +local manifests = + { 'setup/0namespace-namespace': kp.kubePrometheus.namespace } + + { ['setup/prometheus-operator-' + name]: kp.prometheusOperator[name] + for name in std.filter(function(name) name != 'serviceMonitor' && name != 'prometheusRule', + std.objectFields(kp.prometheusOperator)) } + + { 'prometheus-operator-serviceMonitor': kp.prometheusOperator.serviceMonitor } + + { 'prometheus-operator-prometheusRule': kp.prometheusOperator.prometheusRule } + + { 'kube-prometheus-prometheusRule': kp.kubePrometheus.prometheusRule } + + { ['alertmanager-' + name]: kp.alertmanager[name] for name in std.objectFields(kp.alertmanager) } + + { ['blackbox-exporter-' + name]: kp.blackboxExporter[name] for name in std.objectFields(kp.blackboxExporter) } + + // { ['grafana-' + name]: kp.grafana[name] for name in std.objectFields(kp.grafana) } + // Grafana disabled + { ['kube-state-metrics-' + name]: kp.kubeStateMetrics[name] for name in std.objectFields(kp.kubeStateMetrics) } + + { ['kubernetes-' + name]: kp.kubernetesControlPlane[name] for name in std.objectFields(kp.kubernetesControlPlane) } + + { ['node-exporter-' + name]: kp.nodeExporter[name] for name in std.objectFields(kp.nodeExporter) } + + { ['prometheus-' + name]: kp.prometheus[name] for name in std.objectFields(kp.prometheus) } + + { ['prometheus-adapter-' + name]: kp.prometheusAdapter[name] for name in std.objectFields(kp.prometheusAdapter) } + + { [name + '-ingress']: kp.ingress[name] for name in std.objectFields(kp.ingress) } + + + // Add an explicit ServiceMonitor for Prometheus to scrape its own metrics + { ['prometheus-self-servicemonitor']: + { + apiVersion: 'monitoring.coreos.com/v1', + kind: 'ServiceMonitor', + metadata: { + name: 'prometheus', + namespace: kp.values.common.namespace, + labels: { + job: 'prometheus', + }, + }, + spec: { + jobLabel: 'prometheus', + selector: { + // This selector must match the labels on the Prometheus service. + // Adjust as necessary if your service uses a different label. + matchLabels: { + prometheus: 'prometheus-k8s', + }, + }, + endpoints: [{ + port: 'web', + interval: '30s', + scheme: 'https', + tlsConfig: { + insecureSkipVerify: true, + }, + }], + }, + } + }; + +manifests \ No newline at end of file diff --git a/deploy/prometheus/manifests/prometheus-self-servicemonitor.yaml b/deploy/prometheus/manifests/prometheus-self-servicemonitor.yaml new file mode 100644 index 0000000..84ccd73 --- /dev/null +++ b/deploy/prometheus/manifests/prometheus-self-servicemonitor.yaml @@ -0,0 +1,18 @@ +apiVersion: monitoring.coreos.com/v1 +kind: ServiceMonitor +metadata: + labels: + job: prometheus + name: prometheus + namespace: monitoring +spec: + endpoints: + - interval: 30s + port: web + scheme: https + tlsConfig: + insecureSkipVerify: true + jobLabel: prometheus + selector: + matchLabels: + prometheus: prometheus-k8s