diff --git a/app/create_db.py b/app/create_db.py
index 1ab14e59..b819a9a0 100644
--- a/app/create_db.py
+++ b/app/create_db.py
@@ -859,7 +859,7 @@ def update_db_v_5_3_2_2(**kwargs):
def update_ver():
- query = Version.update(version='5.3.4.0')
+ query = Version.update(version='5.3.5.0')
try:
query.execute()
except:
diff --git a/app/funct.py b/app/funct.py
index 985d7f2f..8c7f5a32 100644
--- a/app/funct.py
+++ b/app/funct.py
@@ -432,6 +432,8 @@ def get_config(server_ip, cfg, **kwargs):
config_path = "/etc/keepalived/keepalived.conf"
elif kwargs.get("nginx"):
config_path = sql.get_setting('nginx_config_path')
+ elif kwargs.get("waf"):
+ config_path = sql.get_setting('haproxy_dir') + '/waf/rules/' + kwargs.get("waf_rule_file")
else:
config_path = sql.get_setting('haproxy_config_path')
@@ -707,7 +709,7 @@ def install_haproxy(server_ip, **kwargs):
os.system("cp scripts/%s ." % script)
if haproxy_ver is None:
- haproxy_ver = '2.3.0-1'
+ haproxy_ver = '2.4.9-1'
if proxy is not None and proxy != '' and proxy != 'None':
proxy_serv = proxy
diff --git a/app/options.py b/app/options.py
index b36a5b23..19b10961 100644
--- a/app/options.py
+++ b/app/options.py
@@ -669,6 +669,7 @@ if act == "overviewwaf":
ioloop.run_until_complete(get_runner_overviewWaf())
ioloop.close()
+
if act == "overviewServers":
import asyncio
@@ -1372,6 +1373,8 @@ if form.getvalue('install_grafana'):
if form.getvalue('haproxy_exp_install'):
serv = form.getvalue('haproxy_exp_install')
+ ver = form.getvalue('exporter_v')
+ ext_prom = form.getvalue('ext_prom')
script = "install_haproxy_exporter.sh"
stats_port = sql.get_setting('stats_port')
server_state_file = sql.get_setting('server_state_file')
@@ -1398,7 +1401,7 @@ if form.getvalue('haproxy_exp_install'):
commands = ["chmod +x " + script + " && ./" + script + " PROXY=" + proxy_serv +
" STAT_PORT=" + str(stats_port) + " STAT_FILE=" + server_state_file +
- " SSH_PORT=" + ssh_port + " STAT_PAGE=" + stat_page +
+ " SSH_PORT=" + ssh_port + " STAT_PAGE=" + stat_page + " VER=" + ver + " EXP_PROM=" + ext_prom +
" STATS_USER=" + stats_user + " STATS_PASS='" + stats_password + "' HOST=" + serv +
" USER=" + ssh_user_name + " PASS='" + ssh_user_password + "' KEY=" + ssh_key_name]
@@ -1411,6 +1414,7 @@ if form.getvalue('haproxy_exp_install'):
if form.getvalue('nginx_exp_install'):
serv = form.getvalue('nginx_exp_install')
ver = form.getvalue('exporter_v')
+ ext_prom = form.getvalue('ext_prom')
script = "install_nginx_exporter.sh"
stats_user = sql.get_setting('nginx_stats_user')
stats_password = sql.get_setting('nginx_stats_password')
@@ -1436,8 +1440,8 @@ if form.getvalue('nginx_exp_install'):
commands = ["chmod +x " + script + " && ./" + script + " PROXY=" + proxy_serv +
" STAT_PORT=" + str(stats_port) + " SSH_PORT=" + ssh_port + " STAT_PAGE=" + stats_page +
- " STATS_USER=" + stats_user + " STATS_PASS='" + stats_password + "' HOST=" + serv +
- " USER=" + ssh_user_name + " PASS='" + ssh_user_password + "' KEY=" + ssh_key_name]
+ " STATS_USER=" + stats_user + " STATS_PASS='" + stats_password + "' HOST=" + serv + " VER=" + ver +
+ " EXP_PROM=" + ext_prom + " USER=" + ssh_user_name + " PASS='" + ssh_user_password + "' KEY=" + ssh_key_name]
output, error = funct.subprocess_execute(commands[0])
@@ -1447,6 +1451,8 @@ if form.getvalue('nginx_exp_install'):
if form.getvalue('node_exp_install'):
serv = form.getvalue('node_exp_install')
+ ver = form.getvalue('exporter_v')
+ ext_prom = form.getvalue('ext_prom')
script = "install_node_exporter.sh"
proxy = sql.get_setting('proxy')
ssh_port = 22
@@ -1466,8 +1472,8 @@ if form.getvalue('node_exp_install'):
else:
proxy_serv = ''
- commands = ["chmod +x " + script + " && ./" + script + " PROXY=" + proxy_serv + " SSH_PORT=" + ssh_port +
- " HOST=" + serv + " USER=" + ssh_user_name + " PASS='" + ssh_user_password + "' KEY=" + ssh_key_name]
+ commands = ["chmod +x " + script + " && ./" + script + " PROXY=" + proxy_serv + " SSH_PORT=" + ssh_port + " VER=" + ver +
+ " EXP_PROM=" + ext_prom + " HOST=" + serv + " USER=" + ssh_user_name + " PASS='" + ssh_user_password + "' KEY=" + ssh_key_name]
output, error = funct.subprocess_execute(commands[0])
@@ -1742,7 +1748,7 @@ if form.getvalue('get_nginx_v'):
print(funct.ssh_command(serv, cmd))
if form.getvalue('get_exporter_v'):
- print(funct.check_service(serv, form.getvalue('get_exporter_v')))
+ print(funct.get_service_version(serv, form.getvalue('get_exporter_v')))
if form.getvalue('bwlists'):
list_path = os.path.dirname(os.getcwd()) + "/" + sql.get_setting('lists_path') + "/" + form.getvalue('group') + "/" + form.getvalue('color') + "/" + form.getvalue('bwlists')
diff --git a/app/scripts/ansible/roles/haproxy_exporter.yml b/app/scripts/ansible/roles/haproxy_exporter.yml
index 03b8e0a1..a88c502f 100644
--- a/app/scripts/ansible/roles/haproxy_exporter.yml
+++ b/app/scripts/ansible/roles/haproxy_exporter.yml
@@ -34,6 +34,6 @@
roles:
- - role: bdellegrazie.haproxy_exporter
+ - role: haproxy_exporter
vars:
haproxy_exporter_options: ['--haproxy.scrape-uri=http://{{STATS_USER}}:{{STATS_PASS}}@{{variable_host}}:{{STAT_PORT}}/{{STAT_PAGE}};csv']
diff --git a/app/scripts/ansible/roles/haproxy_exporter/defaults/main.yml b/app/scripts/ansible/roles/haproxy_exporter/defaults/main.yml
new file mode 100644
index 00000000..7be1481a
--- /dev/null
+++ b/app/scripts/ansible/roles/haproxy_exporter/defaults/main.yml
@@ -0,0 +1,27 @@
+---
+haproxy_exporter_user: haproxy_exporter
+haproxy_exporter_user_manage: true
+haproxy_exporter_group: "{{ haproxy_exporter_user }}"
+haproxy_exporter_group_manage: true
+
+haproxy_exporter_version: "0.10.0"
+haproxy_exporter_platform_suffix: "linux-amd64"
+
+haproxy_exporter_options:
+ - '--haproxy.scrape-uri=http://admin:admin@localhost:9101/haproxy?stats;csv'
+
+haproxy_exporter_signature: "haproxy_exporter-{{ haproxy_exporter_version }}.{{ haproxy_exporter_platform_suffix }}"
+haproxy_exporter_dist_dir: "{{ prometheus_exporter_dist_dir }}/{{ haproxy_exporter_signature }}"
+haproxy_exporter_tarball_url: "https://github.com/prometheus/haproxy_exporter/releases/download/v{{ haproxy_exporter_version }}/{{ haproxy_exporter_signature }}.tar.gz"
+haproxy_exporter_program: "{{ prometheus_exporter_dir }}/haproxy_exporter"
+haproxy_exporter_home: "/var/lib/haproxy_exporter"
+haproxy_exporter_home_manage: true
+
+haproxy_exporter_config_file: /etc/default/haproxy_exporter
+haproxy_exporter_pid_path: "/var/run"
+haproxy_exporter_log_path: "/var/log/haproxy_exporter"
+
+haproxy_exporter_service_manage: true
+haproxy_exporter_service_enable: true
+haproxy_exporter_service_state: started
+haproxy_exporter_service_notify: true
diff --git a/app/scripts/ansible/roles/haproxy_exporter/handlers/main.yml b/app/scripts/ansible/roles/haproxy_exporter/handlers/main.yml
new file mode 100644
index 00000000..d710ad1b
--- /dev/null
+++ b/app/scripts/ansible/roles/haproxy_exporter/handlers/main.yml
@@ -0,0 +1,11 @@
+---
+- name: restart haproxy_exporter
+ become: true
+ become_user: root
+ service:
+ name: haproxy_exporter
+ state: "{{ (haproxy_exporter_service_state != 'stopped') | ternary('restarted', 'stopped') }}"
+ use: "{{ prometheus_exporter_service_mgr }}"
+ when: haproxy_exporter_service_notify and (
+ _haproxy_exporter_service_state is not defined or
+ not ( _haproxy_exporter_service_state is changed ))
diff --git a/app/scripts/ansible/roles/haproxy_exporter/meta/main.yml b/app/scripts/ansible/roles/haproxy_exporter/meta/main.yml
new file mode 100644
index 00000000..3eeb94e2
--- /dev/null
+++ b/app/scripts/ansible/roles/haproxy_exporter/meta/main.yml
@@ -0,0 +1,30 @@
+---
+galaxy_info:
+ author: Brett Delle Grazie
+ description: Role to install Prometheus HAproxy Exporter
+
+ license: GPLv3
+
+ min_ansible_version: 2.0
+
+ platforms:
+ - name: EL
+ versions:
+ - 6
+ - 7
+ - name: Fedora
+ versions:
+ - all
+ - name: Ubuntu
+ versions:
+ - all
+ - name: Debian
+ versions:
+ - all
+
+ galaxy_tags:
+ - prometheus
+ - exporter
+
+dependencies:
+ - { role: 'bdellegrazie.ansible-role-prometheus_exporter', version: 'v1.1.3' }
diff --git a/app/scripts/ansible/roles/haproxy_exporter/tasks/main.yml b/app/scripts/ansible/roles/haproxy_exporter/tasks/main.yml
new file mode 100644
index 00000000..a04cc68c
--- /dev/null
+++ b/app/scripts/ansible/roles/haproxy_exporter/tasks/main.yml
@@ -0,0 +1,111 @@
+---
+- name: group
+ become: true
+ become_user: root
+ group:
+ name: "{{ haproxy_exporter_group }}"
+ state: present
+ system: true
+ when: haproxy_exporter_group_manage | bool
+
+- name: user
+ become: true
+ become_user: root
+ user:
+ name: "{{ haproxy_exporter_user }}"
+ group: "{{ haproxy_exporter_group }}"
+ home: "{{ haproxy_exporter_home }}"
+ createhome: false
+ shell: /sbin/nologin
+ comment: haproxy_exporter
+ state: present
+ system: true
+ when: haproxy_exporter_user_manage | bool
+
+- name: home
+ become: true
+ become_user: root
+ file:
+ path: "{{ haproxy_exporter_home }}"
+ owner: "{{ haproxy_exporter_user }}"
+ group: "{{ haproxy_exporter_group }}"
+ mode: "u=rwx,g=rx,o="
+ state: directory
+ when: haproxy_exporter_home_manage | bool
+
+- name: logs
+ become: true
+ become_user: root
+ file:
+ path: "{{ haproxy_exporter_log_path }}"
+ owner: "{{ haproxy_exporter_user }}"
+ group: "{{ haproxy_exporter_group }}"
+ mode: "u=rwx,g=rx,o="
+ state: directory
+
+- name: download tarball
+ become: true
+ become_user: root
+ get_url:
+ url: "{{ haproxy_exporter_tarball_url }}"
+ dest: "{{ prometheus_exporter_dist_dir }}/{{ haproxy_exporter_signature }}.tar.gz"
+ owner: root
+ group: root
+ mode: "u=rw,go=r"
+
+- name: untar tarball
+ become: true
+ become_user: root
+ unarchive:
+ src: "{{ prometheus_exporter_dist_dir }}/{{ haproxy_exporter_signature }}.tar.gz"
+ dest: "{{ prometheus_exporter_dist_dir }}"
+ remote_src: true
+ owner: root
+ group: root
+ mode: "u=rwx,go=rx"
+ creates: "{{ haproxy_exporter_dist_dir }}/haproxy_exporter"
+
+- name: symlink
+ become: true
+ become_user: root
+ file:
+ src: "{{ haproxy_exporter_dist_dir }}/haproxy_exporter"
+ path: "{{ prometheus_exporter_dir }}/haproxy_exporter"
+ owner: root
+ group: root
+ force: true
+ state: link
+ notify: restart haproxy_exporter
+
+- name: config
+ become: true
+ become_user: root
+ template:
+ src: "haproxy_exporter.default.conf.j2"
+ dest: "/etc/default/haproxy_exporter"
+ owner: root
+ group: root
+ mode: "u=rw,go=r"
+ notify: restart haproxy_exporter
+
+- name: install service
+ include: service-{{ prometheus_exporter_service_mgr }}.yml
+
+- name: Service Enabled
+ become: true
+ become_user: root
+ service:
+ name: haproxy_exporter
+ enabled: "{{ haproxy_exporter_service_enable }}"
+ use: "{{ prometheus_exporter_service_mgr }}"
+ when: haproxy_exporter_service_manage
+
+- name: Service State
+ become: true
+ become_user: root
+ service:
+ name: haproxy_exporter
+ state: "{{ haproxy_exporter_service_state }}"
+ use: "{{ prometheus_exporter_service_mgr }}"
+ register: _haproxy_exporter_service_state
+ when: haproxy_exporter_service_manage
diff --git a/app/scripts/ansible/roles/haproxy_exporter/tasks/service-systemd.yml b/app/scripts/ansible/roles/haproxy_exporter/tasks/service-systemd.yml
new file mode 100644
index 00000000..5e6a6e27
--- /dev/null
+++ b/app/scripts/ansible/roles/haproxy_exporter/tasks/service-systemd.yml
@@ -0,0 +1,12 @@
+---
+- name: systemd service
+ become: true
+ template:
+ src: "haproxy_exporter.systemd.j2"
+ dest: "/lib/systemd/system/haproxy_exporter.service"
+ owner: root
+ group: root
+ mode: "u=rw,go=r"
+ notify:
+ - reload systemd daemon
+ - restart haproxy_exporter
diff --git a/app/scripts/ansible/roles/haproxy_exporter/tasks/service-sysvinit.yml b/app/scripts/ansible/roles/haproxy_exporter/tasks/service-sysvinit.yml
new file mode 100644
index 00000000..f250a16a
--- /dev/null
+++ b/app/scripts/ansible/roles/haproxy_exporter/tasks/service-sysvinit.yml
@@ -0,0 +1,11 @@
+---
+- name: sysvinit service
+ become: true
+ template:
+ src: "haproxy_exporter.sysvinit.j2"
+ dest: "/etc/init.d/haproxy_exporter"
+ owner: root
+ group: root
+ mode: "u=rwx,go=rx"
+ notify:
+ - restart haproxy_exporter
diff --git a/app/scripts/ansible/roles/haproxy_exporter/tasks/service-upstart.yml b/app/scripts/ansible/roles/haproxy_exporter/tasks/service-upstart.yml
new file mode 100644
index 00000000..45913703
--- /dev/null
+++ b/app/scripts/ansible/roles/haproxy_exporter/tasks/service-upstart.yml
@@ -0,0 +1,11 @@
+---
+- name: upstart service
+ become: true
+ template:
+ src: "haproxy_exporter.upstart.j2"
+ dest: "/etc/init/haproxy_exporter.conf"
+ owner: root
+ group: root
+ mode: "u=rw,go=r"
+ notify:
+ - restart haproxy_exporter
diff --git a/app/scripts/ansible/roles/haproxy_exporter/templates/haproxy_exporter.default.conf.j2 b/app/scripts/ansible/roles/haproxy_exporter/templates/haproxy_exporter.default.conf.j2
new file mode 100644
index 00000000..99a68117
--- /dev/null
+++ b/app/scripts/ansible/roles/haproxy_exporter/templates/haproxy_exporter.default.conf.j2
@@ -0,0 +1 @@
+OPTIONS="{{ haproxy_exporter_options | join(' ') }}"
diff --git a/app/scripts/ansible/roles/haproxy_exporter/templates/haproxy_exporter.systemd.j2 b/app/scripts/ansible/roles/haproxy_exporter/templates/haproxy_exporter.systemd.j2
new file mode 100644
index 00000000..a31febb1
--- /dev/null
+++ b/app/scripts/ansible/roles/haproxy_exporter/templates/haproxy_exporter.systemd.j2
@@ -0,0 +1,16 @@
+[Unit]
+Description=haproxy_exporter - Exporter for machine metrics.
+Documentation=https://github.com/prometheus/haproxy_exporter
+After=network.target
+
+[Service]
+User={{ haproxy_exporter_user }}
+Group={{ haproxy_exporter_group }}
+EnvironmentFile={{ haproxy_exporter_config_file }}
+ExecStart={{ haproxy_exporter_program }} $OPTIONS
+
+SyslogIdentifier=haproxy_exporter
+Restart=always
+
+[Install]
+WantedBy=multi-user.target
diff --git a/app/scripts/ansible/roles/haproxy_exporter/templates/haproxy_exporter.sysvinit.j2 b/app/scripts/ansible/roles/haproxy_exporter/templates/haproxy_exporter.sysvinit.j2
new file mode 100644
index 00000000..0678c199
--- /dev/null
+++ b/app/scripts/ansible/roles/haproxy_exporter/templates/haproxy_exporter.sysvinit.j2
@@ -0,0 +1,119 @@
+#!/bin/sh
+#
+# haproxy_exporter Start/Stop the haproxy_exporter daemon
+#
+# chkconfig: - 80 20
+# description: haproxy_exporter is a metrics daemon for Prometheus.
+# processname: haproxy_exporter
+
+### BEGIN INIT INFO
+# Provides: haproxy_exporter
+# Required-Start: $remote_fs $syslog
+# Required-Stop: $remote_fs $syslog
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: Start/Stop the haproxy_exporter daemon
+# Description: haproxy_exporter is a metrics daemon for Prometheus.
+### END INIT INFO
+
+# Source function library.
+if [ -f /etc/init.d/functions ] ; then
+ . /etc/init.d/functions
+fi
+
+# defaults
+OPTIONS=""
+
+# config
+if [ -f "{{ haproxy_exporter_config_file }}" ] ; then
+ . "{{ haproxy_exporter_config_file }}"
+fi
+
+RETVAL=0
+
+# Set up some common variables before we launch into what might be
+# considered boilerplate by now.
+prog="{{ haproxy_exporter_program }}"
+name="$(basename $prog)"
+binary="$(readlink -f $prog)"
+lockfile="/var/lock/subsys/$name"
+logdir="{{ haproxy_exporter_log_path }}"
+pidfile="{{ haproxy_exporter_pid_path }}/$name.pid"
+user="{{ haproxy_exporter_user }}"
+group="{{ haproxy_exporter_group }}"
+
+start() {
+ [ -r $binary ] || exit 5
+ echo -n $"Starting $name: "
+ daemonize -a -c '/' -e ${logdir}/${name}.err.log -o ${logdir}/${name}.out.log \
+ -p $pidfile -l $lockfile -u $user \
+ $binary $OPTIONS
+ RETVAL=$?
+ echo
+ [ $RETVAL -eq 0 ] && touch $lockfile
+ return $RETVAL
+}
+
+stop() {
+ echo -n $"Stopping $prog: "
+ killproc -p $pidfile $binary
+ RETVAL=$?
+ echo
+ [ $RETVAL -eq 0 ] && rm -f $lockfile
+ return $RETVAL
+}
+
+restart() {
+ stop
+ start
+}
+
+reload() {
+ restart
+}
+
+force_reload() {
+ restart
+}
+
+rh_status() {
+ # run checks to determine if the service is running or use generic status
+ status -p $pidfile -l $lockfile $binary
+}
+
+rh_status_q() {
+ rh_status >/dev/null 2>&1
+}
+
+case "$1" in
+ start)
+ rh_status_q && exit 0
+ start
+ ;;
+ stop)
+ rh_status_q || exit 0
+ stop
+ ;;
+ restart)
+ restart
+ ;;
+ reload)
+ rh_status_q || exit 7
+ reload
+ ;;
+ force-reload)
+ force_reload
+ ;;
+ status)
+ rh_status
+ ;;
+ condrestart|try-restart)
+ rh_status_q || exit 0
+ restart
+ ;;
+ *)
+ echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
+ exit 2
+esac
+
+exit $?
diff --git a/app/scripts/ansible/roles/haproxy_exporter/templates/haproxy_exporter.upstart.j2 b/app/scripts/ansible/roles/haproxy_exporter/templates/haproxy_exporter.upstart.j2
new file mode 100644
index 00000000..63edec16
--- /dev/null
+++ b/app/scripts/ansible/roles/haproxy_exporter/templates/haproxy_exporter.upstart.j2
@@ -0,0 +1,26 @@
+description "Prometheus HAproxy Exporter"
+start on (local-filesystems and net-device-up IFACE!=lo)
+stop on runlevel [016]
+
+respawn
+
+setuid {{ haproxy_exporter_user }}
+setgid {{ haproxy_exporter_group }}
+
+env name=haproxy_exporter
+env prog={{ haproxy_exporter_program }}
+env logdir={{ haproxy_exporter_log_path }}
+env user={{ haproxy_exporter_user }}
+env group={{ haproxy_exporter_group }}
+
+script
+ if [ -f "{{ haproxy_exporter_config_file }}" ] ; then
+ . "{{ haproxy_exporter_config_file }}"
+ fi
+
+ pidfile={{ haproxy_exporter_pid_path }}/$name.pid
+ lockfile=/var/lock/subsys/$name
+
+ binary=$(readlink -f $prog)
+ exec $binary $OPTIONS >> "${logdir}/${name}.out.log" 2>> "${logdir}/${name}.err.log"
+end script
diff --git a/app/scripts/ansible/roles/nginx_exporter.yml b/app/scripts/ansible/roles/nginx_exporter.yml
index ba04aa7b..f026665b 100644
--- a/app/scripts/ansible/roles/nginx_exporter.yml
+++ b/app/scripts/ansible/roles/nginx_exporter.yml
@@ -32,7 +32,7 @@
roles:
- - role: bdellegrazie.nginx_exporter
+ - role: nginx_exporter
environment:
http_proxy: "{{PROXY}}"
https_proxy: "{{PROXY}}"
diff --git a/app/scripts/ansible/roles/nginx_exporter/defaults/main.yml b/app/scripts/ansible/roles/nginx_exporter/defaults/main.yml
new file mode 100644
index 00000000..738b905d
--- /dev/null
+++ b/app/scripts/ansible/roles/nginx_exporter/defaults/main.yml
@@ -0,0 +1,31 @@
+---
+nginx_exporter_user: nginx_exporter
+nginx_exporter_user_manage: true
+nginx_exporter_group: nginx_exporter
+nginx_exporter_group_manage: true
+
+nginx_exporter_version: "0.5.0"
+nginx_exporter_platform_suffix: "linux_amd64"
+nginx_exporter_platform_suffix_alt: "linux-amd64"
+
+nginx_exporter_signature: "nginx-prometheus-exporter_{{ nginx_exporter_version }}_{{ nginx_exporter_platform_suffix }}"
+nginx_exporter_signature_alt: "nginx-prometheus-exporter-{{ nginx_exporter_version }}-{{ nginx_exporter_platform_suffix_alt }}"
+nginx_exporter_dist_dir: "{{ prometheus_exporter_dist_dir }}/{{ nginx_exporter_signature }}"
+nginx_exporter_dist_dir_alt: "{{ prometheus_exporter_dist_dir }}/{{ nginx_exporter_signature_alt }}"
+nginx_exporter_tarball_url: "https://github.com/nginxinc/nginx-prometheus-exporter/releases/download/v{{ nginx_exporter_version }}/{{ nginx_exporter_signature }}.tar.gz"
+nginx_exporter_tarball_url_alt: "https://github.com/nginxinc/nginx-prometheus-exporter/releases/download/v{{ nginx_exporter_version }}/{{ nginx_exporter_signature_alt }}.tar.gz"
+nginx_exporter_program: "{{ prometheus_exporter_dir }}/nginx_exporter"
+nginx_exporter_home: "/var/lib/nginx_exporter"
+nginx_exporter_home_manage: true
+nginx_exporter_options:
+ - '-nginx.retries 32768'
+ - '-nginx.scrape-uri http://localhost/nginx_stats'
+
+nginx_exporter_config_file: /etc/default/nginx_exporter
+nginx_exporter_pid_path: "/var/run"
+nginx_exporter_log_path: "/var/log/nginx_exporter"
+
+nginx_exporter_service_manage: true
+nginx_exporter_service_enable: true
+nginx_exporter_service_state: started
+nginx_exporter_service_notify: true
diff --git a/app/scripts/ansible/roles/nginx_exporter/handlers/main.yml b/app/scripts/ansible/roles/nginx_exporter/handlers/main.yml
new file mode 100644
index 00000000..67f4c6f2
--- /dev/null
+++ b/app/scripts/ansible/roles/nginx_exporter/handlers/main.yml
@@ -0,0 +1,11 @@
+---
+- name: restart nginx_exporter
+ become: true
+ become_user: root
+ service:
+ name: nginx_exporter
+ state: "{{ (nginx_exporter_service_state != 'stopped') | ternary('restarted', 'stopped') }}"
+ use: "{{ prometheus_exporter_service_mgr }}"
+ when: nginx_exporter_service_notify and (
+ _nginx_exporter_service_state is not defined or
+ not ( _nginx_exporter_service_state is changed ))
diff --git a/app/scripts/ansible/roles/nginx_exporter/meta/main.yml b/app/scripts/ansible/roles/nginx_exporter/meta/main.yml
new file mode 100644
index 00000000..d32ad28c
--- /dev/null
+++ b/app/scripts/ansible/roles/nginx_exporter/meta/main.yml
@@ -0,0 +1,31 @@
+---
+galaxy_info:
+ author: Brett Delle Grazie
+ description: Role to install Prometheus Nginx Exporter
+
+ license: GPLv3
+
+ min_ansible_version: 2.0
+
+ platforms:
+ - name: EL
+ versions:
+ - 6
+ - 7
+ - name: Fedora
+ versions:
+ - all
+ - name: Ubuntu
+ versions:
+ - all
+ - name: Debian
+ versions:
+ - all
+
+ galaxy_tags:
+ - prometheus
+ - exporter
+ - nginx
+
+dependencies:
+ - { role: 'bdellegrazie.ansible-role-prometheus_exporter', version: 'v1.1.3' }
diff --git a/app/scripts/ansible/roles/nginx_exporter/tasks/main.yml b/app/scripts/ansible/roles/nginx_exporter/tasks/main.yml
new file mode 100644
index 00000000..37115a59
--- /dev/null
+++ b/app/scripts/ansible/roles/nginx_exporter/tasks/main.yml
@@ -0,0 +1,161 @@
+---
+- name: group
+ become: true
+ become_user: root
+ group:
+ name: "{{ nginx_exporter_group }}"
+ state: present
+ system: true
+ when: nginx_exporter_group_manage | bool
+
+- name: user
+ become: true
+ become_user: root
+ user:
+ name: "{{ nginx_exporter_user }}"
+ group: "{{ nginx_exporter_group }}"
+ home: "{{ nginx_exporter_home }}"
+ createhome: false
+ move_home: false
+ comment: nginx_exporter
+ state: present
+ system: true
+ when: nginx_exporter_user_manage | bool
+
+- name: home
+ become: true
+ become_user: root
+ file:
+ path: "{{ nginx_exporter_home }}"
+ owner: "{{ nginx_exporter_user }}"
+ group: "{{ nginx_exporter_group }}"
+ mode: "u=rwx,g=rx,o="
+ state: directory
+ when: nginx_exporter_home_manage | bool
+
+- name: logs
+ become: true
+ become_user: root
+ file:
+ path: "{{ nginx_exporter_log_path }}"
+ owner: "{{ nginx_exporter_user }}"
+ group: "{{ nginx_exporter_group }}"
+ mode: "u=rwx,g=rx,o="
+ state: directory
+
+- name: download tarball
+ become: true
+ become_user: root
+ ignore_errors: yes
+ get_url:
+ url: "{{ nginx_exporter_tarball_url }}"
+ dest: "{{ prometheus_exporter_dist_dir }}/{{ nginx_exporter_signature }}.tar.gz"
+ owner: root
+ group: root
+ mode: "u=rwx,go=rx"
+ when: nginx_exporter_version is version('0.9.0', '>=')
+
+- name: download tarball alt
+ become: true
+ become_user: root
+ ignore_errors: yes
+ get_url:
+ url: "{{ nginx_exporter_tarball_url_alt }}"
+ dest: "{{ prometheus_exporter_dist_dir }}/{{ nginx_exporter_signature }}.tar.gz"
+ owner: root
+ group: root
+ mode: "u=rwx,go=rx"
+ when: nginx_exporter_version is version('0.8.0', '<=')
+
+- name: make distribution directory
+ become: true
+ become_user: root
+ file:
+ path: "{{ nginx_exporter_dist_dir }}"
+ owner: root
+ group: root
+ mode: "u=rwx,go=rx"
+ state: directory
+ when: nginx_exporter_version is version('0.9.0', '>=')
+
+- name: make distribution directory alt
+ become: true
+ become_user: root
+ file:
+ path: "{{ nginx_exporter_dist_dir_alt }}"
+ owner: root
+ group: root
+ mode: "u=rwx,go=rx"
+ state: directory
+ when: nginx_exporter_version is version('0.9.0', '<=')
+
+- name: untar tarball
+ become: true
+ become_user: root
+ unarchive:
+ src: "{{ prometheus_exporter_dist_dir }}/{{ nginx_exporter_signature }}.tar.gz"
+ dest: "{{ nginx_exporter_dist_dir }}"
+ remote_src: true
+ owner: root
+ group: root
+ mode: "u=rwx,go=rx"
+ creates: "{{ nginx_exporter_dist_dir }}/nginx-prometheus-exporter"
+# when: nginx_exporter_version is version('0.9.0', '>=')
+#
+#- name: untar tarball alt
+# become: true
+# become_user: root
+# unarchive:
+# src: "{{ prometheus_exporter_dist_dir }}/{{ nginx_exporter_signature_alt }}.tar.gz"
+# dest: "{{ nginx_exporter_dist_dir }}"
+# remote_src: true
+# owner: root
+# group: root
+# mode: "u=rwx,go=rx"
+# creates: "{{ nginx_exporter_dist_dir }}/nginx-prometheus-exporter"
+# when: nginx_exporter_version is version('0.8.0', '<=')
+
+- name: symlink
+ become: true
+ become_user: root
+ file:
+ src: "{{ nginx_exporter_dist_dir }}/nginx-prometheus-exporter"
+ path: "{{ prometheus_exporter_dir }}/nginx_exporter"
+ owner: root
+ group: root
+ force: true
+ state: link
+ notify: restart nginx_exporter
+
+- name: config
+ become: true
+ become_user: root
+ template:
+ src: "nginx_exporter.default.conf.j2"
+ dest: "/etc/default/nginx_exporter"
+ owner: root
+ group: root
+ mode: "u=rw,go=r"
+ notify: restart nginx_exporter
+
+- name: install service
+ include: service-{{ prometheus_exporter_service_mgr }}.yml
+
+- name: Service Enabled
+ become: true
+ become_user: root
+ service:
+ name: nginx_exporter
+ enabled: "{{ nginx_exporter_service_enable }}"
+ use: "{{ prometheus_exporter_service_mgr }}"
+ when: nginx_exporter_service_manage
+
+- name: Service State
+ become: true
+ become_user: root
+ service:
+ name: nginx_exporter
+ state: "{{ nginx_exporter_service_state }}"
+ use: "{{ prometheus_exporter_service_mgr }}"
+ register: _nginx_exporter_service_state
+ when: nginx_exporter_service_manage
diff --git a/app/scripts/ansible/roles/nginx_exporter/tasks/service-systemd.yml b/app/scripts/ansible/roles/nginx_exporter/tasks/service-systemd.yml
new file mode 100644
index 00000000..47129974
--- /dev/null
+++ b/app/scripts/ansible/roles/nginx_exporter/tasks/service-systemd.yml
@@ -0,0 +1,12 @@
+---
+- name: systemd service
+ become: true
+ template:
+ src: "nginx_exporter.systemd.j2"
+ dest: "/lib/systemd/system/nginx_exporter.service"
+ owner: root
+ group: root
+ mode: "u=rw,go=r"
+ notify:
+ - reload systemd daemon
+ - restart nginx_exporter
diff --git a/app/scripts/ansible/roles/nginx_exporter/tasks/service-sysvinit.yml b/app/scripts/ansible/roles/nginx_exporter/tasks/service-sysvinit.yml
new file mode 100644
index 00000000..efc09633
--- /dev/null
+++ b/app/scripts/ansible/roles/nginx_exporter/tasks/service-sysvinit.yml
@@ -0,0 +1,11 @@
+---
+- name: sysvinit service
+ become: true
+ template:
+ src: "nginx_exporter.sysvinit.j2"
+ dest: "/etc/init.d/nginx_exporter"
+ owner: root
+ group: root
+ mode: "u=rwx,go=rx"
+ notify:
+ - restart nginx_exporter
diff --git a/app/scripts/ansible/roles/nginx_exporter/tasks/service-upstart.yml b/app/scripts/ansible/roles/nginx_exporter/tasks/service-upstart.yml
new file mode 100644
index 00000000..4c2e8394
--- /dev/null
+++ b/app/scripts/ansible/roles/nginx_exporter/tasks/service-upstart.yml
@@ -0,0 +1,11 @@
+---
+- name: upstart service
+ become: true
+ template:
+ src: "nginx_exporter.upstart.j2"
+ dest: "/etc/init/nginx_exporter.conf"
+ owner: root
+ group: root
+ mode: "u=rw,go=r"
+ notify:
+ - restart nginx_exporter
diff --git a/app/scripts/ansible/roles/nginx_exporter/templates/nginx_exporter.default.conf.j2 b/app/scripts/ansible/roles/nginx_exporter/templates/nginx_exporter.default.conf.j2
new file mode 100644
index 00000000..12093651
--- /dev/null
+++ b/app/scripts/ansible/roles/nginx_exporter/templates/nginx_exporter.default.conf.j2
@@ -0,0 +1 @@
+OPTIONS="{{ nginx_exporter_options | join(' ') }}"
diff --git a/app/scripts/ansible/roles/nginx_exporter/templates/nginx_exporter.systemd.j2 b/app/scripts/ansible/roles/nginx_exporter/templates/nginx_exporter.systemd.j2
new file mode 100644
index 00000000..ba119d68
--- /dev/null
+++ b/app/scripts/ansible/roles/nginx_exporter/templates/nginx_exporter.systemd.j2
@@ -0,0 +1,16 @@
+[Unit]
+Description=nginx_exporter - Exporter for nginx metrics.
+Documentation=https://github.com/nginxinc/nginx-prometheus-exporter
+After=network.target
+
+[Service]
+User={{ nginx_exporter_user }}
+Group={{ nginx_exporter_group }}
+EnvironmentFile={{ nginx_exporter_config_file }}
+ExecStart={{ nginx_exporter_program }} $OPTIONS
+
+SyslogIdentifier=nginx_exporter
+Restart=always
+
+[Install]
+WantedBy=multi-user.target
diff --git a/app/scripts/ansible/roles/nginx_exporter/templates/nginx_exporter.sysvinit.j2 b/app/scripts/ansible/roles/nginx_exporter/templates/nginx_exporter.sysvinit.j2
new file mode 100644
index 00000000..144d435b
--- /dev/null
+++ b/app/scripts/ansible/roles/nginx_exporter/templates/nginx_exporter.sysvinit.j2
@@ -0,0 +1,125 @@
+#!/bin/sh
+#
+# nginx_exporter Start/Stop the nginx_exporter daemon
+#
+# chkconfig: - 80 20
+# description: nginx_exporter is a metrics daemon for Prometheus.
+# processname: nginx_exporter
+
+### BEGIN INIT INFO
+# Provides: nginx_exporter
+# Required-Start: $remote_fs $syslog
+# Required-Stop: $remote_fs $syslog
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: Start/Stop the nginx_exporter daemon
+# Description: nginx_exporter is a metrics daemon for Prometheus.
+### END INIT INFO
+
+# Source function library.
+if [ -f /etc/init.d/functions ] ; then
+ . /etc/init.d/functions
+fi
+
+# defaults
+FLAGS=""
+
+# config
+if [ -f "{{ nginx_exporter_config_file }}" ] ; then
+ . "{{ nginx_exporter_config_file }}"
+fi
+
+RETVAL=0
+
+# Set up some common variables before we launch into what might be
+# considered boilerplate by now.
+prog="{{ nginx_exporter_program }}"
+name="$(basename $prog)"
+binary="$(readlink -f $prog)"
+lockfile="/var/lock/subsys/$name"
+logdir="{{ nginx_exporter_log_path }}"
+pidfile="{{ nginx_exporter_pid_path }}/$name.pid"
+user="{{ nginx_exporter_user }}"
+group="{{ nginx_exporter_group }}"
+
+start() {
+ [ -r $binary ] || exit 5
+ [ -d $logdir ] || (
+ mkdir -p $logdir
+ chmod 0750 $logdir
+ chown $user:$group $logdir
+ )
+ echo -n $"Starting $name: "
+ export DATA_SOURCE_NAME
+ daemonize -a -c '/' -e ${logdir}/${name}.err.log -o ${logdir}/${name}.out.log \
+ -p $pidfile -l $lockfile -u $user \
+ $prog $OPTIONS
+ RETVAL=$?
+ echo
+ [ $RETVAL -eq 0 ] && touch $lockfile
+ return $RETVAL
+}
+
+stop() {
+ echo -n $"Stopping $prog: "
+ killproc -p $pidfile $binary
+ RETVAL=$?
+ echo
+ [ $RETVAL -eq 0 ] && rm -f $lockfile
+ return $RETVAL
+}
+
+restart() {
+ stop
+ start
+}
+
+reload() {
+ restart
+}
+
+force_reload() {
+ restart
+}
+
+rh_status() {
+ # run checks to determine if the service is running or use generic status
+ status -p $pidfile -l $lockfile $binary
+}
+
+rh_status_q() {
+ rh_status >/dev/null 2>&1
+}
+
+case "$1" in
+ start)
+ rh_status_q && exit 0
+ start
+ ;;
+ stop)
+ rh_status_q || exit 0
+ stop
+ ;;
+ restart)
+ restart
+ ;;
+ reload)
+ rh_status_q || exit 7
+ reload
+ ;;
+ force-reload)
+ force_reload
+ ;;
+ status)
+ rh_status
+ ;;
+ condrestart|try-restart)
+ rh_status_q || exit 0
+ restart
+ ;;
+ *)
+ echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
+ exit 2
+esac
+
+exit $?
diff --git a/app/scripts/ansible/roles/nginx_exporter/templates/nginx_exporter.upstart.j2 b/app/scripts/ansible/roles/nginx_exporter/templates/nginx_exporter.upstart.j2
new file mode 100644
index 00000000..54bad4a6
--- /dev/null
+++ b/app/scripts/ansible/roles/nginx_exporter/templates/nginx_exporter.upstart.j2
@@ -0,0 +1,26 @@
+description "Prometheus NGINX Exporter"
+start on (local-filesystems and net-device-up IFACE!=lo)
+stop on runlevel [016]
+
+respawn
+
+setuid {{ nginx_exporter_user }}
+setgid {{ nginx_exporter_group }}
+
+env name=nginx_exporter
+env prog={{ nginx_exporter_program }}
+env logdir={{ nginx_exporter_log_path }}
+env user={{ nginx_exporter_user }}
+env group={{ nginx_exporter_group }}
+
+script
+ if [ -f "{{ nginx_exporter_config_file }}" ] ; then
+ . "{{ nginx_exporter_config_file }}"
+ fi
+
+ pidfile={{ nginx_exporter_pid_path }}/$name.pid
+ lockfile=/var/lock/subsys/$name
+
+ binary=$(readlink -f $prog)
+ exec $binary $OPTIONS >> "${logdir}/${name}.out.log" 2>> "${logdir}/${name}.err.log"
+end script
diff --git a/app/scripts/ansible/roles/node_exporter.yml b/app/scripts/ansible/roles/node_exporter.yml
index d9931e45..d9e0b80e 100644
--- a/app/scripts/ansible/roles/node_exporter.yml
+++ b/app/scripts/ansible/roles/node_exporter.yml
@@ -32,7 +32,7 @@
roles:
- - role: cloudalchemy.node_exporter
+ - role: node_exporter
environment:
http_proxy: "{{PROXY}}"
https_proxy: "{{PROXY}}"
diff --git a/app/scripts/ansible/roles/node_exporter/defaults/main.yml b/app/scripts/ansible/roles/node_exporter/defaults/main.yml
new file mode 100644
index 00000000..0f8e6d9a
--- /dev/null
+++ b/app/scripts/ansible/roles/node_exporter/defaults/main.yml
@@ -0,0 +1,28 @@
+---
+node_exporter_version: 1.1.2
+node_exporter_binary_local_dir: ""
+node_exporter_web_listen_address: "0.0.0.0:9100"
+node_exporter_web_telemetry_path: "/metrics"
+
+node_exporter_textfile_dir: "/var/lib/node_exporter"
+
+node_exporter_tls_server_config: {}
+
+node_exporter_http_server_config: {}
+
+node_exporter_basic_auth_users: {}
+
+node_exporter_enabled_collectors:
+ - systemd
+ - textfile:
+ directory: "{{ node_exporter_textfile_dir }}"
+# - filesystem:
+# ignored-mount-points: "^/(sys|proc|dev)($|/)"
+# ignored-fs-types: "^(sys|proc|auto)fs$"
+
+node_exporter_disabled_collectors: []
+
+# Internal variables.
+_node_exporter_binary_install_dir: "/usr/local/bin"
+_node_exporter_system_group: "node-exp"
+_node_exporter_system_user: "{{ _node_exporter_system_group }}"
diff --git a/app/scripts/ansible/roles/node_exporter/meta/main.yml b/app/scripts/ansible/roles/node_exporter/meta/main.yml
new file mode 100644
index 00000000..f6b8d403
--- /dev/null
+++ b/app/scripts/ansible/roles/node_exporter/meta/main.yml
@@ -0,0 +1,33 @@
+---
+galaxy_info:
+ author: cloudalchemy
+ role_name: node_exporter
+ description: Prometheus Node Exporter
+ license: MIT
+ company: none
+ min_ansible_version: 2.7
+ platforms:
+ - name: Ubuntu
+ versions:
+ - bionic
+ - xenial
+ - name: Debian
+ versions:
+ - stretch
+ - buster
+ - name: EL
+ versions:
+ - 7
+ - 8
+ - name: Fedora
+ versions:
+ - 30
+ - 31
+ galaxy_tags:
+ - monitoring
+ - prometheus
+ - exporter
+ - metrics
+ - system
+
+dependencies: []
diff --git a/app/scripts/ansible/roles/node_exporter/tasks/install.yml b/app/scripts/ansible/roles/node_exporter/tasks/install.yml
new file mode 100644
index 00000000..42ef003e
--- /dev/null
+++ b/app/scripts/ansible/roles/node_exporter/tasks/install.yml
@@ -0,0 +1,61 @@
+---
+- name: Create the node_exporter group
+ group:
+ name: "{{ _node_exporter_system_group }}"
+ state: present
+ system: true
+ when: _node_exporter_system_group != "root"
+
+- name: Create the node_exporter user
+ user:
+ name: "{{ _node_exporter_system_user }}"
+ groups: "{{ _node_exporter_system_group }}"
+ append: true
+ shell: /usr/sbin/nologin
+ system: true
+ create_home: false
+ home: /
+ when: _node_exporter_system_user != "root"
+
+- block:
+ - name: Download node_exporter binary to local folder
+ get_url:
+ url: "https://github.com/prometheus/node_exporter/releases/download/v{{ node_exporter_version }}/node_exporter-{{ node_exporter_version }}.linux-{{ go_arch }}.tar.gz"
+ dest: "/tmp/node_exporter-{{ node_exporter_version }}.linux-{{ go_arch }}.tar.gz"
+ checksum: "sha256:{{ node_exporter_checksum }}"
+ mode: '0644'
+ register: _download_binary
+ until: _download_binary is succeeded
+ retries: 5
+ delay: 2
+ check_mode: false
+
+ - name: Unpack node_exporter binary
+ unarchive:
+ src: "/tmp/node_exporter-{{ node_exporter_version }}.linux-{{ go_arch }}.tar.gz"
+ dest: "/tmp"
+ creates: "/tmp/node_exporter-{{ node_exporter_version }}.linux-{{ go_arch }}/node_exporter"
+ remote_src: true
+ check_mode: false
+
+ - name: Propagate node_exporter binaries
+ copy:
+ src: "/tmp/node_exporter-{{ node_exporter_version }}.linux-{{ go_arch }}/node_exporter"
+ dest: "{{ _node_exporter_binary_install_dir }}/node_exporter"
+ mode: 0755
+ owner: root
+ group: root
+ remote_src: true
+ notify: restart node_exporter
+ when: not ansible_check_mode
+ when: node_exporter_binary_local_dir | length == 0
+
+- name: propagate locally distributed node_exporter binary
+ copy:
+ src: "{{ node_exporter_binary_local_dir }}/node_exporter"
+ dest: "{{ _node_exporter_binary_install_dir }}/node_exporter"
+ mode: 0755
+ owner: root
+ group: root
+ when: node_exporter_binary_local_dir | length > 0
+ notify: restart node_exporter
diff --git a/app/scripts/ansible/roles/node_exporter/tasks/main.yml b/app/scripts/ansible/roles/node_exporter/tasks/main.yml
new file mode 100644
index 00000000..74d0ad84
--- /dev/null
+++ b/app/scripts/ansible/roles/node_exporter/tasks/main.yml
@@ -0,0 +1,38 @@
+---
+- import_tasks: preflight.yml
+ tags:
+ - node_exporter_install
+ - node_exporter_configure
+ - node_exporter_run
+
+- import_tasks: install.yml
+ become: true
+# when:
+# ( not __node_exporter_is_installed.stat.exists ) or
+# ( __node_exporter_current_version_output.stderr_lines[0].split(" ")[2] != node_exporter_version ) or
+# ( node_exporter_binary_local_dir | length > 0 )
+ tags:
+ - node_exporter_install
+
+- import_tasks: selinux.yml
+ become: true
+ when: ansible_selinux.status == "enabled"
+ tags:
+ - node_exporter_configure
+
+- import_tasks: configure.yml
+ become: true
+ tags:
+ - node_exporter_configure
+
+- name: Ensure Node Exporter is enabled on boot
+ become: true
+ systemd:
+ daemon_reload: true
+ name: node_exporter
+ enabled: true
+ state: started
+ when:
+ - not ansible_check_mode
+ tags:
+ - node_exporter_run
diff --git a/app/scripts/ansible/roles/node_exporter/tasks/preflight.yml b/app/scripts/ansible/roles/node_exporter/tasks/preflight.yml
new file mode 100644
index 00000000..aff6395d
--- /dev/null
+++ b/app/scripts/ansible/roles/node_exporter/tasks/preflight.yml
@@ -0,0 +1,86 @@
+---
+- name: Assert usage of systemd as an init system
+ assert:
+ that: ansible_service_mgr == 'systemd'
+ msg: "This role only works with systemd"
+
+- name: Get systemd version
+ command: systemctl --version
+ changed_when: false
+ check_mode: false
+ register: __systemd_version
+ tags:
+ - skip_ansible_lint
+
+- name: Set systemd version fact
+ set_fact:
+ node_exporter_systemd_version: "{{ __systemd_version.stdout_lines[0] | regex_replace('^systemd\\s(\\d+).*$', '\\1') }}"
+
+- name: Naive assertion of proper listen address
+ assert:
+ that:
+ - "':' in node_exporter_web_listen_address"
+
+- name: Assert collectors are not both disabled and enabled at the same time
+ assert:
+ that:
+ - "item not in node_exporter_enabled_collectors"
+ with_items: "{{ node_exporter_disabled_collectors }}"
+
+- block:
+ - name: Assert that TLS key and cert path are set
+ assert:
+ that:
+ - "node_exporter_tls_server_config.cert_file is defined"
+ - "node_exporter_tls_server_config.key_file is defined"
+
+ - name: Check existence of TLS cert file
+ stat:
+ path: "{{ node_exporter_tls_server_config.cert_file }}"
+ register: __node_exporter_cert_file
+
+ - name: Check existence of TLS key file
+ stat:
+ path: "{{ node_exporter_tls_server_config.key_file }}"
+ register: __node_exporter_key_file
+
+ - name: Assert that TLS key and cert are present
+ assert:
+ that:
+ - "{{ __node_exporter_cert_file.stat.exists }}"
+ - "{{ __node_exporter_key_file.stat.exists }}"
+ when: node_exporter_tls_server_config | length > 0
+
+- name: Check if node_exporter is installed
+ stat:
+ path: "{{ _node_exporter_binary_install_dir }}/node_exporter"
+ register: __node_exporter_is_installed
+ check_mode: false
+ tags:
+ - node_exporter_install
+
+- name: Gather currently installed node_exporter version (if any)
+ command: "{{ _node_exporter_binary_install_dir }}/node_exporter --version"
+ args:
+ warn: false
+ changed_when: false
+ register: __node_exporter_current_version_output
+ check_mode: false
+ when: __node_exporter_is_installed.stat.exists
+ tags:
+ - node_exporter_install
+ - skip_ansible_lint
+
+- block:
+ - name: Get checksum list from github
+ set_fact:
+ _checksums: "{{ lookup('url', 'https://github.com/prometheus/node_exporter/releases/download/v' + node_exporter_version + '/sha256sums.txt', wantlist=True) | list }}"
+ run_once: true
+
+ - name: "Get checksum for {{ go_arch }} architecture"
+ set_fact:
+ node_exporter_checksum: "{{ item.split(' ')[0] }}"
+ with_items: "{{ _checksums }}"
+ when:
+ - "('linux-' + go_arch + '.tar.gz') in item"
+ when: node_exporter_binary_local_dir | length == 0
diff --git a/app/scripts/ansible/roles/node_exporter/tasks/selinux.yml b/app/scripts/ansible/roles/node_exporter/tasks/selinux.yml
new file mode 100644
index 00000000..e5efae54
--- /dev/null
+++ b/app/scripts/ansible/roles/node_exporter/tasks/selinux.yml
@@ -0,0 +1,39 @@
+---
+- name: Install selinux python packages [RHEL]
+ package:
+ name:
+ - "{{ ( (ansible_facts.distribution_major_version | int) < 8) | ternary('libselinux-python','python3-libselinux') }}"
+ - "{{ ( (ansible_facts.distribution_major_version | int) < 8) | ternary('policycoreutils-python','python3-policycoreutils') }}"
+ state: present
+ register: _install_selinux_packages
+ until: _install_selinux_packages is success
+ retries: 5
+ delay: 2
+ when:
+ - (ansible_distribution | lower == "redhat") or
+ (ansible_distribution | lower == "centos")
+
+- name: Install selinux python packages [Fedora]
+ package:
+ name:
+ - "{{ ( (ansible_facts.distribution_major_version | int) < 29) | ternary('libselinux-python','python3-libselinux') }}"
+ - "{{ ( (ansible_facts.distribution_major_version | int) < 29) | ternary('policycoreutils-python','python3-policycoreutils') }}"
+ state: present
+ register: _install_selinux_packages
+ until: _install_selinux_packages is success
+ retries: 5
+ delay: 2
+
+ when:
+ - ansible_distribution | lower == "fedora"
+
+- name: Install selinux python packages [clearlinux]
+ package:
+ name: sysadmin-basic
+ state: present
+ register: _install_selinux_packages
+ until: _install_selinux_packages is success
+ retries: 5
+ delay: 2
+ when:
+ - ansible_distribution | lower == "clearlinux"
diff --git a/app/scripts/ansible/roles/node_exporter/templates/config.yaml.j2 b/app/scripts/ansible/roles/node_exporter/templates/config.yaml.j2
new file mode 100644
index 00000000..9013722c
--- /dev/null
+++ b/app/scripts/ansible/roles/node_exporter/templates/config.yaml.j2
@@ -0,0 +1,18 @@
+---
+{{ ansible_managed | comment }}
+{% if node_exporter_tls_server_config | length > 0 %}
+tls_server_config:
+{{ node_exporter_tls_server_config | to_nice_yaml | indent(2, true) }}
+{% endif %}
+
+{% if node_exporter_http_server_config | length > 0 %}
+http_server_config:
+{{ node_exporter_http_server_config | to_nice_yaml | indent(2, true) }}
+{% endif %}
+
+{% if node_exporter_basic_auth_users | length > 0 %}
+basic_auth_users:
+{% for k, v in node_exporter_basic_auth_users.items() %}
+ {{ k }}: {{ v | password_hash('bcrypt', ('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890' | shuffle(seed=inventory_hostname) | join)[:22], rounds=9) }}
+{% endfor %}
+{% endif %}
diff --git a/app/scripts/ansible/roles/node_exporter/templates/node_exporter.service.j2 b/app/scripts/ansible/roles/node_exporter/templates/node_exporter.service.j2
new file mode 100644
index 00000000..003b474c
--- /dev/null
+++ b/app/scripts/ansible/roles/node_exporter/templates/node_exporter.service.j2
@@ -0,0 +1,54 @@
+{{ ansible_managed | comment }}
+
+[Unit]
+Description=Prometheus Node Exporter
+After=network-online.target
+
+[Service]
+Type=simple
+User={{ _node_exporter_system_user }}
+Group={{ _node_exporter_system_group }}
+ExecStart={{ _node_exporter_binary_install_dir }}/node_exporter \
+{% for collector in node_exporter_enabled_collectors -%}
+{% if not collector is mapping %}
+ --collector.{{ collector }} \
+{% else -%}
+{% set name, options = (collector.items()|list)[0] -%}
+ --collector.{{ name }} \
+{% for k,v in options|dictsort %}
+ --collector.{{ name }}.{{ k }}={{ v | quote }} \
+{% endfor -%}
+{% endif -%}
+{% endfor -%}
+{% for collector in node_exporter_disabled_collectors %}
+ --no-collector.{{ collector }} \
+{% endfor %}
+{% if node_exporter_tls_server_config | length > 0 or node_exporter_http_server_config | length > 0 or node_exporter_basic_auth_users | length > 0 %}
+ --web.config=/etc/node_exporter/config.yaml \
+{% endif %}
+ --web.listen-address={{ node_exporter_web_listen_address }} \
+ --web.telemetry-path={{ node_exporter_web_telemetry_path }}
+
+SyslogIdentifier=node_exporter
+Restart=always
+RestartSec=1
+StartLimitInterval=0
+
+{% for m in ansible_mounts if m.mount == '/home' %}
+ProtectHome=read-only
+{% else %}
+ProtectHome=yes
+{% endfor %}
+NoNewPrivileges=yes
+
+{% if node_exporter_systemd_version | int >= 232 %}
+ProtectSystem=strict
+ProtectControlGroups=true
+ProtectKernelModules=true
+ProtectKernelTunables=yes
+{% else %}
+ProtectSystem=full
+{% endif %}
+
+[Install]
+WantedBy=multi-user.target
diff --git a/app/scripts/ansible/roles/node_exporter/vars/main.yml b/app/scripts/ansible/roles/node_exporter/vars/main.yml
new file mode 100644
index 00000000..fdcd1265
--- /dev/null
+++ b/app/scripts/ansible/roles/node_exporter/vars/main.yml
@@ -0,0 +1,9 @@
+---
+go_arch_map:
+ i386: '386'
+ x86_64: 'amd64'
+ aarch64: 'arm64'
+ armv7l: 'armv7'
+ armv6l: 'armv6'
+
+go_arch: "{{ go_arch_map[ansible_architecture] | default(ansible_architecture) }}"
diff --git a/app/scripts/install_geoip.sh b/app/scripts/install_geoip.sh
index 1d96dcac..be29174b 100644
--- a/app/scripts/install_geoip.sh
+++ b/app/scripts/install_geoip.sh
@@ -34,7 +34,7 @@ if [[ $maxmind_key == "" ]]; then
fi
if [[ $KEY == "" ]]; then
- ansible-playbook $PWD/roles/geoip.yml -e "ansible_user=$USER ansible_ssh_pass=$PASS variable_host=$HOST PROXY=$PROXY UPDATE=$UPDATE haproxy_dir=$haproxy_dir maxmind_key=$maxmind_key SSH_PORT=$SSH_PORT" -i $PWD/$HOST
+ ansible-playbook $PWD/roles/geoip.yml -e "ansible_user=$USER ansible_ssh_pass='$PASS' variable_host=$HOST PROXY=$PROXY UPDATE=$UPDATE haproxy_dir=$haproxy_dir maxmind_key=$maxmind_key SSH_PORT=$SSH_PORT" -i $PWD/$HOST
else
ansible-playbook $PWD/roles/geoip.yml --key-file $KEY -e "ansible_user=$USER variable_host=$HOST PROXY=$PROXY UPDATE=$UPDATE haproxy_dir=$haproxy_dir maxmind_key=$maxmind_key SSH_PORT=$SSH_PORT" -i $PWD/$HOST
fi
diff --git a/app/scripts/install_haproxy_exporter.sh b/app/scripts/install_haproxy_exporter.sh
index 66a1e0f6..d6569c76 100644
--- a/app/scripts/install_haproxy_exporter.sh
+++ b/app/scripts/install_haproxy_exporter.sh
@@ -10,21 +10,23 @@ do
USER) USER=${VALUE} ;;
PASS) PASS=${VALUE} ;;
KEY) KEY=${VALUE} ;;
+ VER) VER=${VALUE} ;;
STAT_PORT) STAT_PORT=${VALUE} ;;
STAT_PAGE) STAT_PAGE=${VALUE} ;;
STATS_USER) STATS_USER=${VALUE} ;;
STATS_PASS) STATS_PASS=${VALUE} ;;
+ EXP_PROM) EXP_PROM=${VALUE} ;;
SSH_PORT) SSH_PORT=${VALUE} ;;
*)
esac
done
-if [ ! -d "/var/www/haproxy-wi/app/scripts/ansible/roles/bdellegrazie.haproxy_exporter" ]; then
+if [ ! -d "/var/www/haproxy-wi/app/scripts/ansible/roles/bdellegrazie.ansible-role-prometheus_exporter" ]; then
if [[ -n $PROXY ]];then
export https_proxy="$PROXY"
export http_proxy="$PROXY"
fi
- ansible-galaxy install bdellegrazie.haproxy_exporter --roles-path /var/www/haproxy-wi/app/scripts/ansible/roles/
+ ansible-galaxy install bdellegrazie.ansible-role-prometheus_exporter --roles-path /var/www/haproxy-wi/app/scripts/ansible/roles/
bash -c cat << EOF >> /var/www/haproxy-wi/app/scripts/ansible/roles/bdellegrazie.ansible-role-prometheus_exporter/vars/vars-family-redhat-8.yml
---
prometheus_exporter_ansible_packages:
@@ -41,9 +43,9 @@ PWD=$PWD/scripts/ansible/
echo "$HOST ansible_port=$SSH_PORT" > "$PWD"/"$HOST"
if [[ $KEY == "" ]]; then
- ansible-playbook "$PWD"/roles/haproxy_exporter.yml -e "ansible_user=$USER ansible_ssh_pass=$PASS variable_host=$HOST PROXY=$PROXY STAT_PAGE=$STAT_PAGE STAT_PORT=$STAT_PORT STATS_USER=$STATS_USER STATS_PASS=$STATS_PASS SSH_PORT=$SSH_PORT" -i "$PWD"/"$HOST"
+ ansible-playbook "$PWD"/roles/haproxy_exporter.yml -e "ansible_user=$USER ansible_ssh_pass='$PASS' variable_host=$HOST PROXY=$PROXY STAT_PAGE=$STAT_PAGE STAT_PORT=$STAT_PORT STATS_USER=$STATS_USER STATS_PASS=$STATS_PASS SSH_PORT=$SSH_PORT haproxy_exporter_version=$VER" -i "$PWD"/"$HOST"
else
- ansible-playbook "$PWD"/roles/haproxy_exporter.yml --key-file "$KEY" -e "ansible_user=$USER variable_host=$HOST PROXY=$PROXY STAT_PAGE=$STAT_PAGE STAT_PORT=$STAT_PORT STATS_USER=$STATS_USER STATS_PASS=$STATS_PASS SSH_PORT=$SSH_PORT" -i "$PWD"/"$HOST"
+ ansible-playbook "$PWD"/roles/haproxy_exporter.yml --key-file "$KEY" -e "ansible_user=$USER variable_host=$HOST PROXY=$PROXY STAT_PAGE=$STAT_PAGE STAT_PORT=$STAT_PORT STATS_USER=$STATS_USER STATS_PASS=$STATS_PASS SSH_PORT=$SSH_PORT haproxy_exporter_version=$VER" -i "$PWD"/"$HOST"
fi
if [ $? -gt 0 ]
@@ -52,9 +54,12 @@ then
exit 1
fi
-if ! sudo grep -Fxq " - $HOST:9101" /etc/prometheus/prometheus.yml; then
- sudo echo " - $HOST:9101" | sudo tee -a /etc/prometheus/prometheus.yml > /dev/null
+if [ "$EXP_PROM" == 0 ]
+then
+ if ! sudo grep -Fxq " - $HOST:9101" /etc/prometheus/prometheus.yml; then
+ sudo echo " - $HOST:9101" | sudo tee -a /etc/prometheus/prometheus.yml > /dev/null
+ sudo systemctl reload prometheus 2>> /dev/null
+ fi
fi
-sudo systemctl reload prometheus
rm -f "$PWD"/"$HOST"
diff --git a/app/scripts/install_keepalived.sh b/app/scripts/install_keepalived.sh
index 783a5106..e718f747 100644
--- a/app/scripts/install_keepalived.sh
+++ b/app/scripts/install_keepalived.sh
@@ -32,7 +32,7 @@ PWD=$PWD/scripts/ansible/
echo "$HOST ansible_port=$SSH_PORT" > $PWD/$HOST
if [[ $KEY == "" ]]; then
- ansible-playbook $PWD/roles/keepalived.yml -e "ansible_user=$USER ansible_ssh_pass=$PASS variable_host=$HOST SYN_FLOOD=$SYN_FLOOD PROXY=$PROXY MASTER=$MASTER ETH=$ETH IP=$IP RESTART=$RESTART ADD_VRRP=$ADD_VRRP SSH_PORT=$SSH_PORT" -i $PWD/$HOST
+ ansible-playbook $PWD/roles/keepalived.yml -e "ansible_user=$USER ansible_ssh_pass='$PASS' variable_host=$HOST SYN_FLOOD=$SYN_FLOOD PROXY=$PROXY MASTER=$MASTER ETH=$ETH IP=$IP RESTART=$RESTART ADD_VRRP=$ADD_VRRP SSH_PORT=$SSH_PORT" -i $PWD/$HOST
else
ansible-playbook $PWD/roles/keepalived.yml --key-file $KEY -e "ansible_user=$USER variable_host=$HOST SYN_FLOOD=$SYN_FLOOD PROXY=$PROXY MASTER=$MASTER ETH=$ETH IP=$IP RESTART=$RESTART ADD_VRRP=$ADD_VRRP SSH_PORT=$SSH_PORT" -i $PWD/$HOST
fi
diff --git a/app/scripts/install_nginx.sh b/app/scripts/install_nginx.sh
index e7d5c24a..1633132a 100644
--- a/app/scripts/install_nginx.sh
+++ b/app/scripts/install_nginx.sh
@@ -48,7 +48,7 @@ PWD=$PWD/scripts/ansible/
echo "$HOST ansible_port=$SSH_PORT" > $PWD/$HOST
if [[ $KEY == "" ]]; then
- ansible-playbook $PWD/roles/nginx.yml -e "ansible_user=$USER ansible_ssh_pass=$PASS variable_host=$HOST PROXY=$PROXY CONT_NAME=$CONT_NAME SYN_FLOOD=$SYN_FLOOD STAT_PAGE=$STAT_PAGE STAT_PORT=$STAT_PORT STATS_USER=$STATS_USER STATS_PASS=$STATS_PASS CONFIG_PATH=$CONFIG_PATH SSH_PORT=$SSH_PORT" -i $PWD/$HOST -t $tags
+ ansible-playbook $PWD/roles/nginx.yml -e "ansible_user=$USER ansible_ssh_pass='$PASS' variable_host=$HOST PROXY=$PROXY CONT_NAME=$CONT_NAME SYN_FLOOD=$SYN_FLOOD STAT_PAGE=$STAT_PAGE STAT_PORT=$STAT_PORT STATS_USER=$STATS_USER STATS_PASS=$STATS_PASS CONFIG_PATH=$CONFIG_PATH SSH_PORT=$SSH_PORT" -i $PWD/$HOST -t $tags
else
ansible-playbook $PWD/roles/nginx.yml --key-file $KEY -e "ansible_user=$USER variable_host=$HOST PROXY=$PROXY CONT_NAME=$CONT_NAME SYN_FLOOD=$SYN_FLOOD STAT_PAGE=$STAT_PAGE STAT_PORT=$STAT_PORT STATS_USER=$STATS_USER STATS_PASS=$STATS_PASS CONFIG_PATH=$CONFIG_PATH SSH_PORT=$SSH_PORT" -i $PWD/$HOST -t $tags
fi
diff --git a/app/scripts/install_nginx_exporter.sh b/app/scripts/install_nginx_exporter.sh
index 29a6abf7..a7e2873e 100644
--- a/app/scripts/install_nginx_exporter.sh
+++ b/app/scripts/install_nginx_exporter.sh
@@ -9,22 +9,29 @@ do
HOST) HOST=${VALUE} ;;
USER) USER=${VALUE} ;;
PASS) PASS=${VALUE} ;;
- KEY) KEY=${VALUE} ;;
- STAT_PORT) STAT_PORT=${VALUE} ;;
- STAT_PAGE) STAT_PAGE=${VALUE} ;;
- STATS_USER) STATS_USER=${VALUE} ;;
+ KEY) KEY=${VALUE} ;;
+ VER) VER=${VALUE} ;;
+ EXP_PROM) EXP_PROM=${VALUE} ;;
+ STAT_PORT) STAT_PORT=${VALUE} ;;
+ STAT_PAGE) STAT_PAGE=${VALUE} ;;
+ STATS_USER) STATS_USER=${VALUE} ;;
STATS_PASS) STATS_PASS=${VALUE} ;;
- SSH_PORT) SSH_PORT=${VALUE} ;;
+ SSH_PORT) SSH_PORT=${VALUE} ;;
*)
esac
done
-if [ ! -d "/var/www/haproxy-wi/app/scripts/ansible/roles/bdellegrazie.nginx_exporter" ]; then
+if [ ! -d "/var/www/haproxy-wi/app/scripts/ansible/roles/bdellegrazie.ansible-role-prometheus_exporter" ]; then
if [ ! -z $PROXY ];then
export https_proxy="$PROXY"
export http_proxy="$PROXY"
fi
- ansible-galaxy install bdellegrazie.nginx_exporter --roles-path /var/www/haproxy-wi/app/scripts/ansible/roles/
+ ansible-galaxy install bdellegrazie.ansible-role-prometheus_exporter --roles-path /var/www/haproxy-wi/app/scripts/ansible/roles/
+ bash -c cat << EOF >> /var/www/haproxy-wi/app/scripts/ansible/roles/bdellegrazie.ansible-role-prometheus_exporter/vars/vars-family-redhat-8.yml
+---
+prometheus_exporter_ansible_packages:
+ - libselinux-python3
+EOF
fi
export ANSIBLE_HOST_KEY_CHECKING=False
@@ -38,9 +45,9 @@ PWD=$PWD/scripts/ansible/
echo "$HOST ansible_port=$SSH_PORT" > $PWD/$HOST
if [[ $KEY == "" ]]; then
- ansible-playbook $PWD/roles/nginx_exporter.yml -e "ansible_user=$USER ansible_ssh_pass=$PASS variable_host=$HOST PROXY=$PROXY STAT_PAGE=$STAT_PAGE STAT_PORT=$STAT_PORT STATS_USER=$STATS_USER STATS_PASS=$STATS_PASS SSH_PORT=$SSH_PORT" -i $PWD/$HOST
+ ansible-playbook $PWD/roles/nginx_exporter.yml -e "ansible_user=$USER ansible_ssh_pass='$PASS' variable_host=$HOST PROXY=$PROXY STAT_PAGE=$STAT_PAGE STAT_PORT=$STAT_PORT STATS_USER=$STATS_USER STATS_PASS=$STATS_PASS SSH_PORT=$SSH_PORT nginx_exporter_version=$VER" -i $PWD/$HOST
else
- ansible-playbook $PWD/roles/nginx_exporter.yml --key-file $KEY -e "ansible_user=$USER variable_host=$HOST PROXY=$PROXY STAT_PAGE=$STAT_PAGE STAT_PORT=$STAT_PORT STATS_USER=$STATS_USER STATS_PASS=$STATS_PASS SSH_PORT=$SSH_PORT" -i $PWD/$HOST
+ ansible-playbook $PWD/roles/nginx_exporter.yml --key-file $KEY -e "ansible_user=$USER variable_host=$HOST PROXY=$PROXY STAT_PAGE=$STAT_PAGE STAT_PORT=$STAT_PORT STATS_USER=$STATS_USER STATS_PASS=$STATS_PASS SSH_PORT=$SSH_PORT nginx_exporter_version=$VER" -i $PWD/$HOST
fi
if [ $? -gt 0 ]
@@ -49,9 +56,12 @@ then
exit 1
fi
-if ! sudo grep -Fxq " - $HOST:9113" /etc/prometheus/prometheus.yml; then
- sudo echo " - $HOST:9113" | sudo tee -a /etc/prometheus/prometheus.yml > /dev/null
+if [ "$EXP_PROM" == 0 ]
+then
+ if ! sudo grep -Fxq " - $HOST:9113" /etc/prometheus/prometheus.yml; then
+ sudo echo " - $HOST:9113" | sudo tee -a /etc/prometheus/prometheus.yml > /dev/null
+ sudo systemctl reload prometheus 2>> /dev/null
+ fi
fi
-sudo systemctl reload prometheus
rm -f $PWD/$HOST
diff --git a/app/scripts/install_node_exporter.sh b/app/scripts/install_node_exporter.sh
index 76ffc50f..a392463b 100644
--- a/app/scripts/install_node_exporter.sh
+++ b/app/scripts/install_node_exporter.sh
@@ -9,20 +9,14 @@ do
HOST) HOST=${VALUE} ;;
USER) USER=${VALUE} ;;
PASS) PASS=${VALUE} ;;
- KEY) KEY=${VALUE} ;;
+ KEY) KEY=${VALUE} ;;
+ VER) VER=${VALUE} ;;
+ EXP_PROM) EXP_PROM=${VALUE} ;;
SSH_PORT) SSH_PORT=${VALUE} ;;
*)
esac
done
-if [ ! -d "/var/www/haproxy-wi/app/scripts/ansible/roles/cloudalchemy.node_exporterr" ]; then
- if [ ! -z $PROXY ];then
- export https_proxy="$PROXY"
- export http_proxy="$PROXY"
- fi
- ansible-galaxy install cloudalchemy.node_exporter --roles-path /var/www/haproxy-wi/app/scripts/ansible/roles/
-fi
-
export ANSIBLE_HOST_KEY_CHECKING=False
export ANSIBLE_DISPLAY_SKIPPED_HOSTS=False
export ACTION_WARNINGS=False
@@ -34,9 +28,9 @@ PWD=$PWD/scripts/ansible/
echo "$HOST ansible_port=$SSH_PORT" > $PWD/$HOST
if [[ $KEY == "" ]]; then
- ansible-playbook $PWD/roles/node_exporter.yml -e "ansible_user=$USER ansible_ssh_pass=$PASS variable_host=$HOST PROXY=$PROXY SSH_PORT=$SSH_PORT" -i $PWD/$HOST
+ ansible-playbook $PWD/roles/node_exporter.yml -e "ansible_user=$USER ansible_ssh_pass='$PASS' variable_host=$HOST PROXY=$PROXY SSH_PORT=$SSH_PORT node_exporter_version=$VER" -i $PWD/$HOST
else
- ansible-playbook $PWD/roles/node_exporter.yml --key-file $KEY -e "ansible_user=$USER variable_host=$HOST PROXY=$PROXY SSH_PORT=$SSH_PORT" -i $PWD/$HOST
+ ansible-playbook $PWD/roles/node_exporter.yml --key-file $KEY -e "ansible_user=$USER variable_host=$HOST PROXY=$PROXY SSH_PORT=$SSH_PORT node_exporter_version=$VER" -i $PWD/$HOST
fi
if [ $? -gt 0 ]
@@ -44,10 +38,12 @@ then
echo "error: Can't install Node exporter
"
exit 1
fi
-
-if ! sudo grep -Fxq " - $HOST:9100" /etc/prometheus/prometheus.yml; then
- sudo echo " - $HOST:9100" | sudo tee -a /etc/prometheus/prometheus.yml > /dev/null
+if [ "$EXP_PROM" == 0 ]
+then
+ if ! sudo grep -Fxq " - $HOST:9100" /etc/prometheus/prometheus.yml; then
+ sudo echo " - $HOST:9100" | sudo tee -a /etc/prometheus/prometheus.yml > /dev/null
+ sudo systemctl reload prometheus 2>> /dev/null
+ fi
fi
-sudo systemctl reload prometheus
rm -f $PWD/$HOST
diff --git a/app/templates/include/mon_installation.html b/app/templates/include/mon_installation.html
index 8952f77c..cfe40c6f 100644
--- a/app/templates/include/mon_installation.html
+++ b/app/templates/include/mon_installation.html
@@ -11,7 +11,7 @@