web-dev-qa-db-fra.com

La configuration de journal Centos / Linux correspond à la taille de fichier maximale pour tous les journaux.

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

57
snh_nl

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.

66
Zeeshan

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 
82
Matt