Compare commits

...

18 Commits

Author SHA1 Message Date
Laurent Gourvenec 45c97c765b augmentation du seuil d'alerte température CPU 2024-05-30 11:44:13 +02:00
vfebvre 43e34f8de8 modification configuration d'alertmanager 2020-12-17 10:21:49 +01:00
vincent 16d7bfa7f2 ajout alerte température CPU 2019-06-07 15:22:30 +02:00
wpetit d9b253b63d Use proxy to scrape Prometheus datasource 2019-04-15 14:18:40 +02:00
wpetit a5fb3de2c0 Fix Grafana install instructions 2019-04-15 14:17:42 +02:00
wpetit 7023209d9b Déploiement d'un dashboard templatisé par défaut 2019-03-08 16:38:22 +01:00
wpetit 31bf813036 Déploiement d'un dashboard Grafana par défaut pour la machine locale 2019-03-08 16:00:59 +01:00
wpetit fc2cfd9102 Correction chemin répertoire de provisioning 2019-03-08 15:40:09 +01:00
wpetit 1a2f7172d9 Ajout d'un fichier de provisioning des datasources par défaut 2019-03-08 15:20:56 +01:00
wpetit 628fdafdea Ajout d'un répertoire de définition des dashboards 2019-03-08 15:02:16 +01:00
wpetit b4fde311a5 Mise à jour instructions d'installation 2019-03-08 13:38:10 +01:00
wpetit e431a4207e Mise à jour version EOLE 2019-03-08 13:37:44 +01:00
wpetit 71787a9cf6 Renommage alertmanager en prometheus-alertmanager 2019-03-08 13:35:20 +01:00
vincent a681d455fe possibilité d'ajouter des clients avec un nom de domaine 2018-07-10 09:59:29 +02:00
vincent 0a3658fa57 ajout chemin personnalisé pour les job 2018-06-26 15:05:24 +02:00
vincent c25b004d3b réglage niveau alert du filesystème 2018-06-26 14:06:37 +02:00
Philippe Caseiro f9cb3d35b1 Adding support for mail sending from smtp gateway 2018-06-26 13:20:08 +02:00
vincent b4ff9a35fd modification gestion smtpTLS et correctif chemin invalide 2018-06-26 12:06:05 +02:00
11 changed files with 19631 additions and 166 deletions

View File

@ -4,8 +4,8 @@
SOURCE=eole-prometheus SOURCE=eole-prometheus
VERSION=0.1 VERSION=0.1
EOLE_VERSION=2.6 EOLE_VERSION=2.7
EOLE_RELEASE=2.6.2 EOLE_RELEASE=2.7.0
PKGAPPS=non PKGAPPS=non
################################ ################################

View File

@ -1,41 +1,33 @@
## eole-prometheus # eole-prometheus
Eolisation de la solution de surveillance Prometheus. Eolisation de la solution de surveillance Prometheus.
Grafana est pris en charge dans l'eolisation et peut ou non être activé. Grafana est pris en charge dans l'eolisation et peut ou non être activé.
L'exporter système (node-exporter) est dans la configuration par défaut (Prométheus se surveille lui même).
### eole-prometheus : L'exporter système (node-exporter) est dans la configuration par défaut (Prometheus se surveille lui même).
### Installation
1. gen_config #### Installer `eole-prometheus`
1. Ajouter le dépôt officiel de [Grafana](http://docs.grafana.org/installation/debian/#apt-repository). Dans l'interface `GenConfig`
```
Mode expert > Dépot tiers > Ajouter un dépot
Dépôt officiel Grafana
Libellé du dépot = Dépôt officiel Grafana
Déclaration du dépôt = deb https://packages.grafana.com/oss/deb stable main
Méthode de récupération de la clé = URL de la clé
URL de la clé = https://packages.grafana.com/gpg.key
```
2. Ajouter le dépôt Cadoles. Dans l'interface `GenConfig`
```
Mode expert > Dépot tiers > Ajouter un dépot
Cadoles pour environnement de Dev
Libellé du dépot = Cadoles
Déclaration du dépôt = deb https://vulcain.cadoles.com 2.7.0-dev main
Méthode de récupération de la clé = URL de la clé
URL de la clé = https://vulcain.cadoles.com/cadoles.gpg
``` ```
Mode expert > Dépot tiers > Ajouter un dépot
Cadoles pour environnement de Qualification
Libellé du dépot = Cadoles
Déclaration du dépôt = deb https://vulcain.cadoles.com 2.6.2-staging main
Méthode de récupération de la clé = URL de la clé
URL de la clé = https://vulcain.cadoles.com/cadoles.gpg
```
* Pour ajouter une sonde sur eole :
1. gen_config
```
Mode expert > Dépot tiers > Ajouter un dépot
Cadoles pour environnement de Qualification
Libellé du dépot = Cadoles
Déclaration du dépôt = deb https://vulcain.cadoles.com xenial-staging main
Méthode de récupération de la clé = URL de la clé
URL de la clé = https://vulcain.cadoles.com/cadoles.gpg
```
* Pour ajouter une sonde sur ubuntu xenial:
```
echo "deb https://vulcain.cadoles.com xenial-staging main" > /etc/apt/sources.list.d/cadoles.list
wget -O - https://vulcain.cadoles.com/cadoles.gpg|apt-key add -
```
Il faut ouvrir les ports en fonction des exporters. Tous les exporters n'utilisent pas le même port. Il faut ouvrir les ports en fonction des exporters. Tous les exporters n'utilisent pas le même port.
@ -44,4 +36,3 @@ Le paquet eole-prometheus ouvre les ports sur le serveur où Prometheus sera ins
* 9090 pour le serveur prometheus * 9090 pour le serveur prometheus
* 9100 pour la sonde node-exporter * 9100 pour la sonde node-exporter
* 3000 pour le serveur Grafana * 3000 pour le serveur Grafana

View File

@ -3,17 +3,20 @@
<files> <files>
<file filelist='prometheus' name='/etc/default/prometheus' source='prometheus.defaults' mkdir='True' rm='True'/> <file filelist='prometheus' name='/etc/default/prometheus' source='prometheus.defaults' mkdir='True' rm='True'/>
<file filelist='prometheus' name='/etc/prometheus/prometheus.yml' mkdir='True' rm='True'/> <file filelist='prometheus' name='/etc/prometheus/prometheus.yml' mkdir='True' rm='True'/>
<file filelist='alertmanager' name='/etc/prometheus/alertmanager.yml' mkdir='True' rm='True'/> <file filelist='prometheus-alertmanager' name='/etc/prometheus/alertmanager.yml' mkdir='True' rm='True'/>
<file filelist='alertmanager' name='/etc/prometheus/rules.d/alert-rules.yml' mkdir='True' rm='True'/> <file filelist='prometheus-alertmanager' name='/etc/prometheus/rules.d/alert-rules.yml' mkdir='True' rm='True'/>
<file filelist='alertmanager' name='/etc/prometheus/rules.d/predict-rules.yml' mkdir='True' rm='True'/> <file filelist='prometheus-alertmanager' name='/etc/prometheus/rules.d/predict-rules.yml' mkdir='True' rm='True'/>
<file filelist='grafana' name='/etc/grafana/grafana.ini' mkdir='True' rm='True'/> <file filelist='grafana' name='/etc/grafana/grafana.ini' mkdir='True' rm='True'/>
<file filelist='grafana' name='/etc/grafana/provisioning/dashboards/eole.yml' source='grafana-dashboards.yml' mkdir='True' rm='True'/>
<file filelist='grafana' name='/etc/grafana/provisioning/datasources/eole.yml' source='grafana-datasources.yml' mkdir='True' rm='True'/>
<file filelist='grafana' name='/var/lib/grafana/dashboards/eole.json' source='grafana-node-dashboard.json' mkdir='True' rm='True'/>
<service>prometheus</service> <service>prometheus</service>
<service>alertmanager</service> <service>prometheus-alertmanager</service>
<service>grafana-server</service> <service>grafana-server</service>
<service_access service='prometheus'> <service_access service='prometheus'>
<port service_accesslist="prometheus">9090</port> <port service_accesslist="prometheus">9090</port>
<port service_accesslist="alertmanager">9093</port> <port service_accesslist="prometheus-alertmanager">9093</port>
</service_access> </service_access>
<service_access service='grafana-server'> <service_access service='grafana-server'>
<port service_accesslist="grafana">3000</port> <port service_accesslist="grafana">3000</port>
@ -59,7 +62,7 @@
<!-- Job standard --> <!-- Job standard -->
<variable name='prTarg' type='string' description='Nom de la cible prometheus' multi='True'/> <variable name='prTarg' type='string' description='Nom de la cible prometheus' multi='True'/>
<variable name='prTargIP' type='ip' description="Adresse IP de la cible prometheus"/> <variable name='prTargIP' type='string' description="Adresse IP ou nom de domaine de la cible prometheus"/>
<variable name='prTargSonde' type='string' description="Sonde a utiliser pour ce client"> <variable name='prTargSonde' type='string' description="Sonde a utiliser pour ce client">
<value>Node Exporter</value> <value>Node Exporter</value>
</variable> </variable>
@ -78,6 +81,9 @@
<variable name='scrpScheme' type='string' description="Protocole à utiliser pour l'interrogation de la sonde"> <variable name='scrpScheme' type='string' description="Protocole à utiliser pour l'interrogation de la sonde">
<value>http</value> <value>http</value>
</variable> </variable>
<variable name='scrpMetricPath' type='string' description="Chemin d'accès de la ressource">
<value>/metrics</value>
</variable>
<variable name='addPrOpenTarg' type='oui/non' description="Ajouter des cibles statiques pour les jobs personnalisé"> <variable name='addPrOpenTarg' type='oui/non' description="Ajouter des cibles statiques pour les jobs personnalisé">
<value>non</value> <value>non</value>
@ -85,27 +91,28 @@
<!-- Job libre --> <!-- Job libre -->
<variable name='prOpenTarg' type='string' description='Nom de la cible personnalisé prometheus' multi='True'/> <variable name='prOpenTarg' type='string' description='Nom de la cible personnalisé prometheus' multi='True'/>
<variable name='prOpenTargJob' type='string' description='Nom du job de rattachement de la cible'/> <variable name='prOpenTargJob' type='string' description='Nom du job de rattachement de la cible'/>
<variable name='prOpenTargIP' type='ip' description="Adresse IP de la cible"/> <variable name='prOpenTargIP' type='string' description="Adresse IP ou nom de domaine de la cible"/>
<variable name='prOpenTargPort' type='number' description="Port d'écoute de la sonde"/> <variable name='prOpenTargPort' type='number' description="Port d'écoute de la sonde"/>
</family> </family>
<family name="grafana"> <family name="grafana">
<variable name='grafana_domain' type='string' description="Nom de Domaine ou IP pour accèder à l'interface Grafana" mandatory='True'> <variable name='grafana_domain' type='string' description="Nom de Domaine ou IP pour accèder à l'interface Grafana" mandatory='True'>
<value>localhost</value> <value>localhost</value>
</variable> </variable>
<variable name='grafana_session_max_lifetime' type='string' description="Durée avant déconnexion de l'interface Grafana (en seconde)"> <variable name='grafana_session_max_lifetime' type='string' description="Durée avant déconnexion de l'interface Grafana (en seconde)">
<value>86400</value> <value>86400</value>
</variable> </variable>
<variable name='grafana_admin_passwd' type='string' description="Mot de passe admin pour la première connexion"> <variable name='grafana_admin_passwd' type='string' description="Mot de passe admin pour la première connexion">
<value>admin</value> <value>admin</value>
</variable> </variable>
<variable name='grafana_sign_up' type='string' description="Activer l'enregistrement automatique"> <variable name='grafana_sign_up' type='string' description="Activer l'enregistrement automatique">
<value>false</value> <value>false</value>
</variable> </variable>
<variable name='grafana_auth_anonymous' type='string' description="Activer l'accès aux utilisateurs non enregistrés"> <variable name='grafana_auth_anonymous' type='string' description="Activer l'accès aux utilisateurs non enregistrés">
<value>false</value> <value>false</value>
</variable> </variable>
</family> <variable name='grafanaRootURL' type='string' description='Url publique de grafana (avec http:// ou https://)' mode='expert'/>
</family>
<family name="alertes prometheus"> <family name="alertes prometheus">
<variable name='alSMTPUseSys' type='oui/non' description="Utiliser la passerelle SMTP du système ?"> <variable name='alSMTPUseSys' type='oui/non' description="Utiliser la passerelle SMTP du système ?">
@ -167,7 +174,8 @@
<slave>scrpInterval</slave> <slave>scrpInterval</slave>
<slave>scrpTimeout</slave> <slave>scrpTimeout</slave>
<slave>honorLabels</slave> <slave>honorLabels</slave>
<slave>scrpScheme</slave> <slave>scrpScheme</slave>
<slave>scrpMetricPath</slave>
</group> </group>
<group master='alRoute'> <group master='alRoute'>
@ -252,8 +260,8 @@
<condition name='disabled_if_in' source='activerAlertmanager'> <condition name='disabled_if_in' source='activerAlertmanager'>
<param>non</param> <param>non</param>
<target type='family'>alertes prometheus</target> <target type='family'>alertes prometheus</target>
<target type='filelist'>alertmanager</target> <target type='filelist'>prometheus-alertmanager</target>
<target type='service_accesslist'>alertmanager</target> <target type='service_accesslist'>prometheus-alertmanager</target>
</condition> </condition>
<condition name='disabled_if_in' source='addTargetPrometheus'> <condition name='disabled_if_in' source='addTargetPrometheus'>

View File

@ -1,91 +0,0 @@
#!/usr/bin/env bash
function importDataSource()
{
local grURL="${1}/api/datasources" # Grafana API URL
local dsName=${2} # Datasource Name
local dsURL="${3}" # Datasource URL
local dsType="prometheus" # Datasource type
cmd="curl"
data=$(cat <<__EOF__
{"name":"${dsName}","type":"${dsType}","url":"${dsURL}","access":"direct"}
__EOF__
)
echo -ne "\tCreating datasource for Prometheus "
res=$(${cmd} "${grURL}" -H "Content-Type: application-json" --data-binary "${data}" 2>&1 )
excode=${?}
case $res in
*"already exists"*)
echo " ... [Exists]"
;;
*"Datasource added"*)
echo " ... [OK]"
;;
*)
echo " ... Ooops ${res}"
;;
esac
}
function importDashboardFromMarket()
{
local grURL="${1}/api/dashboards/import" # API URL to create new Dashboard
local dsName="${2}" # Datasource name (to link dashboard to data)
local dhID="${3}" # Dashboard ID in the market
local dhRev="${4}" # Dashboard Revision to download
local tmpFile=$(mktemp)
local dhFile=$(mktemp)
# URL To download the json file for dashboard
local pubDashBoardURL="https://grafana.com/api/dashboards/${dhID}/revisions/${dhRev}/download"
local cmd="curl"
local dh=$(${cmd} --silent ${pubDashBoardURL} 2>&1)
cat <<_EOF_ > ${tmpFile}
{
"inputs": [ { "name":"DS_LOCALHOST", "type":"datasource", "pluginId":"prometheus", "value":"${dsName}" } ],
"dashboard": { "title": "Surveillance Système", ${dh:1:-1} },
"folderId": 0,
"overwrite": true
}
_EOF_
res=$(${cmd} "${grURL}" -H "Content-Type: application-json" --data-binary "@${tmpFile}" 2>&1 )
excode=${?}
case $res in
*"\"imported\":true"*)
echo " ... [Overwrited]"
;;
*"Datasource added"*)
echo " ... [OK]"
;;
*)
echo " ... Ooops ${res}"
;;
esac
# rm -rf ${tmpFile}
}
grafanaHost=$(CreoleGet srvGrafanaIP 127.0.0.1)
grafanaPort=$(CreoleGet srvGrafanaPort 3000)
grafanaUser="admin"
grafanaPasswd=$(CreoleGet grafana_admin_passwd admin)
grafanaURL="http://${grafanaUser}:${grafanaPasswd}@${grafanaHost}:${grafanaPort}"
datasource_name=$(CreoleGet promDataSource "prometheus")
promHost=$(CreoleGet adresse_ip_eth0)
promPort='9090'
datasourceURL="http://${promHost}:${promPort}"
importDataSource ${grafanaURL} ${datasource_name} ${datasourceURL}
echo
echo -ne "\tImporting Node Exporter Full Dashboard "
importDashboardFromMarket ${grafanaURL} ${datasource_name} 1860 11
rm -rf ${dashBoardFile}

View File

@ -33,9 +33,18 @@ groups:
# Heavy "/" use # Heavy "/" use
- alert: filesystem_threshold_exceeded - alert: filesystem_threshold_exceeded
expr: node_filesystem_avail{job="%%{job_name_node}",mountpoint="/"} / node_filesystem_size{job="%%{job_name_node}"} expr: node_filesystem_avail{job="%%{job_name_node}",mountpoint="/"} / node_filesystem_size{job="%%{job_name_node}"}
* 100 < 90 * 100 < 20
annotations: annotations:
description: This device's filesystem usage has exceeded the threshold with description: This device's filesystem usage has exceeded the threshold with
a value of {{ $value }}. a value of {{ $value }}.
summary: Instance {{ $labels.instance }} filesystem usage is dangerously high summary: Instance {{ $labels.instance }} filesystem usage is dangerously high
# Heavy CPU temperature
- alert: cpu_temp_threshold_exceeded
expr: avg(node_hwmon_temp_celsius{job="node"}) BY (instance)
> 70
annotations:
description: This device's cpu temperature has exceeded the threshold with a value
of {{ $value }}.
summary: Instance {{ $labels.instance }} CPU temperature is dangerously high

View File

@ -4,11 +4,11 @@ global:
%if %%tls_smtp == "non" %if %%tls_smtp == "non"
smtp_smarthost: '%%exim_relay_smtp:25' smtp_smarthost: '%%exim_relay_smtp:25'
%elif %%tls_smtp == "port 25" %elif %%tls_smtp == "port 25"
smtp_smarthost: '%%exim_relay_smtp:25' smtp_smarthost: '%%exim_relay_smtp:25'
smtp_require_tls: true smtp_require_tls: true
%else %else
smtp_smarthost: '%%exim_relay_smtp:465' smtp_smarthost: '%%exim_relay_smtp:465'
smtp_require_tls: true smtp_require_tls: true
%end if %end if
smtp_from: '%%system_mail_from' smtp_from: '%%system_mail_from'
%else %else
@ -81,6 +81,7 @@ route:
- match: - match:
%%{sroute.alSubRouteMatchSource}: %%alSubRouteMatchValue %%{sroute.alSubRouteMatchSource}: %%alSubRouteMatchValue
receiver: %%alSubRouteMatchReceiver receiver: %%alSubRouteMatchReceiver
continue: true
%end if %end if
%end for %end for
%end if %end if
@ -89,6 +90,7 @@ route:
- match: - match:
%%{rt.alRouteMatchSource}: %%{rt.alRouteMatchValue} %%{rt.alRouteMatchSource}: %%{rt.alRouteMatchValue}
receiver: %%rt.alRouteMatchReceiver receiver: %%rt.alRouteMatchReceiver
continue: true
%if not %%is_empty('alSubRoute') %if not %%is_empty('alSubRoute')
routes: routes:
@ -97,6 +99,7 @@ route:
- match: - match:
%%{sroute.alSubRouteMatchSource}: %%{sroute.alSubRouteMatchValue} %%{sroute.alSubRouteMatchSource}: %%{sroute.alSubRouteMatchValue}
receiver: %%sroute.alSubRouteMatchReceiver receiver: %%sroute.alSubRouteMatchReceiver
continue: true
%end if %end if
%end for %end for
%end if %end if

View File

@ -0,0 +1,10 @@
# # config file version
apiVersion: 1
providers:
- name: 'eole'
orgId: 1
folder: ''
type: file
options:
path: /var/lib/grafana/dashboards

View File

@ -0,0 +1,11 @@
apiVersion: 1
datasources:
- name: Prometheus
type: prometheus
access: proxy
orgId: 1
url: http://%%adresse_ip_eth0:9090
isDefault: true
version: 1
editable: false

File diff suppressed because it is too large Load Diff

View File

@ -21,7 +21,7 @@
;plugins = /var/lib/grafana/plugins ;plugins = /var/lib/grafana/plugins
# folder that contains provisioning config files that grafana will apply on startup and while running. # folder that contains provisioning config files that grafana will apply on startup and while running.
; provisioning = conf/provisioning provisioning = /etc/grafana/provisioning
#################################### Server #################################### #################################### Server ####################################
[server] [server]
@ -40,11 +40,13 @@ domain = %%grafana_domain
# Redirect to correct domain if host header does not match domain # Redirect to correct domain if host header does not match domain
# Prevents DNS rebinding attacks # Prevents DNS rebinding attacks
;enforce_domain = false enforce_domain = true
# The full public facing url you use in browser, used for redirects and emails # The full public facing url you use in browser, used for redirects and emails
# If you use reverse proxy and sub path specify full url (with sub path) # If you use reverse proxy and sub path specify full url (with sub path)
;root_url = http://localhost:3000 %if %%is_empty('grafanaRootURL')
root_url = %%grafanaRootURL
%end if
# Log web requests # Log web requests
;router_logging = false ;router_logging = false
@ -299,18 +301,20 @@ enabled = %%grafana_auth_anonymous
#################################### SMTP / Emailing ########################## #################################### SMTP / Emailing ##########################
[smtp] [smtp]
;enabled = false %if %%getVar('activer_exim_relay_smtp','non') == 'oui'
;host = localhost:25 enabled = true
host = %%exim_relay_smtp:25
;user = ;user =
# If the password contains # or ; you have to wrap it with trippel quotes. Ex """#password;""" # If the password contains # or ; you have to wrap it with trippel quotes. Ex """#password;"""
;password = ;password =
;cert_file = ;cert_file =
;key_file = ;key_file =
;skip_verify = false skip_verify = true
;from_address = admin@grafana.localhost from_address = %%system_mail_from
;from_name = Grafana from_name = Grafana
# EHLO identity in SMTP dialog (defaults to instance_name) # EHLO identity in SMTP dialog (defaults to instance_name)
;ehlo_identity = dashboard.example.com ;ehlo_identity = dashboard.example.com
%end if
[emails] [emails]
;welcome_email_on_sign_up = false ;welcome_email_on_sign_up = false

View File

@ -22,7 +22,7 @@ scrape_configs:
- job_name: '%%job_name_node' - job_name: '%%job_name_node'
file_sd_configs: file_sd_configs:
- files: [ "%%job_file_config/*.yml" ] # - files: [ "%%job_file_config/*.yml" ]
%if %%getVar('addTargetPrometheus','non') == 'oui' %if %%getVar('addTargetPrometheus','non') == 'oui'
static_configs: static_configs:
- targets: [ "%%adresse_ip_eth0:9100"%slurp - targets: [ "%%adresse_ip_eth0:9100"%slurp
@ -44,6 +44,7 @@ scrape_configs:
scrape_interval: %%{job.scrpInterval}s scrape_interval: %%{job.scrpInterval}s
scrape_timeout: %%{job.scrpTimeout}s scrape_timeout: %%{job.scrpTimeout}s
scheme: %%job.scrpScheme scheme: %%job.scrpScheme
metrics_path: %%job.scrpMetricPath
%set first = True %set first = True
static_configs: static_configs:
- targets: [ %slurp - targets: [ %slurp