commit 29ac79f084a785287fe15ed3b794df7e83de1ae9
parent 677321eb08fd363d438c3db3499b93db872394e7
Author: Paco Esteban <paco@e1e0.net>
Date: Fri, 20 Dec 2019 20:22:05 +0100
add node exporter role (incomplete!)
Diffstat:
6 files changed, 161 insertions(+), 0 deletions(-)
diff --git a/localutils.yml b/localutils.yml
@@ -5,3 +5,4 @@
become: yes
roles:
- upsc_exporter
+ - node-exporter
diff --git a/roles/node-exporter/defaults/main.yml b/roles/node-exporter/defaults/main.yml
@@ -0,0 +1,16 @@
+---
+node_exporter_version: "0.18.1"
+
+node_exporter_system_user: "node_exporter"
+node_exporter_system_group: "{{ node_exporter_system_user }}"
+
+node_exporter_web_listen_address: "0.0.0.0:9100"
+
+node_exporter_enabled_collectors: []
+# - systemd
+# - textfile:
+# directory: "/var/lib/node_exporter"
+# - filesystem:
+# ignored-mount-points: "^/(sys|proc|dev)($|/)"
+# ignored-fs-types: "^(sys|proc|auto)fs$"
+node_exporter_disabled_collectors: []
diff --git a/roles/node-exporter/files/node_exporter.service.j2 b/roles/node-exporter/files/node_exporter.service.j2
@@ -0,0 +1,34 @@
+{{ ansible_managed | comment }}
+
+[Unit]
+Description=Prometheus Node Exporter
+After=network-online.target
+StartLimitInterval=0
+
+[Service]
+Type=simple
+User={{ node_exporter_system_user }}
+Group={{ node_exporter_system_group }}
+ExecStart=/opt/bin/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 }} \
+{% endfor -%}
+{% endif -%}
+{% endfor -%}
+{% for collector in node_exporter_disabled_collectors %}
+ --no-collector.{{ collector }} \
+{% endfor %}
+ --web.listen-address={{ node_exporter_web_listen_address }}
+
+SyslogIdentifier=node_exporter
+Restart=always
+RestartSec=1
+
+[Install]
+WantedBy=multi-user.target
diff --git a/roles/node-exporter/handlers/main.yml b/roles/node-exporter/handlers/main.yml
@@ -0,0 +1,7 @@
+---
+- name: restart node_exporter
+ systemd:
+ daemon_reload: true
+ name: node_exporter
+ state: restarted
+ when: go_os == "linux"
diff --git a/roles/node-exporter/tasks/main.yml b/roles/node-exporter/tasks/main.yml
@@ -0,0 +1,92 @@
+---
+- 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"
+
+- name: create opt/bin
+ file:
+ name: /opt/bin
+ state: directory
+ owner: root
+ group: root
+ mode: '0755'
+
+- 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:
+ - "( go_os + '-' + go_arch + '.tar.gz') in item"
+
+- name: Download node_exporter tarball
+ get_url:
+ url: "https://github.com/prometheus/node_exporter/releases/download/v{{ node_exporter_version }}/node_exporter-{{ node_exporter_version }}.{{ go_os }}-{{ go_arch }}.tar.gz"
+ dest: "/tmp/node_exporter-{{ node_exporter_version }}.{{ go_os }}-{{ go_arch }}.tar.gz"
+ checksum: "sha256:{{ node_exporter_checksum }}"
+ mode: '0755'
+ owner: root
+ group: root
+ register: _download_binary
+ until: _download_binary is succeeded
+ retries: 5
+ delay: 2
+
+- name: Unpack node_exporter tarball
+ unarchive:
+ remote_src: yes
+ src: "/tmp/node_exporter-{{ node_exporter_version }}.{{ go_os }}-{{ go_arch }}.tar.gz"
+ dest: "/tmp"
+ creates: "/tmp/node_exporter-{{ node_exporter_version }}.{{ go_os }}-{{ go_arch }}/node_exporter"
+
+- name: Propagate node_exporter binaries
+ copy:
+ remote_src: yes
+ src: "/tmp/node_exporter-{{ node_exporter_version }}.{{ go_os }}-{{ go_arch }}/node_exporter"
+ dest: "/opt/bin/node_exporter"
+ mode: 0755
+ owner: root
+ group: root
+ notify: restart node_exporter
+
+- name: node_exporter service
+ template:
+ src: files/node_exporter.service.j2
+ dest: /etc/systemd/system/node_exporter.service
+ owner: root
+ group: root
+ mode: '0644'
+ register: node_exporter_unit_file
+ when: go_os == "linux"
+
+- name: reload systemd daemon
+ command: systemctl daemon-reload
+ when:
+ - node_exporter_unit_file.changed
+ - go_os == "linux"
+
+- name: enable and start (linux)
+ service:
+ name: node_exporter
+ enabled: yes
+ state: started
+ when: go_os == "linux"
diff --git a/roles/node-exporter/vars/main.yml b/roles/node-exporter/vars/main.yml
@@ -0,0 +1,11 @@
+---
+go_arch_map:
+ i386: '386'
+ x86_64: 'amd64'
+ aarch64: 'arm64'
+ armv7l: 'armv7'
+ armv6l: 'armv6'
+
+go_arch: "{{ go_arch_map[ansible_architecture] | default(ansible_architecture) }}"
+
+go_os: "{{ ansible_system | lower }}"