diff --git a/dicos/70_prometheus.xml b/dicos/70_prometheus.xml index 384aa48..edc0de9 100644 --- a/dicos/70_prometheus.xml +++ b/dicos/70_prometheus.xml @@ -36,10 +36,6 @@ 10s - - non - - node @@ -47,6 +43,25 @@ /etc/prometheus/nodes + + + non + + + + + + Node Exporter + + + + non + + + + + + localhost @@ -66,6 +81,20 @@ + + prCliIP + prCliSonde + + + + prOpenCliIP + prOpenCliPort + + + + ['Node Exporter','Port'] + + non prometheus @@ -79,8 +108,16 @@ non - nouveau_node_exporter + prCli + prCliIP + prCliSonde + + non + prOpenCli + prOpenCliIP + prOpenCliPort + diff --git a/init/prometheus.service b/init/prometheus.service deleted file mode 100644 index b7f3eee..0000000 --- a/init/prometheus.service +++ /dev/null @@ -1,12 +0,0 @@ -[Unit] -Description=Prometheus Server -Documentation=https://prometheus.io/docs/introduction/overview/ -After=network-online.target - -[Service] -User=root -Restart=on-failure -ExecStart=/usr/bin/prometheus --config.file=/etc/prometheus/prometheus.yml - -[Install] -WantedBy=multi-user.target diff --git a/postservice/88_grafana b/postservice/88_grafana new file mode 100755 index 0000000..3459bcd --- /dev/null +++ b/postservice/88_grafana @@ -0,0 +1,91 @@ +#!/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 192.168.30.57) +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} diff --git a/tmpl/prometheus.yml b/tmpl/prometheus.yml index a2034bc..59363ed 100644 --- a/tmpl/prometheus.yml +++ b/tmpl/prometheus.yml @@ -8,27 +8,38 @@ rule_files: - "/etc/prometheus/rules.d/*.yml" scrape_configs: - - job_name: %%prometheusJobName + - job_name: %%prometheusJobName honor_labels: true static_configs: - - targets: ['%%nom_domaine_machine:9090'] + - targets: ['%%nom_domaine_machine:9090'%slurp %if %%getVar('activerSndNodeExpoter','non') == 'oui' - - targets: ['%%nom_domaine_machine:9100'] +, '%%nom_domaine_machine:9100'%slurp %end if +] - job_name: '%%job_name_node' file_sd_configs: - files: [ "%%job_file_config/*.yml" ] +%if %%is_empty('ajout_client_prometheus') or %%is_empty('addPrOpenCli') +# Nothing to configure +%else static_configs: -%if %%getVar('ajout_client_prometheus','non') == 'oui' - %if not %%is_empty(%%nouveau_node_exporter) - %for %%client_prometheus in %%nouveau_node_exporter - - targets: ['%%client_prometheus:9100'] - %end for - %end if + - targets: [ "%%adresse_ip_eth0:9100"%slurp + %if %%getVar('ajout_client_prometheus','non') == 'oui' + %for %%cliPr in %%getVar('prCli',[]) + %if %%cliPr.prCliSonde == 'Node Exporter' +, '%%cliPr.prCliIP:9100'%slurp + %end if + %end for + %end if + %if %%getVar('addPrOpenCli','non') == 'oui' + %for %%cliOpen in %%getVar('prOpenCli',[]) +, '%%cliOpen.prOpenCliIP:%%cliOpen.prOpenCliPort'%slurp + %end for + %end if +] %end if - #alerting: # alertmanagers: # - scheme: https