ResEl_classics/need-space.md
... ...
@@ -0,0 +1,211 @@
1
+# ResEl classic : plus de place sur la machine !
2
+Rappel ! N'hésitez pas à regarder le manuel des commandes utilisées, à googler et À FAIRE TESTER PAR VOUS-MÊME.
3
+
4
+## Pré-requis :
5
+* un compte la machine en question
6
+
7
+## Diagnostique
8
+Icinga (icinga.resel.fr) se plaint :
9
+PROBLEM : Disk Space is CRITICAL
10
+
11
+ Host: Situs - Le reverse proxy admin
12
+ Address: 172.22.2.97
13
+ State: CRITICAL
14
+
15
+
16
+/dev/vda1 value, 96.6603720505568, is above critical treshold 95
17
+ -----------
18
+
19
+Allons voir sur la machine en question :
20
+```
21
+~ » ssh yoshi
22
+gweghstee@yoshi:~$ ssh situs
23
+gweghstee@situs's password:
24
+gweghstee@situs:~$ df -h
25
+Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur
26
+udev 992M 0 992M 0% /dev
27
+tmpfs 201M 21M 180M 11% /run
28
+/dev/vda1 4,8G 4,4G 150M 97% /
29
+tmpfs 1003M 48K 1003M 1% /dev/shm
30
+tmpfs 5,0M 0 5,0M 0% /run/lock
31
+tmpfs 1003M 0 1003M 0% /sys/fs/cgroup
32
+tmpfs 180M 0 180M 0% /run/user/0
33
+tmpfs 180M 0 180M 0% /run/user/1015
34
+```
35
+
36
+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.
37
+```
38
+gweghstee@situs:~$ cd /var/log
39
+gweghstee@situs:/var/log$ sudo du -h .
40
+[sudo] Mot de passe de gweghstee : 
41
+4,0K ./ntpstats
42
+4,0K ./telegraf
43
+164K ./munin
44
+52K ./exim4
45
+176K ./apt
46
+14M ./installer/cdebconf
47
+14M ./installer
48
+12K ./fsck
49
+296K ./nginx/svn.resel.fr
50
+50M ./nginx/redmine.resel.fr
51
+2,2M ./nginx/sandstorm.resel.fr
52
+33M ./nginx/unifi.resel.fr
53
+39M ./nginx/admin.resel.fr
54
+9,9M ./nginx/icinga.resel.fr
55
+14M ./nginx/wiki.resel.fr
56
+35M ./nginx/kibana.resel.fr
57
+16M ./nginx/stats.resel.fr
58
+4,0K ./nginx/sat.lmonit.resel.fr
59
+21M ./nginx/unifi-rennes.resel.fr
60
+2,0M ./nginx/docker.resel.fr
61
+25M ./nginx/proxmox.resel.fr
62
+2,6M ./nginx/cacti.resel.fr
63
+44M ./nginx/graph.resel.fr
64
+120K ./nginx/chat.resel.fr
65
+35M ./nginx/xxx.resel.fr
66
+13M ./nginx/munin.resel.fr
67
+20M ./nginx/backuppc.resel.fr
68
+4,0K ./nginx/tv.monit.resel.fr
69
+2,8M ./nginx/ara.resel.fr
70
+23M ./nginx/observium.resel.fr
71
+55M ./nginx/trac.resel.fr
72
+2,1M ./nginx/backuppc-rennes.resel.fr
73
+36M ./nginx/admin-dev.resel.fr
74
+42M ./nginx/proxmox-rennes.resel.fr
75
+1,9G ./nginx
76
+220K ./letsencrypt
77
+1,9G .
78
+```
79
+
80
+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:
81
+```
82
+gweghstee@situs:/var/log$ cd nginx
83
+gweghstee@situs:/var/log/nginx$ ls -alhS
84
+total 1,4G
85
+-rw-r--r-- 1 root root 266M nov. 29 18:10 trac.resel.fr.access.log
86
+-rw-r--r-- 1 root root 133M déc. 2 17:21 unifi.resel.fr.access.log
87
+-rw-r--r-- 1 root root 109M nov. 28 11:41 error.log
88
+-rw-r--r-- 1 root root 107M déc. 2 17:19 munin.resel.fr.access.log
89
+-rw-r--r-- 1 root root 84M déc. 2 17:19 admin-dev.resel.fr.access.log
90
+-rw-r--r-- 1 root root 78M déc. 2 17:20 observium.resel.fr.access.log
91
+-rw-r--r-- 1 root root 70M déc. 2 17:21 unifi-rennes.resel.fr.access.log
92
+-rw-r--r-- 1 root root 56M déc. 2 17:21 admin.resel.fr.access.log
93
+-rw-r--r-- 1 root root 52M nov. 25 08:01 trac.resel.fr.errors.log
94
+-rw-r--r-- 1 root root 49M déc. 2 17:20 proxmox.resel.fr.errors.log
95
+-rw-r--r-- 1 root root 41M déc. 2 17:19 access.log
96
+-rw-r--r-- 1 root root 38M déc. 2 17:21 icinga.resel.fr.access.log
97
+-rw-r--r-- 1 root root 35M sept. 10 18:21 stats.resel.fr.errors.log
98
+-rw-r--r-- 1 root root 26M déc. 2 17:19 xxx.resel.fr.access.log
99
+-rw-r--r-- 1 root root 25M déc. 1 11:01 kibana.resel.fr.access.log
100
+-rw-r--r-- 1 root root 25M oct. 21 19:15 graph.resel.fr.access.log
101
+-rw-r--r-- 1 root root 24M déc. 2 17:21 backuppc.resel.fr.access.log
102
+-rw-r--r-- 1 root root 22M sept. 10 18:21 stats.resel.fr.access.log
103
+-rw-r--r-- 1 root root 22M déc. 2 17:19 ara.resel.fr.access.log
104
+-rw-r--r-- 1 root root 21M déc. 2 17:13 sandstorm.resel.fr.access.log
105
+-rw-r--r-- 1 root root 21M déc. 2 17:20 backuppc-rennes.resel.fr.access.log
106
+.........
107
+```
108
+
109
+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!
110
+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...
111
+
112
+Voyons à quoi ressemble la configuration de logrotate pour les logs ngninx :
113
+```
114
+gweghstee@situs:/var/log$ cat /etc/logrotate.d/nginx
115
+/var/log/nginx/*/*.log {
116
+ monthly
117
+ size 50M
118
+ rotate 12
119
+ compress
120
+ delaycompress
121
+ missingok
122
+ notifempty
123
+ create 644 www-data www-data
124
+}
125
+```
126
+Elle fonctionne bien pour les sous-répertoires de /var/log/nginx, mais pas pour les fichiers dans /var/log/nginx !
127
+Voyons si d'autres conf parlent de nginx :
128
+```
129
+gweghstee@situs:/var/log/nginx$cd /etc/logrotate.d
130
+gweghstee@situs:/etc/logrotate.d$ grep -r "/var/log/nginx"
131
+nginx:/var/log/nginx/*/*.log {
132
+```
133
+apparemment pas. À nous de le faire! :
134
+```
135
+gweghstee@situs:/etc/logrotate.d$ cat nginx
136
+/var/log/nginx/*/*.log {
137
+ weekly
138
+ size 50M
139
+ rotate 12
140
+ compress
141
+ delaycompress
142
+ missingok
143
+ notifempty
144
+ create 644 www-data www-data
145
+}
146
+
147
+/var/log/nginx/*.log {
148
+ weekly
149
+ size 50M
150
+ rotate 12
151
+ compress
152
+ missingok
153
+ notifempty
154
+ olddir old_logs
155
+ create 644 www-data www-data
156
+}
157
+```
158
+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.
159
+Application cette configuration :
160
+```
161
+sudo logrotate /etc/logrotate.d/nginx --force
162
+```
163
+Vérification :
164
+```
165
+gweghstee@situs:/var/log$ df -h
166
+Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur
167
+udev 992M 0 992M 0% /dev
168
+tmpfs 201M 21M 180M 11% /run
169
+/dev/vda1 4,8G 4,4G 190M 96% /
170
+tmpfs 1003M 48K 1003M 1% /dev/shm
171
+tmpfs 5,0M 0 5,0M 0% /run/lock
172
+tmpfs 1003M 0 1003M 0% /sys/fs/cgroup
173
+tmpfs 180M 0 180M 0% /run/user/0
174
+tmpfs 180M 0 180M 0% /run/user/1015
175
+```
176
+On a gagné 40M?????
177
+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 :
178
+```
179
+gweghstee@situs:/var/log$ sudo lsof +L1
180
+COMMAND PID USER FD TYPE DEVICE SIZE/OFF NLINK NODE NAME
181
+nginx 731 root 2w REG 254,1 114241397 0 45 /var/log/nginx/error.log.1 (deleted)
182
+nginx 731 root 4w REG 254,1 87698396 0 24983 /var/log/nginx/admin-dev.resel.fr.access.log.1 (deleted)
183
+nginx 731 root 5w REG 254,1 834250 0 24984 /var/log/nginx/admin-dev.resel.fr.errors.log.1 (deleted)
184
+nginx 731 root 6w REG 254,1 58028141 0 24985 /var/log/nginx/admin.resel.fr.access.log.1 (deleted)
185
+nginx 731 root 7w REG 254,1 5585262 0 24986 /var/log/nginx/admin.resel.fr.errors.log.1 (deleted)
186
+nginx 731 root 8w REG 254,1 22244736 0 24987 /var/log/nginx/ara.resel.fr.access.log.1 (deleted)
187
+nginx 731 root 9w REG 254,1 11196 0 24988 /var/log/nginx/ara.resel.fr.errors.log.1 (deleted)
188
+nginx 731 root 10w REG 254,1 21120957 0 24989 /var/log/nginx/backuppc-rennes.resel.fr.access.log.1 (deleted)
189
+nginx 731 root 12w REG 254,1 24894507 0 24991 /var/log/nginx/backuppc.resel.fr.access.log.1 (deleted)
190
+nginx 731 root 13w REG 254,1 13839 0 24992 /var/log/nginx/backuppc.resel.fr.errors.log.1 (deleted)
191
+...
192
+```
193
+Du coup
194
+```
195
+gweghstee@situs:/var/log$ sudo service nginx reload
196
+gweghstee@situs:/var/log$ sudo lsof +L1
197
+```
198
+Et enfin :
199
+```
200
+gweghstee@situs:/var/log$ df -h
201
+Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur
202
+udev 992M 0 992M 0% /dev
203
+tmpfs 201M 21M 180M 11% /run
204
+/dev/vda1 4,8G 2,9G 1,8G 63% /
205
+tmpfs 1003M 48K 1003M 1% /dev/shm
206
+tmpfs 5,0M 0 5,0M 0% /run/lock
207
+tmpfs 1003M 0 1003M 0% /sys/fs/cgroup
208
+tmpfs 180M 0 180M 0% /run/user/0
209
+tmpfs 180M 0 180M 0% /run/user/1015
210
+```
211
+Bien sûr, je n'ai pas tout fait du premier coup, et c'est normal. Je vous ai épargné quelques commandes de tatonnement.