--- #- name: Use a newer version of Node exporter for ubuntu 20.04 # block: # - name: Set the default release # lineinfile: # path: /etc/apt/apt.conf.d/01-vendor-ubuntu # regexp: '^APT::Default-Release ' # line: "APT::Default-Release \"{{ ansible_facts['lsb']['codename'] }}\";" # - name: Pin node exporter # copy: # dest: /etc/apt/preferences.d/pin-prometheus-node-exporter # content: | # Package: prometheus-node-exporter # Pin: release n={{ ansible_facts['lsb']['codename'] }} # Pin-Priority: -10 # Package: prometheus-node-exporter # Pin: release n=groovy # Pin-Priority: 900 # - name: Add the repo from groovy # apt_repository: # repo: deb http://fr.archive.ubuntu.com/ubuntu groovy universe # state: present # when: ansible_facts['lsb']['id'] == 'Ubuntu' and ansible_facts['lsb']['codename'] == 'focal' - name: Install Prometheus Node exporter apt: name: - prometheus-node-exporter - prometheus-node-exporter-collectors state: latest update_cache: true install_recommends: false # Do not install smartmontools - name: Install the local_x509 exporter import_tasks: local_x509_collector.yml - name: Ensure /etc/node_exporter exist file: path: /etc/node_exporter state: directory group: prometheus owner: prometheus mode: u=rwx,g=rx,o=rx - name: Copy the config folder template: src: config.yaml dest: /etc/node_exporter/config.yaml group: prometheus owner: prometheus mode: u=rw,g=r,o=r notify: Restart prometheus-node-exporter - name: Copy the CA cert copy: content: "{{ ca_cert }}" dest: /etc/node_exporter/ca.crt notify: Restart prometheus-node-exporter - name: Generate certificate include_role: name: generate-cert vars: directory: /etc/node_exporter/ cname: "node-exp-{{ lan_address }}" owner: prometheus group: prometheus key_mode: u=rw,g=,o= subject_alt_name: "IP:{{ lan_address }}" # Need an equivalent to notify here - name: Ensured the certificate is monitored import_tasks: register-cert-to-monitoring.yml vars: target: "{{ lan_address }}:9100|node-exp-{{ lan_address }}|{{ ansible_facts['nodename'] }}" - name: Setup the arguments for node-exporter template: src: prometheus-node-exporter dest: /etc/default/prometheus-node-exporter owner: root group: root mode: u=rw,g=r,o=r notify: Restart prometheus-node-exporter vars: args: - name: web.listen-address value: "{{ lan_address }}:9100" - name: web.config value: /etc/node_exporter/config.yaml - name: Add the node to the server targets block: - name: Get the list of targets of the server slurp: src: /etc/prometheus/targets/node-targets.json register: server_node_target_file delegate_to: "{{ appointed_prometheus_server }}" - name: Set target variable set_fact: server_node_target: "{{ server_node_target_file['content'] | b64decode | from_json }}" - name: Register the node to the prometheus server block: - name: Add the node to the targets set_fact: new_server_node_target: "[{{ server_node_target[0] | combine({'targets': [lan_address + '|' + ansible_facts['nodename']]}, list_merge='append_rp') }}]" - name: Put the new target list copy: content: "{{ new_server_node_target | to_nice_json }}" dest: /etc/prometheus/node-targets.json delegate_to: "{{ appointed_prometheus_server }}" when: (lan_address + '|' + ansible_facts['nodename']) not in server_node_target.0.targets - name: Add alert rules for node on the prometheus server copy: src: alerts-node.yml dest: /etc/prometheus/alerts/node.yml owner: prometheus group: prometheus mode: u=rw,g=r,o=r delegate_to: "{{ appointed_prometheus_server }}" notify: Restart appointed_prometheus_server