ResEl classic : plus de place sur la machine !

Rappel ! N'hésitez pas à regarder le manuel des commandes utilisées, à googler et À FAIRE TESTER PAR VOUS-MÊME.

Pré-requis :

  • un compte la machine en question

Diagnostique

Icinga (icinga.resel.fr) se plaint : PROBLEM : Disk Space is CRITICAL

Host: Situs - Le reverse proxy admin
Address: 172.22.2.97
State: CRITICAL

/dev/vda1 value, 96.6603720505568, is above critical treshold 95 -----------

Allons voir sur la machine en question :

~ » ssh yoshi                                                    
gweghstee@yoshi:~$ ssh situs
gweghstee@situs's password: 
gweghstee@situs:~$ df -h
Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur
udev               992M       0  992M   0% /dev
tmpfs              201M     21M  180M  11% /run
/dev/vda1          4,8G    4,4G  150M  97% /
tmpfs             1003M     48K 1003M   1% /dev/shm
tmpfs              5,0M       0  5,0M   0% /run/lock
tmpfs             1003M       0 1003M   0% /sys/fs/cgroup
tmpfs              180M       0  180M   0% /run/user/0
tmpfs              180M       0  180M   0% /run/user/1015

En effet, la partition /dev/vda1 est bien remplie. Cherchons un peu plus ce qui prend de la place. Par intuition, on peut aller voir du côté des logs.

gweghstee@situs:~$ cd /var/log  
gweghstee@situs:/var/log$ sudo du -h .
[sudo] Mot de passe de gweghstee : 
4,0K    ./ntpstats
4,0K    ./telegraf
164K    ./munin
52K     ./exim4
176K    ./apt
14M     ./installer/cdebconf
14M     ./installer
12K     ./fsck
296K    ./nginx/svn.resel.fr
50M     ./nginx/redmine.resel.fr
2,2M    ./nginx/sandstorm.resel.fr
33M     ./nginx/unifi.resel.fr
39M     ./nginx/admin.resel.fr
9,9M    ./nginx/icinga.resel.fr
14M     ./nginx/wiki.resel.fr
35M     ./nginx/kibana.resel.fr
16M     ./nginx/stats.resel.fr
4,0K    ./nginx/sat.lmonit.resel.fr
21M     ./nginx/unifi-rennes.resel.fr
2,0M    ./nginx/docker.resel.fr
25M     ./nginx/proxmox.resel.fr
2,6M    ./nginx/cacti.resel.fr
44M     ./nginx/graph.resel.fr
120K    ./nginx/chat.resel.fr
35M     ./nginx/xxx.resel.fr
13M     ./nginx/munin.resel.fr
20M     ./nginx/backuppc.resel.fr
4,0K    ./nginx/tv.monit.resel.fr
2,8M    ./nginx/ara.resel.fr
23M     ./nginx/observium.resel.fr
55M     ./nginx/trac.resel.fr
2,1M    ./nginx/backuppc-rennes.resel.fr
36M     ./nginx/admin-dev.resel.fr
42M     ./nginx/proxmox-rennes.resel.fr
1,9G    ./nginx
220K    ./letsencrypt
1,9G    .

Les logs nginx prennent 1.9G, sur 4.8G de disque, c'est trop! Mais on remarque aussi que ce ne sont pas les sous-répertoires de nginx qui prennent de la place. Ce sont des fichiers directement dans nginx. Pour s'en convaincre:

gweghstee@situs:/var/log$ cd nginx
gweghstee@situs:/var/log/nginx$ ls -alhS
total 1,4G
-rw-r--r--  1 root     root     266M nov.  29 18:10 trac.resel.fr.access.log
-rw-r--r--  1 root     root     133M déc.   2 17:21 unifi.resel.fr.access.log
-rw-r--r--  1 root     root     109M nov.  28 11:41 error.log
-rw-r--r--  1 root     root     107M déc.   2 17:19 munin.resel.fr.access.log
-rw-r--r--  1 root     root      84M déc.   2 17:19 admin-dev.resel.fr.access.log
-rw-r--r--  1 root     root      78M déc.   2 17:20 observium.resel.fr.access.log
-rw-r--r--  1 root     root      70M déc.   2 17:21 unifi-rennes.resel.fr.access.log
-rw-r--r--  1 root     root      56M déc.   2 17:21 admin.resel.fr.access.log
-rw-r--r--  1 root     root      52M nov.  25 08:01 trac.resel.fr.errors.log
-rw-r--r--  1 root     root      49M déc.   2 17:20 proxmox.resel.fr.errors.log
-rw-r--r--  1 root     root      41M déc.   2 17:19 access.log
-rw-r--r--  1 root     root      38M déc.   2 17:21 icinga.resel.fr.access.log
-rw-r--r--  1 root     root      35M sept. 10 18:21 stats.resel.fr.errors.log
-rw-r--r--  1 root     root      26M déc.   2 17:19 xxx.resel.fr.access.log
-rw-r--r--  1 root     root      25M déc.   1 11:01 kibana.resel.fr.access.log
-rw-r--r--  1 root     root      25M oct.  21 19:15 graph.resel.fr.access.log
-rw-r--r--  1 root     root      24M déc.   2 17:21 backuppc.resel.fr.access.log
-rw-r--r--  1 root     root      22M sept. 10 18:21 stats.resel.fr.access.log
-rw-r--r--  1 root     root      22M déc.   2 17:19 ara.resel.fr.access.log
-rw-r--r--  1 root     root      21M déc.   2 17:13 sandstorm.resel.fr.access.log
-rw-r--r--  1 root     root      21M déc.   2 17:20 backuppc-rennes.resel.fr.access.log
.........

Des infos de logs sont générées en continu, ce qui est normal. Elles permettent de faciliter le diagnostique des problèmes, faire des stats ou même dans certains cas parce que c'est la loi qui le veut!
Pour éviter de saturer le disque, les fichiers de logs sont régulièrement compressés et archivé par logrotate. Faites un tour du côté de la doc pour en savoir plus...

Voyons à quoi ressemble la configuration de logrotate pour les logs ngninx :

gweghstee@situs:/var/log$ cat /etc/logrotate.d/nginx 
/var/log/nginx/*/*.log {
        monthly
        size 50M
        rotate 12
        compress
        delaycompress
        missingok
        notifempty
        create 644 www-data www-data
}
Elle fonctionne bien pour les sous-répertoires de /var/log/nginx, mais pas pour les fichiers dans /var/log/nginx !
Voyons si d'autres conf parlent de nginx :
gweghstee@situs:/var/log/nginx$cd /etc/logrotate.d
gweghstee@situs:/etc/logrotate.d$ grep -r "/var/log/nginx"
nginx:/var/log/nginx/*/*.log {
apparemment pas. À nous de le faire! :
gweghstee@situs:/etc/logrotate.d$ cat nginx 
/var/log/nginx/*/*.log {
        weekly
        size 50M
        rotate 12
        compress
        delaycompress
        missingok
        notifempty
        create 644 www-data www-data
}

/var/log/nginx/*.log {
        weekly
        size 50M
        rotate 12
        compress
        missingok
        notifempty
        olddir old_logs
        create 644 www-data www-data
}
j'ai retiré le delaycompress qui conserve 1 rotation de log non compressé avant de compresser. J'ai ajouté un olddir, que je dois créer à la main la première fois pour y voir plus clair. Application cette configuration :
sudo logrotate /etc/logrotate.d/nginx --force
Vérification :
gweghstee@situs:/var/log$ df -h
Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur
udev               992M       0  992M   0% /dev
tmpfs              201M     21M  180M  11% /run
/dev/vda1          4,8G    4,4G  190M  96% /
tmpfs             1003M     48K 1003M   1% /dev/shm
tmpfs              5,0M       0  5,0M   0% /run/lock
tmpfs             1003M       0 1003M   0% /sys/fs/cgroup
tmpfs              180M       0  180M   0% /run/user/0
tmpfs              180M       0  180M   0% /run/user/1015
On a gagné 40M?????
Après une petite recherche sur pourquoi df n'affiche pas la valeur correcte (https://serverfault.com/questions/232525/df-in-linux-not-showing-correct-free-space-after-file-removal ), on constate :
gweghstee@situs:/var/log$ sudo lsof +L1
COMMAND PID     USER   FD   TYPE DEVICE  SIZE/OFF NLINK  NODE NAME
nginx   731     root    2w   REG  254,1 114241397     0    45 /var/log/nginx/error.log.1 (deleted)
nginx   731     root    4w   REG  254,1  87698396     0 24983 /var/log/nginx/admin-dev.resel.fr.access.log.1 (deleted)
nginx   731     root    5w   REG  254,1    834250     0 24984 /var/log/nginx/admin-dev.resel.fr.errors.log.1 (deleted)
nginx   731     root    6w   REG  254,1  58028141     0 24985 /var/log/nginx/admin.resel.fr.access.log.1 (deleted)
nginx   731     root    7w   REG  254,1   5585262     0 24986 /var/log/nginx/admin.resel.fr.errors.log.1 (deleted)
nginx   731     root    8w   REG  254,1  22244736     0 24987 /var/log/nginx/ara.resel.fr.access.log.1 (deleted)
nginx   731     root    9w   REG  254,1     11196     0 24988 /var/log/nginx/ara.resel.fr.errors.log.1 (deleted)
nginx   731     root   10w   REG  254,1  21120957     0 24989 /var/log/nginx/backuppc-rennes.resel.fr.access.log.1 (deleted)
nginx   731     root   12w   REG  254,1  24894507     0 24991 /var/log/nginx/backuppc.resel.fr.access.log.1 (deleted)
nginx   731     root   13w   REG  254,1     13839     0 24992 /var/log/nginx/backuppc.resel.fr.errors.log.1 (deleted)
...
Du coup
gweghstee@situs:/var/log$ sudo service nginx reload
gweghstee@situs:/var/log$ sudo lsof +L1
Et enfin :
gweghstee@situs:/var/log$ df -h
Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur
udev               992M       0  992M   0% /dev
tmpfs              201M     21M  180M  11% /run
/dev/vda1          4,8G    2,9G  1,8G  63% /
tmpfs             1003M     48K 1003M   1% /dev/shm
tmpfs              5,0M       0  5,0M   0% /run/lock
tmpfs             1003M       0 1003M   0% /sys/fs/cgroup
tmpfs              180M       0  180M   0% /run/user/0
tmpfs              180M       0  180M   0% /run/user/1015
Bien sûr, je n'ai pas tout fait du premier coup, et c'est normal. Je vous ai épargné quelques commandes de tatonnement.