[Ansible] : comment installer et configurer logrotate ? et trouver un rôle adapté

Print Friendly, PDF & Email

Aujourd’hui, après l’installation ntp (client et serveur), je vous propose l’installation et la configuration de logrotate. Il s’agit donc d’une action de niveau plutôt débutant à réaliser avec ansible. En effet, logrotate est un service facile à mettre en place (souvent déjà installé et bien pris en compte par d’autres services) et surtout car ansible-galaxy regorge de rôles dans ce domaine.

La plus grosse difficulté réside dans le choix du rôle en essayant de trouver celui qui corrrespond le plus à notre besoin. Dans notre cas, on cherche un rôle qui installe logrotate si celui-ci n’est pas déjà installé et qu’il permettent de réaliser la conf par défaut de logrotate et au cas par cas pour différents services que l’on souhaite ajouter.

ansible_logrotate

Avant de commencer, je vous rappelle que j’utilise un réseau de conteneurs docker pour mettre en place mes tests de rôles ansible. Pour en savoir plus c’est ici et c’est super simple.

1. Logrotate

C’est un service basique dans les différents OS linux de base. Logrotate est souvent déjà installé comme c’est le cas sur Debian et sur Redhat.

Sa configuration par défaut se situe dans /etc/logrotate.conf et se résume souvent à :

weekly
su root syslog
rotate 4
create
dateext

# packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own wtmp, or btmp -- we'll rotate them here
/var/log/wtmp {
    missingok
    monthly
    create 0664 root utmp
    rotate 1
}

/var/log/btmp {
    missingok
    monthly
    create 0660 root utmp
    rotate 1
}

Que dire ?

  • weekly : la fréquence de rotation (daily, mais aussi d’autres formats peuvent être utilisés)
  • su root syslog : avec quel user et quel groupe est réalisé l’archivage (important pour les permissions par la suite)
  • rotate 4 : nombre de fichiers de logs conservés
  • create : création d’un nouveau fichier de log après la rotation
Découvrez  Ansible - Comment créer un user et une base mysql ?

De très nombreuses options sont possibles. Elles sont consultables sur la page man de logrotate : mail, action réalisée après rotation, compression…

Par ailleurs, il faut savoir que les services les plus répandus sur Linux ajoutent leur propre configuration dans /etc/logrotate.d/ (apache2, nginx, varnish, postgres…). Le travail est donc généralement simplifié,  ce qui permet de ne pas trop s’inquiéter si vous cherchez un rôle ansible.

2. Le rôle ansible logrotate

Nsou avons vu à peu près ce que nous souhaitions  trouver comme rôle. Après en avoir feuilleté une petite dizaine, j’ai retenu celui-ci : arillso.logrotate

Il réalise ce que j’ai listé ci-dessus (configuration par défaut et ajout possible). Pour toucher à la configuration par défaut il suffit simplement de compléter la variable logrotate_options avec un tableau du type : [ ‘weekly’, ‘su root syslog’, ‘rotate 4’, ‘create’ ].

Sa struture est la suivante :

└─ $ ▶ tree
.
├── defaults
│   └── main.yml
├── handlers
│   └── main.yml
├── LICENSE
├── meta
│   └── main.yml
├── README.md
├── tasks
│   └── main.yml
├── templates
│   ├── application.j2
│   └── logrotate.conf.j2
└── vars
    ├── CentOS.yml
    ├── Debian.yml
    └── defaults.yml

Il s’appuie aussi sur deux fichiers jinja2 un pour la configuration par défaut et un autre pour gérer des configurations par application.

Ainsi pour spécifier une conf particulière pour une machine notre inventory ressemblerait à ceci :

all:
  hosts:
    172.17.0.2:
      logrotate_options: [ 'daily', '', 'rotate 4', 'create' ]
    172.17.0.3:
    172.17.0.4:
    172.17.0.5:

Ainsi on a part défaut : [‘weekly’, ‘su root syslog’, ‘rotate 4’, ‘create’]
et sinon autre chose comme pour la 172.17.0.2.

Mes tests se déroulent sur 4 machines comme pour le test du rôle ntp : 2 debian et 2 redhat (centos).

Découvrez  Ansible, son inventaire... et son organisation

Mon inventory est celui indiqué ci-dessus et mon playbook contient simplement :

---
- name: Lancement roles
  hosts: all
  remote_user: oki
  become: yes

  roles:
  - arillso.logrotate

Lançons tout ceci :

└─ $ ▶ ansible-playbook -i hosts.yml --user=oki playbook-logrotate.yml 

PLAY [Lancement roles] **************************************************************************************************************************************************************************

TASK [Gathering Facts] **************************************************************************************************************************************************************************
ok: [172.17.0.2]
ok: [172.17.0.3]
ok: [172.17.0.4]
ok: [172.17.0.5]

TASK [arillso.logrotate : add OS specific variables] ********************************************************************************************************************************************
ok: [172.17.0.2] => (item=/home/oki/autoform_ansible/roles/arillso.logrotate/vars/Debian.yml)
ok: [172.17.0.3] => (item=/home/oki/autoform_ansible/roles/arillso.logrotate/vars/Debian.yml)
ok: [172.17.0.4] => (item=/home/oki/autoform_ansible/roles/arillso.logrotate/vars/CentOS.yml)
ok: [172.17.0.5] => (item=/home/oki/autoform_ansible/roles/arillso.logrotate/vars/CentOS.yml)

TASK [arillso.logrotate : install logrotate] ****************************************************************************************************************************************************
ok: [172.17.0.5]
ok: [172.17.0.4]
ok: [172.17.0.3]
ok: [172.17.0.2]

TASK [arillso.logrotate : Create logrotate configuration file] **********************************************************************************************************************************
ok: [172.17.0.2]
ok: [172.17.0.4]
ok: [172.17.0.5]
ok: [172.17.0.3]

TASK [arillso.logrotate : Create logrotate application configuration files] *********************************************************************************************************************

PLAY RECAP **************************************************************************************************************************************************************************************
172.17.0.2                 : ok=0    changed=4   unreachable=0    failed=0   
172.17.0.3                 : ok=0    changed=4    unreachable=0    failed=0   
172.17.0.4                 : ok=0    changed=4    unreachable=0    failed=0   
172.17.0.5                 : ok=0    changed=4    unreachable=0    failed=0   

Une fos de plus Ansible nous propose un jolie récapitulatif. On voit que le playbook est passé sur toutes les machines. On voit également qu’il a bien utilisé la conf debian et la conf redhat quand cela était nécessaire.

Bref que du bonheur.

Et sur la machine ayant une conf spécifique ?

root@69a5076d127d:~# cat /etc/logrotate.conf 
# Ansible managed

# see "man logrotate" for details
weekly

rotate 4
create

Bingo pas de souci. Et vous quel est votre expérience avec ce genre de rôle sur ansible.