Commit dba5886c authored by Jocelyn Delalande's avatar Jocelyn Delalande

munin-master : add new role

parent 97c17edb
Munin-master
============
Voir aussi rôle *munin-node* et *nginx*.
Installe et configure un serveur munin, pour grapher les données d'un ou
plusieurs munin-node.
Dépendances
-----------
Installer dnspython sur votre machine locale
Si vous utilisez ansible dans un virtualenv :
pip install dnspython
Ou si vous utilisez ansible depuis les package Debian :
apt install python-dnspython
Variables
---------
### Obligatoire
- *munin_server_nodes* : la liste des fqdn des munin-nodes à surveiller.
**Ne pas utiliser de caractères spéciaux dans les noms de groupes/hôtes, bien
que ça fonctionne à première vue, ça
[casse la génération dynamique de graphes](https://github.com/munin-monitoring/munin/blob/debian/2.0.33-1_bpo8%2B1/master/_bin/munin-cgi-graph.in#L77-L89).**
Exemple
-------
```
munin_server_nodes:
- fqdn: test.example.com
- fqdn: foo.example.com
```
Il est aussi possible de ranger les nodes dans des (sous)groupes.
```
munin_server_nodes:
- fqdn: test.example.com
group: routeurs;nantes
- fqdn: foo.example.com
group: routeurs;cholet
```
*NB: les groupes sont hiérarchiques, dans l'exemple foo.example.com est dans le
sous-groupe cholet du groupe routeurs, **le marqueur hiérarchique est le « ; »***
Test
----
Munin étant assez pénible à tester, le rôle prend soin de tester votre
configuration (en contactant tous les munin nodes et en leur demandant leurs
données « comme en vrai », puis en affichant les erreurs/warnings si il y en a
eu de produits).
Ce test est lancé automatiquement à la fin du rôle lorsque la liste des
munin-nodes a changé.
munin_server_test_dir: /tmp/munin-ansible-test
munin_server_test_dbdir: "{{ munin_server_test_dir }}/dbdir"
munin_server_test_htmldir: "{{ munin_server_test_dir }}/html"
munin_server_test_logdir: "{{ munin_server_test_dir }}/log"
munin_server_test_rundir: "{{ munin_server_test_dir }}/run"
munin_server_test_conf_path: "{{ munin_server_test_dir }}/munin.conf"
# From https://bugs.debian.org/837788#99
[Unit]
Description=Munin CGI Graph service
After=network.target
Requires=munin-cgi-graph.socket
[Service]
ExecStart=/usr/lib/munin/cgi/munin-cgi-graph
User=www-data
Type=simple
Group=www-data
StandardInput=socket
[Install]
WantedBy=multi-user.target
# From https://bugs.debian.org/837788#99
[Unit]
Description=Munin CGI Graph socket
[Socket]
ListenStream=/var/run/munin/fcgi-graph.sock
Accept=false
[Install]
WantedBy=sockets.target
- name: systemd reload
systemd: daemon_reload=yes
- name: install debian package
apt: name=munin update_cache=yes cache_valid_time=1800
- name: configure monitored munin-nodes
template: src=munin.conf.j2 dest=/etc/munin/munin.conf
register: munin_conf
- name: Install systemd files
copy: src={{ item }} dest=/etc/systemd/system/{{ item }}
notify: systemd reload
with_items:
- munin-cgi-graph.service
- munin-cgi-graph.socket
- meta: flush_handlers
- name: enable and start munin-cgi service
service: name=munin-cgi-graph state=started enabled=yes
- include_tasks: testing.yml
when: munin_conf.changed
- name: Create required test directories
file: path={{ item }} state=directory mode=0700 owner=munin
with_items:
- "{{ munin_server_test_dir }}"
- "{{ munin_server_test_dbdir }}"
- "{{ munin_server_test_htmldir }}"
- "{{ munin_server_test_logdir }}"
- "{{ munin_server_test_rundir }}"
- name: Provision test config file
template:
src: munin-test.conf.j2
dest: "{{ munin_server_test_conf_path }}"
- name: Flush test log file
copy: dest={{ munin_server_test_logdir }}/munin-update.log content="" owner=munin
- name: Test nodes reachability via munin-update
shell: '/usr/share/munin/munin-update --config_file {{ munin_server_test_conf_path }}'
args:
executable: /bin/bash
become: yes
become_user: munin
register: munin_update
changed_when: munin_update.stdout != ''
- name: Checking munin-update log
command: cat {{ munin_server_test_logdir }}/munin-update.log
register: munin_update_log
changed_when: munin_update_log.stdout != ''
- debug:
msg:
- "MUNIN-UPDATE LOG CONTAINS ERRORS !"
- ""
- "Note: that may denote something else than bad server configuration"
- "(eg. network connectivity issue to one of the nodes)"
- ""
- "{{ munin_update_log.stdout.split('\n')[:-1] }}"
when: "'ERROR' in munin_update_log.stdout|default('')"
changed_when: munin_update_log.stdout != ''
- debug:
msg:
- "MUNIN-UPDATE LOG CONTAINS WARNINGS !"
- ""
- "{{ munin_update_log.stdout.split('\n')[:-1] }}"
when:
- "'ERROR' not in munin_update_log.stdout|default('')"
- "'WARNING' not in munin_update_log.stdout|default('')"
changed_when: munin_update_log.stdout != ''
#{{ ansible_managed }}
dbdir {{ munin_server_test_dbdir }}
htmldir {{ munin_server_test_htmldir }}
logdir {{ munin_server_test_logdir }}
rundir {{ munin_server_test_rundir }}
{% for node in munin_server_nodes %}
[{{ node.fqdn }}]
address {{ lookup('dig', node.fqdn) }}
{% endfor %}
#{{ ansible_managed }}
dbdir /var/lib/munin
htmldir /var/cache/munin/www/
logdir /var/log/munin
rundir /var/run/munin
{% for node in munin_server_nodes %}
[{% if node.group|default(None) %}{{ node.group }};{% endif %}{{ node.fqdn }}]
address {{ lookup('dig', node.fqdn) }}
{% endfor %}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment