463afbcfc1e728276bfe00fef95d877c1c1b0440
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. |