--- - name: provision node exporters hosts: - server - vms - container vars: package_names: OpenBSD: node_exporter Debian: prometheus-node-exporter tasks: - name: install node exporter package: name: "{{ package_names[ansible_distribution] }}" - name: start and enable node_exporter service: name: "{{ package_names[ansible_distribution] }}" state: started enabled: yes - name: provision blackbox exporters hosts: - mon-e2e-clients01 - monitoring01 tasks: - name: install blackbox exporter package: name: prometheus-blackbox-exporter - name: add net raw capability to blackbox exporter capabilities: path: /usr/bin/prometheus-blackbox-exporter capability: cap_net_raw+ep notify: - restart blackbox-exporter - name: configure blackbox-exporter copy: src: files/blackbox.yml dest: /etc/prometheus/blackbox.yml owner: root group: root mode: 0644 validate: "prometheus-blackbox-exporter --config.file='%s' --config.check" notify: - restart blackbox-exporter handlers: - name: restart blackbox-exporter service: name: prometheus-blackbox-exporter state: restarted - name: provision monitoring hosts: - monitoring01 tasks: - name: install playbook requirements package: name: - gpg - name: install prometheus stack package: name: - prometheus - prometheus-alertmanager # stolen from usr/share/prometheus/alertmanager/generate-ui.sh # script calls apt without "-y" therefore we need to install them beforehand - name: install dependencies for alertmanager ui generation package: name: - libjs-bootstrap4 - fonts-font-awesome - curl - uglifyjs - golang-github-prometheus-alertmanager-dev - name: configure alertmanager template: src: templates/alertmanager.yml.j2 dest: /etc/prometheus/alertmanager.yml validate: "/usr/bin/amtool check-config %s" notify: - reload prometheus-alertmanager - name: generate alertmanager ui shell: cmd: /usr/share/prometheus/alertmanager/generate-ui.sh creates: "/usr/share/prometheus/alertmanager/ui/index.html" notify: - restart prometheus-alertmanager - name: configure prometheus alerting rules copy: src: files/alerting_rules.yml dest: /etc/prometheus/alerting_rules.yml owner: root group: root mode: 0644 validate: "/usr/bin/promtool check rules %s" notify: - reload prometheus - name: configure prometheus template: src: templates/prometheus.yml dest: /etc/prometheus/prometheus.yml validate: "/usr/bin/promtool check config %s" notify: - reload prometheus - name: add grafana oss repo gpg key apt_key: url: "https://packages.grafana.com/gpg.key" id: "4E40DDF6D76E284A4A6780E48C8C34C524098CB6" - name: add grafana oss repo apt_repository: repo: "deb https://packages.grafana.com/oss/deb stable main" - name: install grafana oss package: name: grafana - name: enable and start grafana service: name: grafana-server state: started enabled: yes - name: enable anonymous login in grafana blockinfile: path: /etc/grafana/grafana.ini block: | [auth.anonymous] enabled = true org_role = Viewer notify: - restart grafana - name: template grafana datasource provisioning template: src: "{{ item }}" dest: /etc/grafana/provisioning/datasources/ owner: root group: grafana mode: 0640 with_fileglob: - "templates/grafana/provisioning/datasources/*" notify: - restart grafana - name: create /etc/grafana/dashboards file: path: /etc/grafana/dashboards state: directory owner: root group: grafana mode: 0755 - name: install dashboards copy: src: "{{ item }}" dest: /etc/grafana/dashboards/ owner: root group: grafana mode: 0640 with_fileglob: - "templates/grafana/dashboards/*" - name: template grafana dashboard provisioning copy: src: "{{ item }}" dest: /etc/grafana/provisioning/dashboards/ owner: root group: grafana mode: 0644 with_fileglob: - "templates/grafana/provisioning/dashboards/*" notify: - restart grafana handlers: - name: reload prometheus service: name: prometheus state: reloaded - name: reload prometheus-alertmanager service: name: prometheus-alertmanager state: reloaded - name: restart prometheus-alertmanager service: name: prometheus-alertmanager state: restarted - name: restart grafana service: name: grafana-server state: restarted