Zabbix peut être utilisé pour la surveillance centralisée et l'analyse des fichiers journaux avec/sans support de rotation des fichiers journaux.
Les notifications peuvent être utilisées pour avertir les utilisateurs lorsqu'un fichier journal contient certaines chaînes ou certains modèles de chaîne.
Pour superviser un fichier journal, vous devez avoir :
La taille limite d'un fichier de logs supervisé dépend du support des fichiers volumineux.
Assurez-vous que dans le fichier de configuration de l'agent :
Configurer un élément de supervision de fichier journal :
Tous les champs de saisie obligatoires sont marqués d'un astérisque rouge.
Spécifiquement pour les éléments de supervision de fichiers journaux vous devez entrer :
· | · |
---|---|
Type | Sélectionnez agent Zabbix (actif) ici. |
Clé | Utilise l'une des clés suivantes : log[] ou logrt[] : Ces deux clés d'élément permettent de surveiller les fichiers journaux et filtre le contenu des entrées des journaux via une expression régulière, si présente. Par exemple : log[/var/log/syslog,error] . Assurez-vous que le fichier dispose des autorisations de lecture pour l'utilisateur 'zabbix', sinon le statut de l'élément sera défini sur 'non supporté'.log.count[] ou logrt.count[] : Ces deux clés d'élément permettent de retourner uniquement un nombre de lignes qui correspondent. Voir la section concernant les clés d'éléments d'agent Zabbix supportées pour plus de détails sur l'utilisation des clés d'éléments et leurs paramètres. |
Type d'information | Pré-rempli automatiquement : Pour les éléments log[] ou logrt[] - Journal ; pour les éléments log.count[] ou logrt.count[] - Numérique (non signé) .Si vous utilisez éventuellement le paramètre output , vous pouvez sélectionner manuellement le type d'information approprié autre que "Journal".Notez que le choix d'un type d'information autre que Journal entraînera la perte de l'horodatage local. |
Intervalle d’actualisation | Le paramètre définit la fréquence (en seconde) à laquelle l'agent Zabbix vérifie les modifications dans le fichier journal. Le réglage à 1 seconde fera en sorte que vous obtiendrez de nouveaux enregistrements dès que possible. |
Format de l'horodatage du journal | Dans ce champ, vous pouvez éventuellement spécifier le modèle pour l'analyse de l'horodatage de la ligne de journal. Si elle est vide, l'horodatage ne sera pas analysé. Espaces réservés pris en charge : * y: Année (0001-9999) * M: Mois (01-12) * d: Jour (01-31) * h: Heure (00-23) * m: Minute (00-59) * s: Seconde (00-59) Par exemple, considérez la ligne suivante du fichier journal de l'agent Zabbix : " 23480:20100328:154718.045 Zabbix agent started. Zabbix 1.8.2 (revision 11211)." Il commence par six positions de caractères pour le PID, suivies de la date, de l'heure et du reste de la ligne. Le format de l'heure du journal pour cette ligne serait “pppppp:yyyyMMdd:hhmmss”. Notez que les caractères "p" et ":" ne sont que des espaces réservés et peuvent être tout sauf "yMdhms". |
Nous pouvons parfois vouloir extraire uniquement la valeur intéressante d'un fichier cible au lieu de renvoyer la ligne entière lorsqu'une correspondance d'expression régulière est trouvée.
Depuis Zabbix 2.2.0, les éléments de fichiers journaux ont la possibilité d'extraire les valeurs souhaitées des lignes correspondantes. Ceci est accompli par le paramètre supplémentaire output dans les éléments log
et logrt
.
L'utilisation du paramètre 'output' permet d'indiquer le "groupe capturé" de la correspondance qui pourrait nous intéresser.
Ainsi, par exemple :
devrait permettre de renvoyer le nombre d'entrées tel que trouvé dans le contenu de :
Fr Feb 07 2014 11:07:36.6690 */ Thread Id 1400 (GLEWF) large result
buffer allocation - /Length: 437136/Entries: 5948/Client Ver: >=10/RPC
ID: 41726453/User: AUser/Form: CFG:ServiceLevelAgreement
Le nombre uniquement sera retourné parce que \1 se réfère au premier et seul groupe capturé : ([0-9]+)
Et, avec la possibilité d'extraire et de renvoyer un nombre, la valeur peut être utilisée pour définir des déclencheurs.
Le paramètre 'maxdelay' dans les éléments de journal permet d'ignorer certaines lignes plus anciennes des fichiers journaux afin d'obtenir les lignes les plus récentes analysées dans les secondes 'maxdelay'.
Spécifier 'maxdelay' > 0 peut conduire à ignorer les enregistrements importants du fichier journal et les alertes manquées. Utilisez-le avec précaution à vos risques et périls uniquement lorsque cela est nécessaire.
Par défaut, les éléments de surveillance des journaux suivent toutes les nouvelles lignes apparaissant dans les fichiers journaux. Cependant, il existe des applications qui, dans certaines situations, commencent à écrire un nombre énorme de messages dans leurs fichiers journaux. Par exemple, si une base de données ou un serveur DNS est indisponible, ces applications inondent les fichiers journaux de milliers de messages d'erreur presque identiques jusqu'à ce que le fonctionnement normal soit rétabli. Par défaut, tous ces messages seront consciencieusement analysés et les lignes correspondantes envoyées au serveur comme configuré dans les éléments log
et logrt
.
La protection intégrée contre la surcharge consiste en un paramètre configurable 'maxlines' (protège le serveur contre trop de lignes de journal correspondantes entrantes) et une limite de 10*'maxlines' (protège le processeur hôte et les E/S de la surcharge par l'agent en une seule vérification) . Pourtant, il y a 2 problèmes avec la protection intégrée. Tout d'abord, un grand nombre de messages potentiellement peu informatifs sont signalés au serveur et consomment de l'espace dans la base de données. Deuxièmement, en raison du nombre limité de lignes analysées par seconde, l'agent peut être en retard sur les enregistrements de journal les plus récents pendant des heures. Très probablement, vous préférerez peut-être être informé plus tôt de la situation actuelle dans les fichiers journaux au lieu de parcourir les anciens enregistrements pendant des heures.
La solution aux deux problèmes consiste à utiliser le paramètre 'maxdelay'. Si 'maxdelay' > 0 est spécifié, lors de chaque vérification, le nombre d'octets traités, le nombre d'octets restants et le temps de traitement sont mesurés. À partir de ces chiffres, l'agent calcule un délai estimé - le nombre de secondes qu'il faudrait pour analyser tous les enregistrements restants dans un fichier journal.
Si le délai ne dépasse pas 'maxdelay', l'agent procède à l'analyse du fichier journal comme d'habitude.
Si le délai est supérieur à 'maxdelay', l'agent ignore un morceau d'un fichier journal en "sautant" par dessus vers une nouvelle position estimée afin que les lignes restantes puissent être analysées dans les 'maxdelay' secondes.
Notez que l'agent ne lit même pas les lignes ignorées dans le tampon, mais calcule une position approximative vers laquelle sauter dans un fichier.
Le fait de sauter des lignes du fichier journal est consigné dans le fichier journal de l'agent comme ceci :
14287:20160602:174344.206 item:"logrt["/home/zabbix32/test[0-9].log",ERROR,,1000,,,120.0]"
logfile:"/home/zabbix32/test1.log" skipping 679858 bytes
(from byte 75653115 to byte 76332973) to meet maxdelay
Le nombre "à l'octet" est approximatif car après le "saut", l'agent ajuste la position dans le fichier au début d'une ligne de journal qui peut être plus loin dans le fichier ou plus tôt.
Selon la façon dont la vitesse de croissance se compare à la vitesse d'analyse du fichier journal, vous pouvez ne voir aucun "saut", voir de rares ou fréquents "sauts", de grands ou petits "saut", ou même un petit "saut" à chaque vérification. Les fluctuations de la charge du système et de la latence du réseau affectent également le calcul du délai et, par conséquent, "sautent" en avant pour suivre le paramètre "maxdelay".
Définir 'maxdelay' < 'update interval' n'est pas recommandé (cela peut entraîner de petits "sauts" fréquents).
logrt
avec l'option copytruncate
suppose que différents fichiers journaux ont des enregistrements différents (au moins leurs horodatages sont différents), donc les sommes MD5 des blocs initiaux (jusqu'à 512 premiers octets) seront différentes. Deux fichiers avec les mêmes sommes MD5 de blocs initiaux signifient que l'un d'eux est l'original, l'autre - une copie.
logrt
avec l'option copytruncate
s'efforce de traiter correctement les copies de fichiers journaux sans signaler les doublons. Cependant, des choses telles que la production de plusieurs copies de fichiers journaux avec le même horodatage, la rotation du fichier journal plus souvent que l'intervalle de mise à jour de l'élément logrt[], le redémarrage fréquent de l'agent ne sont pas recommandés. L'agent essaie de gérer raisonnablement toutes ces situations, mais de bons résultats ne peuvent pas être garantis en toutes circonstances.
Lorsque l'agent Zabbix est démarré, il reçoit une liste des vérifications actives du serveur ou du proxy Zabbix. Pour les métriques log*[], il reçoit la taille du journal traité et l'heure de modification pour trouver où commencer la surveillance du fichier journal. En fonction de la taille réelle du fichier journal et de l'heure de modification signalée par le système de fichiers, l'agent décide soit de poursuivre la surveillance du fichier journal à partir de la taille du journal traité, soit de ré-analyser le fichier journal depuis le début.
Un agent en cours d'exécution conserve un plus grand ensemble d'attributs pour le suivi de tous les fichiers journaux surveillés entre les vérifications. Cet état en-mémoire est perdu lorsque l'agent est arrêté.
Le nouveau paramètre facultatif persistent_dir spécifie un répertoire pour stocker cet état de l'élément log[], log.count[], logrt[] ou logrt.count[] dans un fichier . L'état de l'élément de journal est restauré à partir du fichier persistant après le redémarrage de l'agent Zabbix.
Le principal cas d'usage est la surveillance du fichier journal situé sur un système de fichiers en miroir. Jusqu'à un certain moment, le fichier journal est écrit sur les deux miroirs. Ensuite, les miroirs sont divisés. Sur la copie active, le fichier journal continue de croître, obtenant de nouveaux enregistrements. L'agent Zabbix l'analyse et envoie la taille et l'heure de modification des journaux traités au serveur. Sur la copie passive, le fichier journal reste le même, bien derrière la copie active. Plus tard, le système d'exploitation et l'agent Zabbix sont redémarrés à partir de la copie passive. La taille du journal traité et l'heure de modification que l'agent Zabbix reçoit du serveur peuvent ne pas être valides pour la situation sur la copie passive. Pour continuer la surveillance du fichier journal à partir de l'endroit où l'agent s'est arrêté au moment de la division du miroir du système de fichiers, l'agent restaure son état à partir du fichier persistant.
Au démarrage, l'agent Zabbix ne sait rien des fichiers persistants. Ce n'est qu'après avoir reçu une liste des vérifications actives du serveur Zabbix (proxy) que l'agent constate que certains éléments du journal doivent être sauvegardés par des fichiers persistants dans des répertoires spécifiés.
Pendant le fonctionnement de l'agent, les fichiers persistants sont ouverts en écriture (avec fopen(filename, "w")) et écrasés par les dernières données. Le risque de perdre des données de fichiers persistantes si l'écrasement et la séparation du miroir du système de fichiers se produisent en même temps est très faible, aucune gestion spéciale n'est nécessaire. L'écriture dans un fichier persistant N'EST PAS suivie d'une synchronisation forcée avec le support de stockage (fsync() n'est pas appelé).
L'écrasement avec les dernières données est effectué après le signalement réussi de l'enregistrement de fichier journal ou des métadonnées correspondants (taille du journal traité et heure de modification) au serveur Zabbix. Cela peut se produire aussi souvent que chaque élément vérifie si le fichier journal continue de changer.
Aucune action spéciale lors de l'arrêt de l'agent.
Après avoir reçu une liste de vérifications actives, l'agent marque les fichiers persistants obsolètes pour suppression. Un fichier persistant devient obsolète si : 1) l'élément de journal correspondant n'est plus surveillé, 2) un élément de journal est reconfiguré avec un emplacement persistent_dir différent de celui d'avant.
La suppression est effectuée avec un délai de 24 heures car les fichiers journaux à l'état NOTSUPPORTED ne sont pas inclus dans la liste des vérifications actives, mais ils peuvent devenir SUPPORTED plus tard et leurs fichiers persistants seront utiles.
Si l'agent est arrêté avant l'expiration de 24 heures, les fichiers obsolètes ne seront pas supprimés car l'agent Zabbix ne reçoit plus d'informations sur leur emplacement depuis le serveur Zabbix.
Reconfigurer le persistent_dir d'un élément de journal vers l'ancien emplacement persistent_dir pendant que l'agent est arrêté, sans supprimer l'ancien fichier persistant par l'utilisateur - entraînera la restauration de l'état de l'agent à partir de l'ancien fichier persistant résultant dans les messages manqués ou les fausses alertes.
L'agent Zabbix distingue les vérifications actives par leurs clés. Par exemple, logrt[/home/zabbix/test.log] et logrt[/home/zabbix/test.log,] sont des éléments différents. La modification de l'élément logrt[/home/zabbix/test.log,,,10] en frontend vers logrt[/home/zabbix/test.log,,,20] entraînera la suppression de l'élément logrt[/home /zabbix/test.log,,,10] de la liste des vérifications actives de l'agent et la création de l'élément logrt[/home/zabbix/test.log,,,20] (certains attributs sont transmis lors de la modification dans le frontend/serveur , pas dans agent).
Le nom du fichier est composé de la somme MD5 de la clé d'élément avec la longueur de la clé d'élément ajoutée pour réduire les risques de collisions. Par exemple, l'état de l'élément logrt[/home/zabbix50/test.log,,,,,,,,/home/zabbix50/agent_private] sera conservé dans le fichier persistant c963ade4008054813bbc0a650bb8e09266.
Plusieurs éléments de journal peuvent utiliser la même valeur persistent_dir.
persistent_dir est spécifié en tenant compte des dispositions spécifiques du système de fichiers, des points de montage et des options de montage et de la configuration de la mise en miroir du stockage - le fichier persistant doit se trouver sur le même système de fichiers en miroir que le fichier journal surveillé.
Si le répertoire persistent_dir ne peut pas être créé ou n'existe pas, ou si les droits d'accès pour l'agent Zabbix ne permettent pas de créer/écrire/lire/supprimer des fichiers, l'élément de journal devient NOTSUPPORTED.
Si les droits d'accès aux fichiers de stockage persistants sont supprimés pendant le fonctionnement de l'agent ou si d'autres erreurs se produisent (par exemple, disque plein), les erreurs sont consignées dans le fichier journal de l'agent mais l'élément de journal ne devient NON SUPPORTÉ.
Le fichier persistant de l'élément est mis à jour après l'envoi réussi de chaque lot de données (contenant les données de l'élément) au serveur. Par exemple, 'BufferSize' par défaut est 100. Si un élément de journal a trouvé 70 enregistrements correspondants, les 50 premiers enregistrements seront envoyés en un seul lot, le fichier persistant sera mis à jour, puis les 20 enregistrements restants seront envoyés (peut-être avec un certain retard lorsque plus de données sont accumulées ) dans le 2e lot, et le fichier persistant sera à nouveau mis à jour.
Chaque ligne correspondante de l'élément log[]
et logrt[]
et le résultat de chaque log.count[]
et logrt.count[]
requièrent un emplacement libre dans la zone de 50% désignée dans le buffer d'envoi de l'agent. Les éléments buffers sont régulièrement envoyés au serveur (ou proxy) et les emplacements de mémoire tampon sont à nouveau libres.
Bien qu'il existe des emplacements libres dans la zone des fichiers journaux désignée dans le buffer d'envoi de l'agent et que la communication échoue entre l'agent et le serveur (ou le proxy), les résultats de la surveillance des fichiers journaux sont accumulés dans le buffer d'envoi. Cela aide à atténuer les échecs de communication ponctuel.
Pendant les échecs de communication plus longs, tous les emplacements de logs sont occupés et les actions suivantes sont effectuées :
log[]
et logrt[]
sont arrêtées. Lorsque la communication est rétablie et que des emplacements sont libérés dans la mémoire tampon, les vérifications reprennent à partir de la position précédente. Aucune ligne correspondante n'est perdue, elles sont juste reportées plus tard.log.count[]
et logrt.count[]
sont arrêtées si maxdelay = 0
(par défaut). Le comportement est similaire aux éléments log[]
et logrt[]
décrits ci-dessus. Notez que cela peut affecter les résultats de log.count[]
et de logrt.count[]
: par exemple, une vérification compte 100 lignes correspondantes dans un fichier journal, mais comme il n'y a pas d'espace libre dans la mémoire tampon, la vérification est arrêtée. Lorsque la communication est restaurée, l'agent compte les mêmes 100 lignes correspondantes et 70 nouvelles lignes correspondantes. L'agent envoie maintenant compteur = 170 comme s'il avait été trouvé dans une vérification.log.count[]
et logrt.count[]
avec maxdelay > 0
: s'il n'y a pas eu de "saut" pendant la vérification, alors le comportement est similaire à celui décrit ci-dessus. Si un "saut" sur les lignes du fichier journal a eu lieu, la position après le "saut" est conservée et le résultat compté est ignoré. Ainsi, l'agent essaie de suivre un fichier journal en expansion, même en cas d'échec de la communicationIf a regular expression used in log[]
, logrt[]
, log.count[]
or logrt.count[]
item cannot be compiled by PCRE or PCRE2 library then the item goes into NOTSUPPORTED state with an error message. To continue monitoring the log item, the regular expression should be fixed.
If the regular expression compiles successfully, but fails at runtime (on some or on all log records), then the log item remains supported and monitoring continues. The runtime error is logged in the Zabbix agent log file (without the log file record).
Note that the logging of regular expression runtime errors is supported since Zabbix 6.0.21.
The logging rate is limited to one runtime error per check to allow Zabbix agent to monitor its own log file. For example, if 10 records are analyzed and 3 records fail with a regexp runtime error, one record is produced in the agent log.
Exception: if MaxLinesPerSecond=1 and update interval=1 (only 1 record is allowed to analyze per check) then regexp runtime errors are not logged.
zabbix_agentd logs the item key in case of a runtime error, zabbix_agent2 logs the item ID to help identify which log item has runtime errors. It is recommended to redesign the regular expression in case of runtime errors.