Add mon-exporter as scrape target in Prometheus 02/12702/4
authorgarciadeblas <gerardo.garciadeblas@telefonica.com>
Thu, 17 Nov 2022 23:55:44 +0000 (00:55 +0100)
committergarciadeblas <gerardo.garciadeblas@telefonica.com>
Fri, 18 Nov 2022 09:54:12 +0000 (10:54 +0100)
The Prometheus sidecar is expected to generate the scrape targets from
the config map and from the prometheus_jobs in MongoDB. MON is adding
mon-exporter as prometheus_job in MongoDB. There are race conditions in
the start of MON and Prometheus that prevent the sidecar to be aware
of the mon-exporter being added to prometheus_jobs collection in
MongoDB.

This change adds mon-exporter to the default scrape-targets and reconciles
the jobs in Mongo and the jobs in the configmap, prevailing the job in the
configmap if duplicated.

Change-Id: Ib6f1cb89723d7b4942eeb77fd0ea46a0d3493d58
Signed-off-by: garciadeblas <gerardo.garciadeblas@telefonica.com>
docker/Prometheus/src/app.py
installers/docker/osm_pods/ng-prometheus.yaml
installers/docker/osm_pods/prometheus.yaml

index eb62555..b06f448 100755 (executable)
@@ -70,9 +70,20 @@ def generate_prometheus_config(prometheus_jobs, config_file_path):
     if "scrape_configs" not in config_file_yaml:
         config_file_yaml["scrape_configs"] = []
 
+    prometheus_jobs_to_be_added = []
+
     for prometheus_job in prometheus_jobs:
         cleaned_up_job = clean_up_job(prometheus_job)
-        config_file_yaml["scrape_configs"].append(cleaned_up_job)
+        job_to_be_added = True
+        for sc in config_file_yaml["scrape_configs"]:
+            if sc.get("job_name") == cleaned_up_job.get("job_name"):
+                job_to_be_added = False
+                break
+        if job_to_be_added:
+            prometheus_jobs_to_be_added.append(cleaned_up_job)
+
+    for job in prometheus_jobs_to_be_added:
+        config_file_yaml["scrape_configs"].append(job)
 
     return config_file_yaml
 
index 56aca67..ebef7a9 100644 (file)
@@ -85,6 +85,9 @@ data:
     # A scrape configuration containing exactly one endpoint to scrape:
     # Here it's Prometheus itself.
     scrape_configs:
+      - job_name: 'mon_exporter'
+        static_configs:
+        - targets: ['mon:8000']
       - job_name: pushgateway
         honor_labels: true
         scrape_interval: 30s
index 2610710..241ed72 100644 (file)
@@ -73,8 +73,10 @@ data:
 
     # A scrape configuration containing exactly one endpoint to scrape:
     # Here it's Prometheus itself.
-    scrape_configs: []
-    # scrape_configs:
+    scrape_configs:
+      - job_name: 'mon_exporter'
+        static_configs:
+        - targets: ['mon:8000']
       # Add here other external targets, e.g. a pushgateway
       # - job_name: 'pushgateway'
       #   static_configs: