Browse Source

Improve configuration flexibility to match prometheus way of doing

things
Philippe Caseiro 11 months ago
parent
commit
ab479fd33a
2 changed files with 139 additions and 102 deletions
  1. 118
    94
      dicos/70_prometheus.xml
  2. 21
    8
      tmpl/prometheus.yml

+ 118
- 94
dicos/70_prometheus.xml View File

@@ -2,7 +2,7 @@
2 2
 <creole>
3 3
     <files>
4 4
         <file filelist='prometheus'   name='/etc/prometheus/prometheus.yml'   mkdir='True' rm='True'/>
5
-		<file filelist='alertmanager' name='/etc/prometheus/alertmanager.yml' mkdir='True' rm='True'/>
5
+        <file filelist='alertmanager' name='/etc/prometheus/alertmanager.yml' mkdir='True' rm='True'/>
6 6
         <file filelist='grafana'      name='/etc/grafana/grafana.ini'         mkdir='True' rm='True'/>
7 7
 
8 8
         <service>prometheus</service>
@@ -18,20 +18,20 @@
18 18
     </files>
19 19
     <variables>
20 20
         <family name='services'>
21
-        <variable name='activer_prometheus' type='oui/non' description="Activer le service prometheus sur le serveur">
22
-        <value>oui</value>
21
+            <variable name='activer_prometheus' type='oui/non' description="Activer le service prometheus sur le serveur">
22
+                <value>oui</value>
23 23
             </variable>
24
-    </family>
24
+        </family>
25 25
         <family name='prometheus'>
26
-        <variable name='activer_grafana' type='oui/non' description="Activer le service grafana sur le serveur">
27
-			<value>oui</value>
28
-        </variable>
29
-        <variable name='activerAlertmanager' type='oui/non' description="Activer le service d'alertes">
30
-			<value>oui</value>
31
-        </variable>
32
-		<variable name='prometheusJobName' type='string' description="Nom du job ajouté au label">
26
+            <variable name='activer_grafana' type='oui/non' description="Activer le service grafana sur le serveur">
27
+                <value>oui</value>
28
+            </variable>
29
+            <variable name='activerAlertmanager' type='oui/non' description="Activer le service d'alertes">
30
+                <value>oui</value>
31
+            </variable>
32
+            <variable name='prometheusJobName' type='string' description="Nom du job ajouté au label">
33 33
                 <value>prometheus</value>
34
-        </variable>
34
+            </variable>
35 35
             <variable name='prometheusScrapeInterval' type='string' description="Intervalle de récupération des données sur les différents noeuds">
36 36
                 <value>15s</value>
37 37
             </variable>
@@ -41,88 +41,106 @@
41 41
             <variable name='prometheusScrapeTimeout' type='string' description="Temps d'attente avant que la récupération de données échoue">
42 42
                 <value>10s</value>
43 43
             </variable>
44
-        <variable name='job_name_node' type='string' description="Nom du job pour les noeuds" mode='expert'>
45
-        <value>node</value>
46
-        </variable>
47
-        <variable name='job_file_config' type='string' description="Emplacement des fichiers de configuration des noeuds" auto_freeze='True' mode='expert' mandatory='True'>
44
+            <variable name='job_name_node' type='string' description="Nom du job pour les noeuds" mode='expert'>
45
+                <value>node</value>
46
+            </variable>
47
+            <variable name='job_file_config' type='string' description="Emplacement des fichiers de configuration des noeuds" auto_freeze='True' mode='expert' mandatory='True'>
48 48
                 <value>/etc/prometheus/nodes</value>
49 49
             </variable>
50 50
         </family>
51
-    <family name='Clients prometheus'>
52
-            <variable name='ajout_client_prometheus' type='oui/non' description="Ajouter un nouveau client à Prometheus">
51
+        <family name='Jobs prometheus'>
52
+            <variable name='promJobs' type='string' description="Nom du job prometheus"/>
53
+            <variable name='honorLabels' type='oui/non' description='Garder les labels en cas de conflit' mode='expert'>
54
+                <value>oui</value>
55
+            </variable>
56
+            <variable name='scrpInterval' type='number' description="Interval d'intérogation de la sonde (en secondes)">
57
+                <value>15</value>
58
+            </variable>
59
+            <variable name='scrpTimeout' type='number' description="Délais d'attente maximum lors de l'interrogation d'une sonde">
60
+                <value>10</value>
61
+            </variable>
62
+            <variable name='scrpScheme' type='string' description="Protocole à utiliser pour l'interrogation de la sonde">
63
+                <value>http</value>
64
+            </variable>
65
+
66
+            <variable name='addTargetPrometheus' type='oui/non' description="Ajouter des cibles statiques à Prometheus">
53 67
                 <value>non</value>
54 68
             </variable>
55
-            <!-- Client standard  -->
56
-            <variable name='prCli' type='string' description='Nom du client prometheus' multi='True'/>
57
-            <variable name='prCliIP' type='ip' description="Adresse IP du client prometheus"/>
58
-            <variable name='prCliSonde' type='string' description="Sonde a utiliser pour ce client">
69
+
70
+            <!-- Job standard  -->
71
+            <variable name='prTarg' type='string' description='Nom de la cible prometheus' multi='True'/>
72
+            <variable name='prTargJob' type='string' description='Nom du job de rattachement de la cible'/>
73
+            <variable name='prTargIP' type='ip' description="Adresse IP de la cible prometheus"/>
74
+            <variable name='prTargSonde' type='string' description="Sonde a utiliser pour ce client">
59 75
                 <value>Node Exporter</value>
60 76
             </variable>
61 77
 
62
-            <variable name='addPrOpenCli' type='oui/non' description="Ajouter un client personnalisé">
78
+            <variable name='addPrOpenTarg' type='oui/non' description="Ajouter un client personnalisé">
63 79
                 <value>non</value>
64 80
             </variable>
65
-            <!-- Client libre  -->
66
-            <variable name='prOpenCli' type='string' description='Nom du client personnalisé prometheus' multi='True'/>
67
-            <variable name='prOpenCliIP' type='ip' description="Adresse IP"/>
68
-            <variable name='prOpenCliPort' type='number' description="Port d'écoute de la sonde"/>
81
+            <!-- Job libre  -->
82
+            <variable name='prOpenTarg' type='string' description='Nom de la cible personnalisé prometheus' multi='True'/>
83
+            <variable name='prOpenTargJob' type='string' description='Nom du job de rattachement de la cible'/>
84
+            <variable name='prOpenTargIP' type='ip' description="Adresse IP de la cible"/>
85
+            <variable name='prOpenTargPort' type='number' description="Port d'écoute de la sonde"/>
69 86
         </family>
70
-    <family name="grafana">
71
-        <variable name='grafana_domain' type='string' description="Nom de Domaine ou IP pour accèder à l'interface Grafana" mandatory='True'>
72
-			<value>localhost</value>
73
-        </variable>
74
-		<variable name='grafana_session_max_lifetime' type='string' description="Durée avant déconnexion de l'interface Grafana (en seconde)">
75
-			<value>86400</value>
76
-		</variable>
77
-		<variable name='grafana_admin_passwd' type='string' description="Mot de passe admin pour la première connexion">
78
-			<value>admin</value>
79
-		</variable>
80
-		<variable name='grafana_sign_up' type='string' description="Activer l'enregistrement automatique">
81
-			<value>false</value>
82
-		</variable>
83
-		<variable name='grafana_auth_anonymous' type='string' description="Activer l'accès aux utilisateurs non enregistrés">
84
-			<value>false</value>
85
-		</variable>
86
-    </family>
87 87
 
88
-    <family name="alertes prometheus">
89
-        <variable name='alSMTPHost' type='string' description="Adresse du serveur SMTP pour l'envois des alertes"/>
90
-        <variable name='alSMTPPort' type='string' description="Port d'écoute du serveur SMTP pour l'envois des alertes"/>
91
-        <variable name='alFrom' type='string' description="Adresse d'origine des emails d'alerte"/>
92
-		<variable name='alSMTPTLS' type='oui/non' description="Utiliser STARTTLS">
93
-			<value>non</value>
94
-		</variable>
95
-        <variable name='alSMTPAuth' type='oui/non' description="Authentification requise sur le serveur SMTP ?">
96
-            <value>non</value>
97
-        </variable>
98
-        <variable name='alSMTPUser' type='string' description="Utilisateur SMTP"/>
99
-        <variable name='alSMTPPass' type='string' description="Mot de passe"/>
100
-
101
-
102
-        <variable name='alReceiver' type='string' description="Nom du destinataire" multi='True'/>
103
-        <variable name='alReceiverEmail' type='string' description="Adresse email du destinataire"/>
104
-
105
-        <variable name='alDefaultReceiver' type='string' description='Nom du destinataire par défaut'/>
106
-
107
-        <variable name='alRoute' type='string' description="Nom de la rêgle de distribution des alertes" multi="True"/>
108
-        <variable name='alRouteMatchSource' type='string' description='Source de correspondance'/>
109
-        <variable name='alRouteMatchValue' type='string' description='Valeur attendue'/>
110
-        <variable name='alRouteMatchReceiver' type='string' description="Nom du destinataire de l'alerte"/>
111
-
112
-        <variable name='alRouteRegxp' type='string' description="Rêgle de distribution des alertes" multi="True"/>
113
-        <variable name='alRouteMatchRegExpSource' type='string' description='Source de correspondance'/>
114
-        <variable name='alRouteMatchRegExp' type='string' description='Expression régulière'/>
115
-        <variable name='alRouteMatchRegxpRecv' type='string' description="Nom du destinataire de l'alerte (regxp)"/>
116
-
117
-		<variable name='alSubRoute' type='string' description="Nom de la rêgle maitresse" multi='True'/>
118
-        <variable name='alSubRouteMatchSource' type='string' description='Source de correspondance'/>
119
-        <variable name='alSubRouteMatchValue' type='string' description='Valeur attendue'/>
120
-        <variable name='alSubRouteMatchReceiver' type='string' description="Nom du destinataire de l'alerte"/>
88
+        <family name="grafana">
89
+                    <variable name='grafana_domain' type='string' description="Nom de Domaine ou IP pour accèder à l'interface Grafana" mandatory='True'>
90
+                        <value>localhost</value>
91
+                    </variable>
92
+                    <variable name='grafana_session_max_lifetime' type='string' description="Durée avant déconnexion de l'interface Grafana (en seconde)">
93
+                        <value>86400</value>
94
+                    </variable>
95
+                    <variable name='grafana_admin_passwd' type='string' description="Mot de passe admin pour la première connexion">
96
+                        <value>admin</value>
97
+                    </variable>
98
+                    <variable name='grafana_sign_up' type='string' description="Activer l'enregistrement automatique">
99
+                        <value>false</value>
100
+                    </variable>
101
+                    <variable name='grafana_auth_anonymous' type='string' description="Activer l'accès aux utilisateurs non enregistrés">
102
+                        <value>false</value>
103
+                    </variable>
104
+                </family>
105
+
106
+        <family name="alertes prometheus">
107
+            <variable name='alSMTPHost' type='string' description="Adresse du serveur SMTP pour l'envois des alertes"/>
108
+            <variable name='alSMTPPort' type='string' description="Port d'écoute du serveur SMTP pour l'envois des alertes"/>
109
+            <variable name='alFrom' type='string' description="Adresse d'origine des emails d'alerte"/>
110
+            <variable name='alSMTPTLS' type='oui/non' description="Utiliser STARTTLS">
111
+                <value>non</value>
112
+            </variable>
113
+            <variable name='alSMTPAuth' type='oui/non' description="Authentification requise sur le serveur SMTP ?">
114
+                <value>non</value>
115
+            </variable>
116
+            <variable name='alSMTPUser' type='string' description="Utilisateur SMTP"/>
117
+            <variable name='alSMTPPass' type='string' description="Mot de passe"/>
118
+
119
+
120
+            <variable name='alReceiver' type='string' description="Nom du destinataire" multi='True'/>
121
+            <variable name='alReceiverEmail' type='string' description="Adresse email du destinataire"/>
122
+
123
+            <variable name='alDefaultReceiver' type='string' description='Nom du destinataire par défaut'/>
124
+
125
+            <variable name='alRoute' type='string' description="Nom de la rêgle de distribution des alertes" multi="True"/>
126
+            <variable name='alRouteMatchSource' type='string' description='Source de correspondance'/>
127
+            <variable name='alRouteMatchValue' type='string' description='Valeur attendue'/>
128
+            <variable name='alRouteMatchReceiver' type='string' description="Nom du destinataire de l'alerte"/>
129
+
130
+            <variable name='alRouteRegxp' type='string' description="Rêgle de distribution des alertes" multi="True"/>
131
+            <variable name='alRouteMatchRegExpSource' type='string' description='Source de correspondance'/>
132
+            <variable name='alRouteMatchRegExp' type='string' description='Expression régulière'/>
133
+            <variable name='alRouteMatchRegxpRecv' type='string' description="Nom du destinataire de l'alerte (regxp)"/>
134
+
135
+            <variable name='alSubRoute' type='string' description="Nom de la rêgle maitresse" multi='True'/>
136
+            <variable name='alSubRouteMatchSource' type='string' description='Source de correspondance'/>
137
+            <variable name='alSubRouteMatchValue' type='string' description='Valeur attendue'/>
138
+            <variable name='alSubRouteMatchReceiver' type='string' description="Nom du destinataire de l'alerte"/>
121 139
     </family>
122 140
 
123 141
     <separators>
124
-		<separator name='activer_grafana'>Services complèmentairse</separator>
125
-		<separator name='prometheusJobName'>Configuration du serveur Prometheus</separator>
142
+        <separator name='activer_grafana'>Services complèmentairse</separator>
143
+        <separator name='prometheusJobName'>Configuration du serveur Prometheus</separator>
126 144
         <separator name='alSMTPHost'>Configuration SMTP pour l'envois des alertes</separator>
127 145
         <separator name='alReceiver'>Destinatires</separator>
128 146
         <separator name='alRoute'>Rêgles de distribution simples</separator>
@@ -155,20 +173,26 @@
155 173
             <slave>alSubRouteMatchReceiver</slave>
156 174
         </group>
157 175
 
158
-        <group master='prCli'>
159
-            <slave>prCliIP</slave>
160
-            <slave>prCliSonde</slave>
176
+        <group master='prTarg'>
177
+            <slave>prTargIP</slave>
178
+            <slave>prTargJob</slave>
179
+            <slave>prTargSonde</slave>
161 180
         </group>
162 181
 
163
-        <group master='prOpenCli'>
164
-            <slave>prOpenCliIP</slave>
165
-            <slave>prOpenCliPort</slave>
182
+        <group master='prOpenTarg'>
183
+            <slave>prOpenTargIP</slave>
184
+            <slave>prOpenTargPort</slave>
185
+            <slave>prOpenTargJob</slave>
166 186
         </group>
167 187
 
168
-        <check name='valid_enum' target='prCliSonde'>
188
+        <check name='valid_enum' target='prTargSonde'>
169 189
             <param>['Node Exporter','Port']</param>
170 190
         </check>
171 191
 
192
+        <check name='valid_enum' target='scrpScheme'>
193
+            <param>['http','https']</param>
194
+        </check>
195
+
172 196
         <check name='valid_enum' target='alRouteMatchSource'>
173 197
             <param>['','service','severity']</param>
174 198
         </check>
@@ -208,17 +232,17 @@
208 232
             <target type='service_accesslist'>alertmanager</target>
209 233
         </condition>
210 234
 
211
-        <condition name='disabled_if_in' source='ajout_client_prometheus'>
235
+        <condition name='disabled_if_in' source='addTargetPrometheus'>
212 236
             <param>non</param>
213
-            <target type='variable'>prCli</target>
214
-            <target type='variable'>prCliIP</target>
215
-            <target type='variable'>prCliSonde</target>
237
+            <target type='variable'>prTarg</target>
238
+            <target type='variable'>prTargIP</target>
239
+            <target type='variable'>prTargSonde</target>
216 240
         </condition>
217
-        <condition name='disabled_if_in' source='addPrOpenCli'>
241
+        <condition name='disabled_if_in' source='addPrOpenTarg'>
218 242
             <param>non</param>
219
-            <target type='variable'>prOpenCli</target>
220
-            <target type='variable'>prOpenCliIP</target>
221
-            <target type='variable'>prOpenCliPort</target>
243
+            <target type='variable'>prOpenTarg</target>
244
+            <target type='variable'>prOpenTargIP</target>
245
+            <target type='variable'>prOpenTargPort</target>
222 246
         </condition>
223 247
     </constraints>
224 248
     <help>

+ 21
- 8
tmpl/prometheus.yml View File

@@ -18,12 +18,12 @@ scrape_configs:
18 18
 %end if
19 19
 ]
20 20
 
21
+
22
+
21 23
   - job_name: '%%job_name_node'
22 24
     file_sd_configs:
23 25
       - files: [ "%%job_file_config/*.yml" ]
24
-%if %%is_empty('ajout_client_prometheus') or %%is_empty('addPrOpenCli')
25
-# Nothing to configure
26
-%else
26
+%if %%getVar('addTargetPrometheus','non') == 'oui'
27 27
     static_configs:
28 28
         - targets: [ "%%adresse_ip_eth0:9100"%slurp
29 29
     %if %%getVar('ajout_client_prometheus','non') == 'oui'
@@ -33,14 +33,27 @@ scrape_configs:
33 33
             %end if
34 34
         %end for
35 35
     %end if
36
-    %if %%getVar('addPrOpenCli','non') == 'oui'
37
-        %for %%cliOpen in %%getVar('prOpenCli',[])
38
-, '%%cliOpen.prOpenCliIP:%%cliOpen.prOpenCliPort'%slurp
39
-        %end for
40
-    %end if
41 36
 ]
42 37
 %end if
43 38
 
39
+%for %%job in %%getVar['promJobs',[]]
40
+  - job_name: '%%job'
41
+  %if %%job.honorLabels == 'oui'
42
+    honor_labels: true
43
+  %else
44
+    honor_labels; false
45
+  %end if
46
+    scrape_interval: %%job.scrpInterval
47
+    scrape_timeout: %%job.scrpTimeout
48
+    scheme: %%job.scrpScheme
49
+  %for %%target in %%getVar('prOpenTarg',[])
50
+    static_configs:
51
+    %if %%target.prOpenTargJob == %%job
52
+      - targets: [ "%%target.prOpenTargIP:%%target.prOpenTargPort" ]
53
+    %end if
54
+  %end for
55
+%end for
56
+
44 57
 %if %%getVar('activerAlertmanager','non') == 'oui'
45 58
 alerting:
46 59
   alertmanagers: