J'ai écrit un programme simple, datelog, pour diviser les journaux communs en fonction de la date enregistrée, par opposition à l'heure actuelle du système lorsque la ligne de journal est vue par le programme. Cela peut ou non être exactement ce que fait déjà Cronolog ou un autre séparateur de journaux, mais il a été plus rapide d'écrire le mien que de découvrir ce que font les autres.
En utilisant l'année et le mois dans la demande enregistrée, la ligne est ensuite écrite dans un fichier ou un canal qui inclut le YYYYMM calculé à partir des données enregistrées. Oui, c'est quelque peu spécifique pour le format de journal commun. Le premier [est censé délimiter la date. Méfiez-vous des adresses IPv6. :)
Pour l'analyse des journaux, il est important que chaque journal ne contienne vraiment que les demandes pour chaque mois respectif, et chaque journal devrait idéalement être complet pour des résultats d'analyse corrects. Il ne suffit pas de déterminer le nom de fichier en fonction de l'heure actuelle dans le séparateur de journaux, car une demande lente commençant à 23:59:59 se retrouvera ensuite dans le fichier journal pour le mauvais mois.
J'utilise ceci avec nginx au moyen d'un fifo nommé qui est vérifié pour exister avant le démarrage de nginx. Notez qu'il existe un compromis dans le programme entre la détection d'erreurs et la sortie tamponnée, où le journal de données préfère actuellement la sortie tamponnée pour des raisons de performances, alors assurez-vous que votre configuration fonctionne vraiment, en particulier lors de l'utilisation de tubes shell, afin de ne pas perdre de données de journal .
Code source: http://stuge.se/datelog.c
N'hésitez pas à m'envoyer vos commentaires et bien sûr les correctifs!