mirror of
https://gitlab.com/s3lph/ansible-collection-prometheus
synced 2024-11-22 17:51:01 +01:00
Refactor prometheus_node role, integrate prometheus_node_openbsd with prometheus_node
This commit is contained in:
parent
c6f6440598
commit
27bd6628fb
24 changed files with 110 additions and 146 deletions
|
@ -8,20 +8,11 @@
|
||||||
strategy: free
|
strategy: free
|
||||||
roles:
|
roles:
|
||||||
- s3lph.pki.pki_entity
|
- s3lph.pki.pki_entity
|
||||||
- s3lph.prometheus.prometheus_node
|
|
||||||
|
|
||||||
- hosts: openbsd_node
|
- hosts:
|
||||||
strategy: free
|
- node
|
||||||
roles:
|
- node_https_auth
|
||||||
- s3lph.pki.pki_entity
|
- node_http
|
||||||
- s3lph.prometheus.prometheus_node_openbsd
|
|
||||||
|
|
||||||
- hosts: node_https_auth
|
|
||||||
strategy: free
|
|
||||||
roles:
|
|
||||||
- s3lph.prometheus.prometheus_node
|
|
||||||
|
|
||||||
- hosts: node_http
|
|
||||||
strategy: free
|
strategy: free
|
||||||
roles:
|
roles:
|
||||||
- s3lph.prometheus.prometheus_node
|
- s3lph.prometheus.prometheus_node
|
||||||
|
|
|
@ -8,11 +8,11 @@
|
||||||
daemon_reload: yes
|
daemon_reload: yes
|
||||||
|
|
||||||
- name: restart prometheus-zpool-collector
|
- name: restart prometheus-zpool-collector
|
||||||
ansible.builtin.systemd:
|
ansible.builtin.service:
|
||||||
name: prometheus-node-exporter-zpool.timer
|
name: prometheus-node-exporter-zpool.timer
|
||||||
state: restarted
|
state: restarted
|
||||||
|
|
||||||
- name: restart prometheus-node-exporter
|
- name: restart prometheus-node-exporter
|
||||||
ansible.builtin.systemd:
|
ansible.builtin.service:
|
||||||
name: prometheus-node-exporter.service
|
name: "{{ prometheus_node_service }}"
|
||||||
state: restarted
|
state: restarted
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
|
|
||||||
- name: install collector service
|
- name: install collector service
|
||||||
ansible.builtin.template:
|
ansible.builtin.template:
|
||||||
src: "prometheus-collector.service.j2"
|
src: "etc/systemd/system/prometheus-collector.service.j2"
|
||||||
dest: "/etc/systemd/system/prometheus-node-exporter-{{ item.key }}.service"
|
dest: "/etc/systemd/system/prometheus-node-exporter-{{ item.key }}.service"
|
||||||
owner: root
|
owner: root
|
||||||
group: root
|
group: root
|
||||||
|
@ -33,10 +33,11 @@
|
||||||
loop: "{{ prometheus_textfile_collectors | dict2items }}"
|
loop: "{{ prometheus_textfile_collectors | dict2items }}"
|
||||||
notify:
|
notify:
|
||||||
- systemctl daemon-reload
|
- systemctl daemon-reload
|
||||||
|
when: "ansible_service_mgr == 'systemd'"
|
||||||
|
|
||||||
- name: install collector timer
|
- name: install collector timer
|
||||||
ansible.builtin.template:
|
ansible.builtin.template:
|
||||||
src: "prometheus-collector.timer.j2"
|
src: "etc/systemd/system/prometheus-collector.timer.j2"
|
||||||
dest: "/etc/systemd/system/prometheus-node-exporter-{{ item.key }}.timer"
|
dest: "/etc/systemd/system/prometheus-node-exporter-{{ item.key }}.timer"
|
||||||
owner: root
|
owner: root
|
||||||
group: root
|
group: root
|
||||||
|
@ -44,6 +45,7 @@
|
||||||
loop: "{{ prometheus_textfile_collectors | dict2items }}"
|
loop: "{{ prometheus_textfile_collectors | dict2items }}"
|
||||||
notify:
|
notify:
|
||||||
- systemctl daemon-reload
|
- systemctl daemon-reload
|
||||||
|
when: "ansible_service_mgr == 'systemd'"
|
||||||
|
|
||||||
- name: start and enable collector timer
|
- name: start and enable collector timer
|
||||||
ansible.builtin.systemd:
|
ansible.builtin.systemd:
|
||||||
|
@ -51,3 +53,15 @@
|
||||||
state: started
|
state: started
|
||||||
enabled: yes
|
enabled: yes
|
||||||
loop: "{{ prometheus_textfile_collectors | dict2items }}"
|
loop: "{{ prometheus_textfile_collectors | dict2items }}"
|
||||||
|
when: "ansible_service_mgr == 'systemd'"
|
||||||
|
|
||||||
|
- name: install collector cronjob
|
||||||
|
ansible.builtin.template:
|
||||||
|
src: "etc/cron.d/prometheus-node-exporter.j2"
|
||||||
|
dest: "{{ prometheus_node_crontab }}"
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: 0644
|
||||||
|
vars:
|
||||||
|
collectors: "{{ prometheus_textfile_collector }}"
|
||||||
|
when: "ansible_service_mgr != 'systemd'"
|
||||||
|
|
|
@ -4,26 +4,45 @@
|
||||||
ansible.builtin.file:
|
ansible.builtin.file:
|
||||||
path: /etc/prometheus/node-exporter/tls
|
path: /etc/prometheus/node-exporter/tls
|
||||||
state: directory
|
state: directory
|
||||||
owner: prometheus
|
owner: "{{ prometheus_node_user }}"
|
||||||
group: prometheus
|
group: "{{ prometheus_node_group }}"
|
||||||
mode: 0750
|
mode: 0750
|
||||||
|
|
||||||
- name: render /etc/prometheus/node-exporter/tls/config.yml
|
- name: render /etc/prometheus/node-exporter/tls/config.yml
|
||||||
ansible.builtin.template:
|
ansible.builtin.template:
|
||||||
src: prometheus-node-exporter-webconfig.yml.j2
|
src: etc/prometheus/node-exporter/tls/config.yml.j2
|
||||||
dest: /etc/prometheus/node-exporter/tls/config.yml
|
dest: /etc/prometheus/node-exporter/tls/config.yml
|
||||||
owner: prometheus
|
owner: "{{ prometheus_node_user }}"
|
||||||
group: prometheus
|
group: "{{ prometheus_node_group }}"
|
||||||
mode: 0640
|
mode: 0640
|
||||||
notify: restart prometheus-node-exporter
|
notify: restart prometheus-node-exporter
|
||||||
|
|
||||||
- name: render /etc/default/prometheus-node-exporter
|
- name: render /etc/default/prometheus-node-exporter
|
||||||
ansible.builtin.template:
|
ansible.builtin.template:
|
||||||
src: prometheus-node-exporter.default.j2
|
src: etc/default/prometheus-node-exporter.j2
|
||||||
dest: /etc/default/prometheus-node-exporter
|
dest: /etc/default/prometheus-node-exporter
|
||||||
owner: root
|
owner: root
|
||||||
group: prometheus
|
group: "{{ prometheus_node_group }}"
|
||||||
mode: 0640
|
mode: 0640
|
||||||
vars:
|
vars:
|
||||||
args: "{{ prometheus_node_exporter_args }}"
|
args: "{{ prometheus_node_exporter_args }}"
|
||||||
|
when: "ansible_distribution == 'Debian'"
|
||||||
notify: restart prometheus-node-exporter
|
notify: restart prometheus-node-exporter
|
||||||
|
|
||||||
|
- name: start and enable node exporter
|
||||||
|
ansible.builtin.service:
|
||||||
|
name: "{{ prometheus_node_service }}"
|
||||||
|
state: started
|
||||||
|
enabled: yes
|
||||||
|
|
||||||
|
- name: configure node exporter (openbsd)
|
||||||
|
ansible.builtin.lineinfile:
|
||||||
|
path: /etc/rc.conf.local
|
||||||
|
line: >-
|
||||||
|
node_exporter_flags=--collector.textfile.directory={{ prometheus_node_textfile_dir }}
|
||||||
|
{% for k, v in args.items() %}--{{ k }}="{{ v }}" {% endfor %}
|
||||||
|
--web.config=/etc/prometheus/node-exporter/tls/config.yml
|
||||||
|
regexp: ^node_exporter_flags=.*$
|
||||||
|
when: "ansible_distribution == 'OpenBSD'"
|
||||||
|
notify:
|
||||||
|
- restart prometheus-node-exporter
|
||||||
|
|
|
@ -2,12 +2,14 @@
|
||||||
|
|
||||||
- name: install prometheus node exporter
|
- name: install prometheus node exporter
|
||||||
community.general.openbsd_pkg:
|
community.general.openbsd_pkg:
|
||||||
name: node_exporter
|
name:
|
||||||
|
- node_exporter
|
||||||
|
- moreutils
|
||||||
|
|
||||||
- name: create textfile collector directory
|
- name: create textfile collector directory
|
||||||
ansible.builtin.file:
|
ansible.builtin.file:
|
||||||
path: "{{ node_exporter_textfile_dir }}"
|
path: "{{ node_exporter_textfile_dir }}"
|
||||||
state: directory
|
state: directory
|
||||||
owner: root
|
owner: root
|
||||||
group: _nodeexporter
|
group: "{{ prometheus_node_group }}"
|
||||||
mode: 0750
|
mode: 0750
|
|
@ -1,30 +1,30 @@
|
||||||
---
|
---
|
||||||
|
|
||||||
- name: install node exporter on debian buster
|
- name: include os specific vars
|
||||||
import_tasks: debian10.yml
|
include_vars: "{{ item }}.yml"
|
||||||
when:
|
with_first_found:
|
||||||
- "ansible_lsb.id == 'Debian' or ansible_lsb.id == 'Raspbian'"
|
- "{% if 'id' in ansible_lsb %}{{ ansible_lsb.id }}{% else %}{% ansible_distribution %}_{% if 'major_release' in ansible_lsb %}{{ ansible_lsb.major_release }}{% else %}{{ ansible_distribution_version}} {% endif %}"
|
||||||
- "ansible_lsb.major_release | int == 10"
|
- "{% if 'id' in ansible_lsb %}{{ ansible_lsb.id }}{% else %}{{ ansible_distribution }}{% endif %}"
|
||||||
|
- "{{ ansible_distribution }}_{{ ansible_distribution_version }}"
|
||||||
|
- "{{ ansible_distribution }}"
|
||||||
|
- "default"
|
||||||
tags:
|
tags:
|
||||||
- "role::prometheus_node"
|
- "role::prometheus_node"
|
||||||
- "role::prometheus_node:debian"
|
- "role::prometheus_node:install"
|
||||||
|
- "role::prometheus_node:collectors"
|
||||||
|
- "role::prometheus_node:config"
|
||||||
|
|
||||||
- name: install node exporter on debian bullseye and later
|
- name: install node exporter
|
||||||
import_tasks: debian11.yml
|
import_tasks: "install/{{ item }}.yml"
|
||||||
when:
|
with_first_found:
|
||||||
- "ansible_lsb.id == 'Debian' or ansible_lsb.id == 'Raspbian'"
|
- "{% if 'id' in ansible_lsb %}{{ ansible_lsb.id }}{% else %}{% ansible_distribution %}_{% if 'major_release' in ansible_lsb %}{{ ansible_lsb.major_release }}{% else %}{{ ansible_distribution_version}} {% endif %}"
|
||||||
- "ansible_lsb.major_release | int >= 11"
|
- "{% if 'id' in ansible_lsb %}{{ ansible_lsb.id }}{% else %}{{ ansible_distribution }}{% endif %}"
|
||||||
|
- "{{ ansible_distribution }}_{{ ansible_distribution_version }}"
|
||||||
|
- "{{ ansible_distribution }}"
|
||||||
tags:
|
tags:
|
||||||
- "role::prometheus_node"
|
- "role::prometheus_node"
|
||||||
- "role::prometheus_node:debian"
|
- "role::prometheus_node:install"
|
||||||
|
|
||||||
- name: install node exporter on univention corporate server
|
|
||||||
import_tasks: ucs.yml
|
|
||||||
when:
|
|
||||||
- "ansible_lsb.id == 'Univention'"
|
|
||||||
tags:
|
|
||||||
- "role::prometheus_node"
|
|
||||||
- "role::prometheus_node:univention"
|
|
||||||
|
|
||||||
- name: install custom textfile collectors
|
- name: install custom textfile collectors
|
||||||
import_tasks: collectors.yml
|
import_tasks: collectors.yml
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
{{ ansible_managed | comment }}
|
||||||
|
|
||||||
|
{% for name, job in collectors.items() %}
|
||||||
|
# {{ name }}
|
||||||
|
{{ job.cronexpr }} {{ prometheus_node_crontab_system_user | default('') }} /bin/sh -c "/usr/local/bin/{{ job.template_base_name | default('prometheus-node-exporter-' + name + '.sh') }}" | sponge /var/lib/prometheus/node-exporter/{{ name }}.prom
|
||||||
|
|
||||||
|
{% endfor %}
|
10
roles/prometheus_node/vars/Debian.yml
Normal file
10
roles/prometheus_node/vars/Debian.yml
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
---
|
||||||
|
|
||||||
|
prometheus_node_user: prometheus
|
||||||
|
prometheus_node_group: prometheus
|
||||||
|
prometheus_node_service: prometheus-node-exporter
|
||||||
|
|
||||||
|
prometheus_node_crontab: /etc/cron.d/prometheus-node-exporter
|
||||||
|
prometheus_node_crontab_system_user: root
|
||||||
|
|
||||||
|
prometheus_node_textfile_dir: /var/lib/prometheus/node-exporter
|
10
roles/prometheus_node/vars/OpenBSD.yml
Normal file
10
roles/prometheus_node/vars/OpenBSD.yml
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
---
|
||||||
|
|
||||||
|
prometheus_node_user: _nodeexporter
|
||||||
|
prometheus_node_group: _nodeexporter
|
||||||
|
prometheus_node_service: nodeexporter
|
||||||
|
|
||||||
|
prometheus_node_crontab: /etc/crontab
|
||||||
|
prometheus_node_crontab_system_user: root
|
||||||
|
|
||||||
|
prometheus_node_textfile_dir: /var/node_exporter
|
10
roles/prometheus_node/vars/default.yml
Normal file
10
roles/prometheus_node/vars/default.yml
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
---
|
||||||
|
|
||||||
|
prometheus_node_user: prometheus
|
||||||
|
prometheus_node_group: prometheus
|
||||||
|
prometheus_node_service: prometheus-node-exporter
|
||||||
|
|
||||||
|
prometheus_node_crontab: /etc/cron.d/prometheus-node-exporter
|
||||||
|
prometheus_node_crontab_system_user: root
|
||||||
|
|
||||||
|
prometheus_node_textfile_dir: /var/lib/prometheus/node-exporter
|
|
@ -1,4 +0,0 @@
|
||||||
---
|
|
||||||
|
|
||||||
node_exporter_textfile_dir: /var/node_exporter
|
|
||||||
node_exporter_flags: ""
|
|
|
@ -1,7 +0,0 @@
|
||||||
---
|
|
||||||
|
|
||||||
- name: start node exporter
|
|
||||||
ansible.builtin.command: /usr/sbin/rcctl start node_exporter
|
|
||||||
|
|
||||||
- name: restart node exporter
|
|
||||||
ansible.builtin.command: /usr/sbin/rcctl restart node_exporter
|
|
|
@ -1,30 +0,0 @@
|
||||||
---
|
|
||||||
|
|
||||||
- name: create /etc/prometheus/node-exporter/tls
|
|
||||||
ansible.builtin.file:
|
|
||||||
path: /etc/prometheus/node-exporter/tls
|
|
||||||
state: directory
|
|
||||||
owner: _nodeexporter
|
|
||||||
group: _nodeexporter
|
|
||||||
mode: 0750
|
|
||||||
|
|
||||||
- name: render /etc/prometheus/node-exporter/tls/config.yml
|
|
||||||
ansible.builtin.template:
|
|
||||||
src: prometheus-node-exporter-webconfig.yml.j2
|
|
||||||
dest: /etc/prometheus/node-exporter/tls/config.yml
|
|
||||||
owner: _nodeexporter
|
|
||||||
group: _nodeexporter
|
|
||||||
mode: 0640
|
|
||||||
notify: restart node exporter
|
|
||||||
|
|
||||||
- name: configure node exporter
|
|
||||||
ansible.builtin.lineinfile:
|
|
||||||
path: /etc/rc.conf.local
|
|
||||||
line: >-
|
|
||||||
node_exporter_flags=--collector.textfile.directory={{ node_exporter_textfile_dir }}
|
|
||||||
{{ node_exporter_flags }}
|
|
||||||
--web.config=/etc/prometheus/node-exporter/tls/config.yml
|
|
||||||
regexp: ^node_exporter_flags=.*$
|
|
||||||
notify:
|
|
||||||
- start node exporter
|
|
||||||
- restart node exporter
|
|
|
@ -1,19 +0,0 @@
|
||||||
---
|
|
||||||
|
|
||||||
- name: install prometheus node exporter
|
|
||||||
import_tasks: install.yml
|
|
||||||
tags:
|
|
||||||
- 'role::prometheus_node_openbsd'
|
|
||||||
- 'role::prometheus_node_openbsd:install'
|
|
||||||
|
|
||||||
- name: install syspatch check
|
|
||||||
import_tasks: syspatch.yml
|
|
||||||
tags:
|
|
||||||
- 'role::prometheus_node_openbsd'
|
|
||||||
- 'role::prometheus_node_openbsd:syspatch'
|
|
||||||
|
|
||||||
- name: configure prometheus node exporter
|
|
||||||
import_tasks: config.yml
|
|
||||||
tags:
|
|
||||||
- "role::prometheus_node_openbsd"
|
|
||||||
- "role::prometheus_node_openbsd:config"
|
|
|
@ -1,15 +0,0 @@
|
||||||
---
|
|
||||||
|
|
||||||
- name: create syspatch check script
|
|
||||||
ansible.builtin.template:
|
|
||||||
src: syspatch.sh.j2
|
|
||||||
dest: /usr/local/bin/prometheus-node-exporter-syspatch.sh
|
|
||||||
owner: root
|
|
||||||
group: bin
|
|
||||||
mode: 0755
|
|
||||||
|
|
||||||
- name: register syspatch check script in cron
|
|
||||||
ansible.builtin.lineinfile:
|
|
||||||
path: /etc/daily.local
|
|
||||||
regexp: '^/usr/local/bin/prometheus-node-exporter-syspatch.sh$'
|
|
||||||
line: '/usr/local/bin/prometheus-node-exporter-syspatch.sh'
|
|
|
@ -1,8 +0,0 @@
|
||||||
---
|
|
||||||
{{ ansible_managed | comment }}
|
|
||||||
|
|
||||||
tls_server_config:
|
|
||||||
cert_file: "{{ prometheus_node_tls_cert }}"
|
|
||||||
key_file: "{{ prometheus_node_tls_key }}"
|
|
||||||
client_auth_type: "{{ prometheus_node_tls_require_cert | ternary('RequireAndVerifyClientCert', 'NoClientCert') }}"
|
|
||||||
client_ca_file: "{{ prometheus_node_tls_ca }}"
|
|
|
@ -1,16 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
{{ ansible_managed | comment}}
|
|
||||||
|
|
||||||
N_PATCHES="$(/usr/sbin/syspatch -c | wc -l)"
|
|
||||||
TMPFILE="$(/usr/bin/mktemp /tmp/prometheus-node-exporter-syspatch.XXXXXX)"
|
|
||||||
|
|
||||||
/bin/cat > "${TMPFILE}" <<EOF
|
|
||||||
# TYPE syspatch_upgrades_pending gauge
|
|
||||||
# HELP syspatch_upgrades_pending Number of available system patches
|
|
||||||
syspatch_upgrades_pending ${N_PATCHES}
|
|
||||||
EOF
|
|
||||||
|
|
||||||
/sbin/chown _nodeexporter:_nodeexporter "${TMPFILE}"
|
|
||||||
/bin/chmod 0640 "${TMPFILE}"
|
|
||||||
# Atomic move
|
|
||||||
/bin/mv "$TMPFILE" "{{ node_exporter_textfile_dir }}/syspatch.prom"
|
|
Loading…
Reference in a new issue