diff --git a/README.md b/README.md index 2f5d8a3..1436a5a 100644 --- a/README.md +++ b/README.md @@ -83,6 +83,18 @@ Yet another ansible's playbook repository * generate ed25519 keys for server instead of RSA * configure ssh client to use strong algorithms * will create compatibility problem with old ssh versions (openwrt, old putty, debian wheezy) +* prometheus_nodexporter : allow configuration for node with prometheus node-exporter + * debian 9 and centos 7 compatible + * You can configure prometheus_exporter_listen_address (default 0.0.0.0) and prometheus_exporter_listen_port (default 9100) + * use file_sd_configs on prometheus server with prometheus_sd_directory (default to /etc/prometheus/nodes/) : +``` + - job_name: 'node' + file_sd_configs: + - files: + - '{{ prometheus_sd_directory }}/*.json' + - '{{ prometheus_sd_directory }}/*.yml' + - '{{ prometheus_sd_directory }}/*.yaml' +``` ## example host file ===== diff --git a/prometheus_nodexporter.yml b/prometheus_nodexporter.yml new file mode 100644 index 0000000..fc4f0c4 --- /dev/null +++ b/prometheus_nodexporter.yml @@ -0,0 +1,8 @@ +--- + +- name: Configure prometheus node to be used with server + hosts: all + user: root + gather_facts: yes + roles: + - prometheus_nodexporter diff --git a/roles/prometheus_nodexporter/defaults/main.yml b/roles/prometheus_nodexporter/defaults/main.yml new file mode 100644 index 0000000..aef1794 --- /dev/null +++ b/roles/prometheus_nodexporter/defaults/main.yml @@ -0,0 +1,5 @@ +--- + +prometheus_exporter_listen_address: "0.0.0.0" +prometheus_exporter_listen_port: "9100" +prometheus_sd_directory: "/etc/prometheus/nodes/" \ No newline at end of file diff --git a/roles/prometheus_nodexporter/handlers/main.yml b/roles/prometheus_nodexporter/handlers/main.yml new file mode 100644 index 0000000..495a05f --- /dev/null +++ b/roles/prometheus_nodexporter/handlers/main.yml @@ -0,0 +1,10 @@ +- name: restart exporter + systemd: state=restarted name= {{ prometheus_exporter_service }} + +- name: enable exporter + systemd: enabled=yes name={{ prometheus_exporter_service }} + +- name: reload server + uri: + url: "http://{{ prometheus_server }}:9090/-/reload" + method: POST \ No newline at end of file diff --git a/roles/prometheus_nodexporter/tasks/centos.yml b/roles/prometheus_nodexporter/tasks/centos.yml new file mode 100644 index 0000000..cd21505 --- /dev/null +++ b/roles/prometheus_nodexporter/tasks/centos.yml @@ -0,0 +1,2 @@ +--- + diff --git a/roles/prometheus_nodexporter/tasks/debian.yml b/roles/prometheus_nodexporter/tasks/debian.yml new file mode 100644 index 0000000..42be228 --- /dev/null +++ b/roles/prometheus_nodexporter/tasks/debian.yml @@ -0,0 +1,9 @@ +--- + +- name: enable exporter on listen address + lineinfile: + path: /etc/default/prometheus-node-exporter + regexp: '^ARGS=(.*) \\' + backrefs: yes + line: 'ARGS=\1 -web.listen-address {{ prometheus_exporter_listen_address }}:{{ prometheus_exporter_listen_port }} \\' + notify: restart exporter \ No newline at end of file diff --git a/roles/prometheus_nodexporter/tasks/main.yml b/roles/prometheus_nodexporter/tasks/main.yml new file mode 100644 index 0000000..d1b61cb --- /dev/null +++ b/roles/prometheus_nodexporter/tasks/main.yml @@ -0,0 +1,33 @@ +--- + +# Role to deploy prometheus node and add them to a prometheus server + +- name: Import OS variables + include_vars: "{{ ansible_os_family }}.yml" + +- name: install node exporter + package: + name: "{{ prometheus_exporter_package }}" + state: latest + notify: enable exporter + +- import_tasks: debian.yml + when: ansible_distribution == 'Debian' or ansible_distribution == 'Ubuntu' +- import_tasks: redhat.yml + when: ansible_distribution == 'CentOS' or ansible_distribution == 'CloudLinux' or ansible_distribution == 'Virtuozzo' + +- name: import discovery file to server + template: + src: sd_file.yml.j2 + dest: "{{ prometheus_sd_directory }}/{{ ansible_nodename }}.yml" + delegate_to: "{{ prometheus_server }}" + +- name: add nodename to server hosts + lineinfile: + path: /etc/hosts + regexp: '{{ prometheus_exporter_listen_address }} {{ ansible_nodename }}' + state: present + line: '{{ prometheus_exporter_listen_address }} {{ ansible_nodename }}' + delegate_to: "{{ prometheus_server }}" + when: prometheus_exporter_listen_address is defined and prometheus_exporter_listen_address != "0.0.0.0" + notify: reload server \ No newline at end of file diff --git a/roles/prometheus_nodexporter/tasks/redhat.yml b/roles/prometheus_nodexporter/tasks/redhat.yml new file mode 100644 index 0000000..e6b559e --- /dev/null +++ b/roles/prometheus_nodexporter/tasks/redhat.yml @@ -0,0 +1,9 @@ +--- + +- name: enable exporter on listen address + lineinfile: + path: /etc/sysconfig/node_exporter + regexp: '^LISTEN_ADDRESS=' + backrefs: yes + line: 'LISTEN_ADDRESS="{{ prometheus_exporter_listen_address }}:{{ prometheus_exporter_listen_port }}"' + notify: restart exporter \ No newline at end of file diff --git a/roles/prometheus_nodexporter/templates/sd_file.yml.j2 b/roles/prometheus_nodexporter/templates/sd_file.yml.j2 new file mode 100644 index 0000000..a118e83 --- /dev/null +++ b/roles/prometheus_nodexporter/templates/sd_file.yml.j2 @@ -0,0 +1,2 @@ +- targets: + - "{{ ansible_nodename }}:{{ prometheus_exporter_listen_port }}" diff --git a/roles/prometheus_nodexporter/vars/Debian.yml b/roles/prometheus_nodexporter/vars/Debian.yml new file mode 100644 index 0000000..fc83696 --- /dev/null +++ b/roles/prometheus_nodexporter/vars/Debian.yml @@ -0,0 +1,6 @@ +--- + +# Prometheus variables for Debian + +prometheus_exporter_package: "prometheus-node-exporter" +prometheus_exporter_service: "prometheus-node-exporter.service" \ No newline at end of file diff --git a/roles/prometheus_nodexporter/vars/RedHat.yml b/roles/prometheus_nodexporter/vars/RedHat.yml new file mode 100644 index 0000000..be0630f --- /dev/null +++ b/roles/prometheus_nodexporter/vars/RedHat.yml @@ -0,0 +1,6 @@ +--- + +# Prometheus variables for RedHat + +prometheus_exporter_package: "prometheus-node_exporter" +prometheus_exporter_service: "node_exporter.service" \ No newline at end of file diff --git a/roles/prometheus_nodexporter/vars/Virtuozzo.yml b/roles/prometheus_nodexporter/vars/Virtuozzo.yml new file mode 120000 index 0000000..f802000 --- /dev/null +++ b/roles/prometheus_nodexporter/vars/Virtuozzo.yml @@ -0,0 +1 @@ +RedHat.yml \ No newline at end of file