Pavel Loginov 2021-12-20 12:56:56 +06:00
parent c79c59c775
commit f09aafa77c
47 changed files with 1314 additions and 92 deletions

View File

@ -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:

View File

@ -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

View File

@ -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')

View File

@ -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']

View File

@ -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

View File

@ -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 ))

View File

@ -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' }

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -0,0 +1 @@
OPTIONS="{{ haproxy_exporter_options | join(' ') }}"

View File

@ -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

View File

@ -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 $?

View File

@ -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

View File

@ -32,7 +32,7 @@
roles:
- role: bdellegrazie.nginx_exporter
- role: nginx_exporter
environment:
http_proxy: "{{PROXY}}"
https_proxy: "{{PROXY}}"

View File

@ -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

View File

@ -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 ))

View File

@ -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' }

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -0,0 +1 @@
OPTIONS="{{ nginx_exporter_options | join(' ') }}"

View File

@ -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

View File

@ -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 $?

View File

@ -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

View File

@ -32,7 +32,7 @@
roles:
- role: cloudalchemy.node_exporter
- role: node_exporter
environment:
http_proxy: "{{PROXY}}"
https_proxy: "{{PROXY}}"

View File

@ -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 }}"

View File

@ -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: []

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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"

View File

@ -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 %}

View File

@ -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

View File

@ -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) }}"

View File

@ -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

View File

@ -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"

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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 <br /><br />"
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

View File

@ -11,7 +11,7 @@
<tr>
<td id="cur_grafana_ver" class="padding10 first-collumn">
{% if grafana == "active" %}
Grafana and Prometheus servers have already installed
Grafana and Prometheus servers have benn installed
{% else %}
There are no Grafana and Prometheus servers
{% endif %}
@ -35,17 +35,20 @@
<caption><h3>Install HAProxy Exporter</h3></caption>
<tr class="overviewHead">
<td class="padding10 first-collumn">Current installation</td>
<td class="padding10 first-collumn" style="width: 40%;">Available Versions</td>
<td class="padding10 first-collumn" style="width: 30%;">Available Versions</td>
<td class="help_cursor" style="width: 20%;" title="This exporter will be used by an external Prometheus. Also use this checkbox if you update the Exporter">External Prometheus</td>
<td class="padding10 first-collumn" style="width: 30%;">Server</td>
<td></td>
<td></td>
</tr>
<tr>
<td id="cur_haproxy_exp_ver" class="padding10 first-collumn">
</td>
<td id="cur_haproxy_exp_ver" class="padding10 first-collumn"></td>
<td class="padding10 first-collumn" style="width: 20%;">
Roxy-WI will try to install the latest HAProxy Exporter version
{% set values = dict() %}
{% set values = {'0.7.0':'0.7.0','0.7.1':'0.7.1', '0.8.0':'0.8.0', '0.9.0':'0.9.0', '0.10.0':'0.10.0',
'0.11.0':'0.11.0', '0.12.0':'0.12.0', '0.13.0':'0.13.0'} %}
{{ select('hapexpver', values=values, selected='0.13.0') }}
</td>
<td style="padding-left: 50px;">{{ checkbox('haproxy_ext_prom', title="This exporter will be used by an external Prometheus. Also use this checkbox if you update the Exporter") }}</td>
<td class="padding10 first-collumn">
<select autofocus required name="haproxy_exp_addserv" id="haproxy_exp_addserv">
<option disabled selected>------</option>
@ -54,8 +57,6 @@
{% endfor %}
</select>
</td>
<td>
</td>
<td>
<span class="ui-button ui-widget ui-corner-all" id="haproxy_exp_install" title="Install HAProxy Exporter">Install</span>
</td>
@ -65,17 +66,20 @@
<caption><h3>Install Nginx Exporter</h3></caption>
<tr class="overviewHead">
<td class="padding10 first-collumn">Current installation</td>
<td class="padding10 first-collumn" style="width: 40%;">Available Versions</td>
<td class="padding10 first-collumn" style="width: 30%;">Available Versions</td>
<td class="help_cursor" style="width: 20%;" title="This exporter will be used by an external Prometheus. Also use this checkbox if you update the Exporter">External Prometheus</td>
<td class="padding10 first-collumn" style="width: 30%;">Server</td>
<td></td>
<td></td>
</tr>
<tr>
<td id="cur_nginx_exp_ver" class="padding10 first-collumn">
</td>
<td id="cur_nginx_exp_ver" class="padding10 first-collumn"></td>
<td class="padding10 first-collumn" style="width: 20%;">
Roxy-WI will try to install the latest Nginx Exporter version
{% set values = dict() %}
{% set values = {'0.5.0':'0.5.0', '0.6.0':'0.6.0', '0.7.0':'0.7.0', '0.9.0':'0.9.0'} %}
{{ select('nginxexpver', values=values, selected='0.9.0') }}
</td>
<td style="padding-left: 53px;">{{ checkbox('nginx_ext_prom', title="This exporter will be used by an external Prometheus. Also use this checkbox if you update the Exporter") }}</td>
<td class="padding10 first-collumn">
<select autofocus required name="nginx_exp_addserv" id="nginx_exp_addserv">
<option disabled selected>------</option>
@ -84,8 +88,6 @@
{% endfor %}
</select>
</td>
<td>
</td>
<td>
<span class="ui-button ui-widget ui-corner-all" id="nginx_exp_install" title="Install Nginx Exporter">Install</span>
</td>
@ -95,17 +97,21 @@
<caption><h3>Install Node Exporter</h3></caption>
<tr class="overviewHead">
<td class="padding10 first-collumn">Current installation</td>
<td class="padding10 first-collumn" style="width: 40%;">Available Versions</td>
<td class="padding10 first-collumn" style="width: 30%;">Available Versions</td>
<td class="help_cursor" style="width: 20%;" title="This exporter will be used by an external Prometheus. Also use this checkbox if you update the Exporter">External Prometheus</td>
<td class="padding10 first-collumn" style="width: 30%;">Server</td>
<td></td>
<td></td>
</tr>
<tr>
<td id="cur_node_exp_ver" class="padding10 first-collumn">
</td>
<td id="cur_node_exp_ver" class="padding10 first-collumn"></td>
<td class="padding10 first-collumn" style="width: 20%;">
Roxy-WI will try to install the latest Node Exporter version
{% set values = dict() %}
{% set values = {'1.0.0':'1.0.0','1.1.0':'1.1.0', '1.1.1':'1.1.1', '1.1.2':'1.1.2', '1.2.0':'1.2.0',
'1.2.2':'1.2.2', '1.3.0':'1.3.0'} %}
{{ select('nodeexpver', values=values, selected='1.3.0') }}
</td>
<td style="padding-left: 53px;">{{ checkbox('node_ext_prom', title="This exporter will be used by an external Prometheus. Also use this checkbox if you update the Exporter") }}</td>
<td class="padding10 first-collumn">
<select autofocus required name="node_exp_addserv" id="node_exp_addserv">
<option disabled selected>------</option>
@ -114,11 +120,13 @@
{% endfor %}
</select>
</td>
<td>
</td>
<td>
<span class="ui-button ui-widget ui-corner-all" id="node_exp_install" title="Install Node Exporter">Install</span>
</td>
</tr>
</table>
<div id="ajaxmon"></div>
<div class="add-note alert addName alert-info" style="width: inherit; margin-right: 15px;">
Read <a href="https://roxy-wi.org/services.py?service=grafana" title="About Grafana and Prometheus servers" target="_blank">About Grafana and Prometheus servers</a>
and <a href="https://roxy-wi.org/howto.py?howto=exporters" title="About Exporters" target="_blank">About Exporters</a>
</div>

View File

@ -59,8 +59,8 @@
{% set values = {'2.0.5-1':'2.0.5-1','2.0.6-1':'2.0.6-1', '2.0.7-1':'2.0.7-1', '2.0.9-1':'2.0.9-1',
'2.0.11-1':'2.0.11-1', '2.0.12-1':'2.0.12-1', '2.0.13-1':'2.0.13-1', '2.0.14-1':'2.0.14-1',
'2.0.17-1':'2.0.17-1','2.0.18-1':'2.0.18-1','2.2.4-1':'2.2.4-1','2.3.0-1':'2.3.0-1','2.3.10-1':'2.3.10-1',
'2.4.0-1':'2.4.0-1'} %}
{{ select('hapver', values=values, selected='2.4.0-1', required='required') }}
'2.4.0-1':'2.4.0-1','2.4.9-1':'2.4.9-1'} %}
{{ select('hapver', values=values, selected='2.4.9-1', required='required') }}
</td>
<td class="padding10 first-collumn">
<select autofocus required name="haproxyaddserv" id="haproxyaddserv">

View File

@ -146,7 +146,7 @@ pre {
}
#logo_footer {
float: left;
margin-left: 37%;
margin-left: 41%;
}
#logo_footer_img {
width: 35px;

View File

@ -165,10 +165,16 @@ $( function() {
$('#haproxy_exp_install').click(function() {
$("#ajaxmon").html('')
$("#ajaxmon").html(wait_mess);
var ext_prom = 0;
if ($('#haproxy_ext_prom').is(':checked')) {
ext_prom = '1';
}
$.ajax( {
url: "options.py",
data: {
haproxy_exp_install: $('#haproxy_exp_addserv').val(),
exporter_v: $('#hapexpver').val(),
ext_prom: ext_prom,
token: $('#token').val()
},
type: "POST",
@ -196,10 +202,16 @@ $( function() {
$('#nginx_exp_install').click(function() {
$("#ajaxmon").html('')
$("#ajaxmon").html(wait_mess);
var ext_prom = 0;
if ($('#haproxy_ext_prom').is(':checked')) {
ext_prom = '1';
}
$.ajax( {
url: "options.py",
data: {
nginx_exp_install: $('#nginx_exp_addserv').val(),
exporter_v: $('#nginxexpver').val(),
ext_prom: ext_prom,
token: $('#token').val()
},
type: "POST",
@ -226,10 +238,16 @@ $( function() {
$('#node_exp_install').click(function() {
$("#ajaxmon").html('')
$("#ajaxmon").html(wait_mess);
var ext_prom = 0;
if ($('#haproxy_ext_prom').is(':checked')) {
ext_prom = '1';
}
$.ajax( {
url: "options.py",
data: {
node_exp_install: $('#node_exp_addserv').val(),
exporter_v: $('#nodeexpver').val(),
ext_prom: ext_prom,
token: $('#token').val()
},
type: "POST",
@ -313,14 +331,14 @@ $( function() {
type: "POST",
success: function( data ) {
data = data.replace(/^\s+|\s+$/g,'');
if(data == 'active') {
$('#cur_haproxy_exp_ver').text('HAProxy exporter is installed');
$('#haproxy_exp_install').text('Update');
$('#haproxy_exp_install').attr('title', 'Update HAProxy exporter');
if (data.indexOf('error:') != '-1') {
toastr.clear();
toastr.error(data);
} else if(data == 'no') {
$('#cur_haproxy_exp_ver').text('HAProxy exporter has been not installed');
} else {
$('#cur_haproxy_exp_ver').text('HAProxy exporter has not installed');
$('#haproxy_exp_install').text('Install');
$('#haproxy_exp_install').attr('title', 'Install HAProxy exporter');
$('#cur_haproxy_exp_ver').text(data);
$('#cur_haproxy_exp_ver').css('font-weight', 'bold');
}
}
} );
@ -336,14 +354,14 @@ $( function() {
type: "POST",
success: function( data ) {
data = data.replace(/^\s+|\s+$/g,'');
if(data == 'active') {
$('#cur_nginx_exp_ver').text('Nginx exporter is installed');
$('#nginx_exp_install').text('Update');
$('#nginx_exp_install').attr('title', 'Update Nginx exporter');
if (data.indexOf('error:') != '-1') {
toastr.clear();
toastr.error(data);
} else if(data == 'no') {
$('#cur_nginx_exp_ver').text('Nginx exporter has not been installed');
} else {
$('#cur_nginx_exp_ver').text('Nginx exporter has not installed');
$('#nginx_exp_install').text('Install');
$('#nginx_exp_install').attr('title', 'Install Nginx exporter');
$('#cur_nginx_exp_ver').text(data);
$('#cur_nginx_exp_ver').css('font-weight', 'bold');
}
}
} );
@ -359,14 +377,14 @@ $( function() {
type: "POST",
success: function( data ) {
data = data.replace(/^\s+|\s+$/g,'');
if(data == 'active') {
$('#cur_node_exp_ver').text('Node exporter is installed');
$('#node_exp_install').text('Update');
$('#node_exp_install').attr('title', 'Update Node exporter');
if (data.indexOf('error:') != '-1') {
toastr.clear();
toastr.error(data);
} else if(data == 'no') {
$('#cur_node_exp_ver').text('Node exporter has not been installed');
} else {
$('#cur_node_exp_ver').text('Node exporter has not installed');
$('#node_exp_install').text('Install');
$('#node_exp_install').attr('title', 'Install Node exporter');
$('#cur_node_exp_ver').text(data);
$('#cur_node_exp_ver').css('font-weight', 'bold');
}
}
} );