diff --git a/ansible/cluster.yml b/ansible/cluster.yml index 1e05580a08dd53722fb06fc2ba22de631c77f785..9664bf9e22996377bec93b4d4eb4155830a1d0d7 100644 --- a/ansible/cluster.yml +++ b/ansible/cluster.yml @@ -13,3 +13,4 @@ - { name: 'rsyslog_config', tags: 'rsyslog_config', when: enable_rsyslog_config } - { name: 'rewrite_map', tags: 'rewrite_map', when: enable_rewrite_map } - { name: 'fail2ban', tags: 'fail2ban', when: enable_fail2ban } + - { name: 'install_node_exporter', tags: 'install_node_exporter', when: enable_node_exporter } diff --git a/ansible/group_vars/all b/ansible/group_vars/all index b980d46bf5ce38a707e76ee57e60b2a7a51b1d9c..7cea2c9ad163e7e72fabc5b29ecbc667a482185a 100644 --- a/ansible/group_vars/all +++ b/ansible/group_vars/all @@ -81,3 +81,11 @@ findtime: 600 bantime: 1200 fail2ban_white_list: "127.0.0.1/8" + +# Node Exporter + enable_node_exporter: false + node_exporter_ver: "1.8.2" + node_exporter_filename: "node_exporter-{{ node_exporter_ver }}.linux-amd64" + node_exporter_user: node_exporter + node_exporter_group: node_exporter + node_exporter_port: 9100 diff --git a/ansible/roles/install_node_exporter/tasks/main.yaml b/ansible/roles/install_node_exporter/tasks/main.yaml new file mode 100644 index 0000000000000000000000000000000000000000..3bee4a737d298234cb23f10d104dc646f5bba070 --- /dev/null +++ b/ansible/roles/install_node_exporter/tasks/main.yaml @@ -0,0 +1,60 @@ +--- +- name: Download node_exporter binary + ansible.builtin.get_url: + url: "https://github.com/prometheus/node_exporter/releases/download/v{{ node_exporter_ver }}/{{ node_exporter_filename }}.tar.gz" + dest: "/tmp/{{ node_exporter_filename }}.tar.gz" + +- name: Extract node_exporter + ansible.builtin.unarchive: + src: "/tmp/{{ node_exporter_filename }}.tar.gz" + dest: "/tmp" + remote_src: yes + +- name: Create system group for user account {{ node_exporter_group }} + ansible.builtin.group: + name: "{{ node_exporter_group }}" + system: true + state: present + +- name: Create system user account {{ node_exporter_user }} + ansible.builtin.user: + name: "{{ node_exporter_user }}" + comment: Prometheus node_exporter system account + group: "{{ node_exporter_group }}" + system: true + home: /var/lib/node_exporter + create_home: false + shell: /sbin/nologin + state: present + +- name: Copy node_exporter binary + ansible.builtin.copy: + src: "/tmp/{{ node_exporter_filename }}/node_exporter" + dest: /usr/local/bin/node_exporter + remote_src: yes + owner: root + group: root + mode: 0755 + +- name: Copy systemd unit file + ansible.builtin.template: + src: node_exporter.service.j2 + dest: /etc/systemd/system/node_exporter.service + owner: root + group: root + mode: '0644' + +- name: Clean up /tmp + ansible.builtin.file: + path: "/tmp/{{ item }}" + state: absent + loop: + - "{{ node_exporter_filename }}.tar.gz" + - "{{ node_exporter_filename }}" + +- name: Restart node_exporter service + ansible.builtin.systemd: + daemon_reload: yes + name: node_exporter + state: restarted + enabled: true diff --git a/ansible/roles/install_node_exporter/templates/node_exporter.service.j2 b/ansible/roles/install_node_exporter/templates/node_exporter.service.j2 new file mode 100644 index 0000000000000000000000000000000000000000..fddb82d9e0f74fe4382ac62e94fbb3a25ddb9dda --- /dev/null +++ b/ansible/roles/install_node_exporter/templates/node_exporter.service.j2 @@ -0,0 +1,12 @@ +[Unit] +Description=Node Exporter +After=network.target + +[Service] +User={{ node_exporter_user }} +Group={{ node_exporter_group }} +Type=simple +ExecStart=/usr/local/bin/node_exporter --web.listen-address=:{{ node_exporter_port }} --collector.filesystem.mount-points-exclude "^/(dev|proc|run/user/.+|run/credentials/.+|sys|var/lib/docker/.+)($|/)" --collector.filesystem.fs-types-exclude "^(autofs|binfmt_misc|bpf|cgroup|tmpfs|sunrpc|cgroup2?|configfs|debugfs|devpts|devtmpfs|fusectl|hugetlbfs|iso9660|mqueue|nsfs|overlay|proc|procfs|pstore|rpc_pipefs|securityfs|selinuxfs|squashfs|sysfs|tracefs)$" + +[Install] +WantedBy=multi-user.target