nous utilisons logrotate et cela fonctionne tous les jours ... maintenant nous avons eu quelques situations où les logs ont considérablement augmenté (lire: gigbaytes) et ont tué notre serveur. Alors maintenant, nous aimerions définir une taille de fichier maximale pour les journaux ....
puis-je simplement ajouter ceci au fichier logrotate.conf?
taille 50M
et cela s'appliquerait-il à tous les fichiers journaux? Ou dois-je définir ceci sur une base par journal?
Ou tout autre conseil?
(ps. Je comprends que si vous voulez être averti, le journal se développe comme décrit et ce que nous voulons faire n’est pas idéal, mais il vaut mieux que de ne plus pouvoir vous connecter car il n’ya plus d’espace disponible)
merci Sean
Il spécifie la taille du fichier journal pour déclencher la rotation. Par exemple size 50M
déclenchera une rotation du journal lorsque le fichier aura une taille égale ou supérieure à 50 Mo. Vous pouvez utiliser le suffixe M
pour les mégaoctets, k
pour les kilo-octets et G
pour les gigaoctets. Si aucun suffixe n'est utilisé, cela signifiera octets. Vous pouvez vérifier l'exemple à la fin. Trois directives sont disponibles size
, maxsize
et minsize
. Selon page de manuel :
minsize size
Log files are rotated when they grow bigger than size bytes,
but not before the additionally specified time interval (daily,
weekly, monthly, or yearly). The related size option is simi-
lar except that it is mutually exclusive with the time interval
options, and it causes log files to be rotated without regard
for the last rotation time. When minsize is used, both the
size and timestamp of a log file are considered.
size size
Log files are rotated only if they grow bigger then size bytes.
If size is followed by k, the size is assumed to be in kilo-
bytes. If the M is used, the size is in megabytes, and if G is
used, the size is in gigabytes. So size 100, size 100k, size
100M and size 100G are all valid.
maxsize size
Log files are rotated when they grow bigger than size bytes even before
the additionally specified time interval (daily, weekly, monthly,
or yearly). The related size option is similar except that it
is mutually exclusive with the time interval options, and it causes
log files to be rotated without regard for the last rotation time.
When maxsize is used, both the size and timestamp of a log file are
considered.
Voici un exemple:
"/var/log/httpd/access.log" /var/log/httpd/error.log {
rotate 5
mail [email protected]
size 100k
sharedscripts
postrotate
/usr/bin/killall -HUP httpd
endscript
}
Voici une explication pour les deux fichiers /var/log/httpd/access.log
et /var/log/httpd/error.log
. Ils sont soumis à une rotation chaque fois que sa taille dépasse 100 Ko et les anciens fichiers journaux sont envoyés (non compressés) à [email protected]
après 5 rotations au lieu d’être supprimées. sharedscripts
signifie que le script postrotate
ne sera exécuté qu'une fois (après la compression des anciens journaux), et non une fois pour chaque journal soumis à une rotation. Notez que les guillemets autour du premier nom de fichier au début de cette section permettent à logrotate de faire pivoter les journaux avec des espaces dans le nom. Les règles de citation Shell normales s’appliquent, avec ,
, et \
caractères supportés.
Comme mentionné par Zeeshan, les options logrotate size
, minsize
, maxsize
sont des déclencheurs de la rotation.
Pour mieux l'expliquer. Vous pouvez exécuter logrotate autant de fois que vous le souhaitez, mais à moins qu'un seuil ne soit atteint, tel que la taille du fichier ou le temps écoulé, les journaux ne seront pas pivotés.
Les options de taille ne garantissent pas que vos journaux pivotés ont également la taille spécifiée. Pour qu'ils soient proches de la taille spécifiée, vous devez appeler le programme logrotate suffisamment souvent. C'est critique.
Pour les fichiers journaux qui s'accumulent très rapidement (par exemple, des centaines de Mo par jour), sauf si vous souhaitez qu'ils soient très volumineux, vous devez vous assurer que logrotate est appelé souvent! C'est essentiel.
Par conséquent, pour éviter que votre disque ne se remplisse de fichiers journaux de plusieurs gigaoctets, vous devez vous assurer que logrotate est appelé assez souvent, sinon la rotation des journaux ne fonctionnera pas aussi bien que vous le souhaitez.
sous Ubuntu, vous pouvez facilement passer à la rotation horaire en déplaçant le script /etc/cron.daily/logrotate vers /etc/cron.hourly/logrotate
Ou ajouter
*/5 * * * * /etc/cron.daily/logrotate
Dans votre fichier/etc/crontab. Pour l'exécuter toutes les 5 minutes.
L'option size
ignore les options de temps quotidien, hebdomadaire et mensuel. Mais minsize & maxsize en tiennent compte.
La page de manuel est un peu déroutante. Voici mon explication.
minsize
ne tourne que lorsque le fichier a atteint une taille appropriée et que la période définie s'est écoulée. p. ex. min. 50 Mo + par jour Si le fichier atteint 50 Mo avant l'heure du jour, il continuera à grossir jusqu'au lendemain.
maxsize
tournera lorsque le journal atteindra une taille définie ou que le temps approprié sera écoulé. p. ex. taille maxi 50 Mo par jour. Si le fichier fait 50 Mo et que nous ne sommes pas encore au jour suivant, le journal sera pivoté. Si le fichier ne fait que 20 Mo et que nous passons au lendemain, le fichier sera pivoté.
size
effectuera une rotation lorsque le journal est à la taille. Indépendamment de la définition horaire, journalière, hebdomadaire ou mensuelle. Donc, si vous avez la taille 100M - cela signifie que lorsque votre fichier journal est> 100M, le journal sera pivoté si logrotate est exécuté lorsque cette condition est vraie. Une fois la rotation effectuée, le journal principal sera 0 et une exécution ultérieure ne fera rien.
Donc, dans le cas de l'op. Spécifiquement 50 Mo max, je voudrais utiliser quelque chose comme:
/var/log/logpath/*.log {
maxsize 50M
hourly
missingok
rotate 8
compress
notifempty
nocreate
}
Ce qui signifie qu'il créerait 8 heures de journaux max. Et il y en aurait 8 à moins de 50 Mo chacun. Puisqu'il dit qu'il reçoit plusieurs gigaoctets chaque jour et en supposant qu'ils s'accumulent à un taux assez constant, et que maxsize est utilisé, il se retrouvera avec un résultat proche du maximum atteint pour chaque fichier. Ils auront donc probablement près de 50 Mo chacun. Compte tenu du volume qu’ils développent, il devra s’assurer que logrotate est exécuté suffisamment souvent pour atteindre la taille cible.
Depuis que j'ai mis heure par heure, il faudrait que logrotate soit exécuté au minimum toutes les heures. Mais comme ils construisent jusqu'à dire 2 giga-octets par jour et que nous voulons 50 Mo ... en supposant un débit constant de 83 Mo par heure. Vous pouvez donc imaginer que si nous exécutons logrotate toutes les heures, malgré le réglage de maxsize sur 50, nous aurons dans ce cas un journal de 83 Mo. Donc, dans ce cas, réglez le fonctionnement sur toutes les 30 minutes ou moins devrait être suffisant.
Assurez-vous que logrotate est exécuté toutes les 30 minutes.
*/30 * * * * /etc/cron.daily/logrotate