3 Surveillance des fichiers journaux

Vue d'ensemble

Zabbix peut être utilisé pour la surveillance centralisée et l'analyse de fichiers journaux avec ou sans prise en charge de la rotation des journaux.

Les notifications peuvent être utilisées pour avertir les utilisateurs lorsqu'un fichier journal contient certaines chaînes ou certains motifs de chaînes.

Pour surveiller un fichier journal, vous devez disposer de :

  • un agent Zabbix en cours d'exécution sur l'hôte
  • un élément de surveillance des journaux configuré

La taille limite d'un fichier journal surveillé dépend de la prise en charge des gros fichiers.

Configuration

Vérifier les paramètres de l'agent

Assurez-vous que, dans le fichier de configuration de l'agent :

  • Le paramètre Hostname correspond au nom de l'hôte dans l'interface.
  • Les serveurs du paramètre ServerActive sont spécifiés pour le traitement des vérifications actives.
Configuration de l'élément

Configurez un élément de surveillance des journaux.

Tous les champs de saisie obligatoires sont marqués d'un astérisque rouge.

Pour les éléments de surveillance des journaux, vous devez saisir:

Type Sélectionnez Zabbix agent (active) ici.
Key Utilisez l'une des clés d'élément suivantes:
log[] ou logrt[]:
Ces deux clés d'élément permettent de surveiller les journaux et de filtrer les entrées du journal selon une expression régulière sur le contenu, si elle est présente.
Par exemple: log[/var/log/syslog,error]. Assurez-vous que le fichier dispose des permissions de lecture pour l'utilisateur 'zabbix', sinon l'état de l'élément sera défini sur 'unsupported'.
log.count[] ou logrt.count[]:
Ces deux clés d'élément permettent de renvoyer uniquement le nombre de lignes correspondantes.
Consultez la section des clés d'élément Zabbix agent pris en charge pour plus de détails sur l'utilisation de ces clés d'élément et de leurs paramètres.
Type d'information Renseigné 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 un autre type d'information approprié que Journal.
Notez que le choix d'un type d'information autre que Journal entraînera la perte de l'horodatage local.
Intervalle de mise à jour (en sec) Ce paramètre définit la fréquence à laquelle l'agent Zabbix vérifie les modifications dans le fichier journal. Le régler à 1 seconde garantit que vous recevez les nouveaux enregistrements dès que possible.
Format d'heure du journal Dans ce champ, vous pouvez éventuellement spécifier le modèle pour l'analyse de l'horodatage de la ligne du journal. Espaces réservés pris en charge:
* y: Année (1970-2038)
* M: Mois (01-12)
* d: Jour (01-31)
* h: Heure (00-23)
* m: Minute (00-59)
* s: Seconde (00-59)
Si ce champ est laissé vide, l'horodatage sera défini sur 0 en heure Unix, représentant le 1er janvier 1970.
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).
Elle commence par six positions de caractères pour le PID, suivies de la date, de l'heure et du reste du message.
Le format d'heure du journal pour cette ligne serait "pppppp:yyyyMMdd:hhmmss".
Notez que les caractères "p" et ":" sont des espaces réservés et peuvent être n'importe quel caractère sauf "yMdhms".

Notes importantes

  • Le serveur et l'agent conservent la trace de la taille d'un journal surveillé et de sa dernière heure de modification (pour logrt) dans deux compteurs. De plus :
    • L'agent utilise également en interne des numéros d'inode (sur UNIX/GNU/Linux), des index de fichier (sur Microsoft Windows) et des sommes MD5 des 512 premiers octets du fichier journal afin d'améliorer les décisions lorsque les fichiers journaux sont tronqués et pivotés.
    • Sur les systèmes UNIX/GNU/Linux, il est supposé que les systèmes de fichiers où sont stockés les fichiers journaux renvoient des numéros d'inode, qui peuvent être utilisés pour suivre les fichiers.
    • Sur Microsoft Windows, l'agent Zabbix détermine le type de système de fichiers sur lequel se trouvent les fichiers journaux et utilise :
      • Sur les systèmes de fichiers NTFS, des index de fichier 64 bits.
      • Sur les systèmes de fichiers ReFS (uniquement à partir de Microsoft Windows Server 2012), des ID de fichier 128 bits.
      • Sur les systèmes de fichiers où les index de fichier changent (par exemple FAT32, exFAT), un algorithme de repli est utilisé pour adopter une approche raisonnable dans des conditions incertaines lorsque la rotation des fichiers journaux entraîne plusieurs fichiers journaux ayant la même heure de dernière modification.
    • Les numéros d'inode, les index de fichier et les sommes MD5 sont collectés en interne par l'agent Zabbix. Ils ne sont pas transmis au serveur Zabbix et sont perdus lorsque l'agent Zabbix est arrêté.
    • Ne modifiez pas l'heure de dernière modification d'un fichier journal (par exemple avec touch), et ne remplacez pas un fichier journal surveillé en recopiant un fichier sous son nom d'origine (cela crée un nouvel inode). Dans l'un ou l'autre cas, Zabbix peut traiter le fichier comme un fichier différent et le relire depuis le début, ce qui peut produire des alertes en double.
    • S'il existe plusieurs fichiers journaux correspondants pour un élément logrt[] et que l'agent Zabbix suit le plus récent d'entre eux, puis que ce fichier journal le plus récent est supprimé, un message d'avertissement "there are no files matching "<regexp mask>" in "<directory>" est consigné. L'agent Zabbix ignore les fichiers journaux dont l'heure de modification est antérieure à la plus récente heure de modification vue par l'agent pour l'élément logrt[] en cours de vérification.
  • L'agent commence à lire le fichier journal à partir du point où il s'était arrêté la fois précédente.
  • Le nombre d'octets déjà analysés (le compteur de taille) et la dernière heure de modification (le compteur de temps) sont stockés dans la base de données Zabbix et sont envoyés à l'agent afin de s'assurer que l'agent commence à lire le fichier journal à partir de ce point dans les cas où l'agent vient d'être démarré ou a reçu des éléments qui étaient auparavant désactivés ou non pris en charge. Cependant, si l'agent a reçu du serveur un compteur de taille non nul, mais que l'élément logrt[] ou logrt.count[] ne parvient pas à trouver de fichiers correspondants, le compteur de taille est réinitialisé à 0 afin d'analyser depuis le début si les fichiers apparaissent plus tard.
  • Chaque fois que le fichier journal devient plus petit que le compteur de taille du journal connu par l'agent, le compteur est réinitialisé à zéro et l'agent commence à lire le fichier journal depuis le début en tenant compte du compteur de temps.
  • S'il existe plusieurs fichiers correspondants ayant la même heure de dernière modification dans le répertoire, l'agent tente alors d'analyser correctement tous les fichiers journaux ayant la même heure de modification et d'éviter d'omettre des données ou d'analyser deux fois les mêmes données, bien que cela ne puisse pas être garanti dans toutes les situations. L'agent ne suppose aucun schéma particulier de rotation des fichiers journaux et n'en détermine aucun. Lorsqu'il est confronté à plusieurs fichiers journaux ayant la même heure de dernière modification, l'agent les traite dans un ordre lexicographique décroissant. Ainsi, pour certains schémas de rotation, les fichiers journaux seront analysés et signalés dans leur ordre d'origine. Pour d'autres schémas de rotation, l'ordre d'origine des fichiers journaux ne sera pas respecté, ce qui peut entraîner un signalement des enregistrements des fichiers journaux correspondants dans un ordre modifié (le problème ne se produit pas si les fichiers journaux ont des heures de dernière modification différentes).
  • L'agent Zabbix traite les nouveaux enregistrements d'un fichier journal une fois toutes les Update interval secondes.
  • L'agent Zabbix n'envoie pas plus de maxlines lignes d'un fichier journal par seconde. La limite évite de surcharger les ressources réseau et CPU et remplace la valeur par défaut fournie par le paramètre MaxLinesPerSecond dans le fichier de configuration de l'agent.
  • Pour trouver la chaîne requise, Zabbix traitera 10 fois plus de nouvelles lignes que la valeur définie dans MaxLinesPerSecond. Ainsi, par exemple, si un élément log[] ou logrt[] a un Update interval de 1 seconde, l'agent analysera par défaut au plus 200 enregistrements de fichier journal et enverra au plus 20 enregistrements correspondants au serveur Zabbix en une seule vérification. En augmentant MaxLinesPerSecond dans le fichier de configuration de l'agent ou en définissant le paramètre maxlines dans la clé de l'élément, la limite peut être augmentée jusqu'à 10000 enregistrements de fichier journal analysés et 1000 enregistrements correspondants envoyés au serveur Zabbix en une seule vérification. Si le Update interval est défini à 2 secondes, les limites pour une vérification seraient fixées à une valeur 2 fois plus élevée que pour un Update interval de 1 seconde.
  • De plus, les valeurs log et log.count sont toujours limitées à 50 % de la taille du tampon d'envoi de l'agent, même s'il n'y a aucune valeur non liée aux journaux dans celui-ci. Ainsi, pour que les valeurs maxlines soient envoyées en une seule connexion (et non en plusieurs), le paramètre BufferSize de l'agent doit être au moins égal à maxlines x 2. L'agent Zabbix peut téléverser des données pendant la collecte des journaux et libérer ainsi le tampon, tandis que Zabbix agent 2 arrêtera la collecte des journaux jusqu'à ce que les données soient téléversées et que le tampon soit libéré, ce qui est effectué de manière asynchrone.
  • En l'absence d'éléments de journal, toute la taille du tampon de l'agent est utilisée pour les valeurs non liées aux journaux. Lorsque des valeurs de journal arrivent, elles remplacent au besoin les anciennes valeurs non liées aux journaux, jusqu'à la limite de 50 % définie.
  • Pour les enregistrements de fichier journal de plus de 256 kB, seuls les 256 kB initiaux sont comparés à l'expression régulière et le reste de l'enregistrement est ignoré. Cependant, si l'agent Zabbix est arrêté alors qu'il traite un enregistrement long, l'état interne de l'agent est perdu et l'enregistrement long peut être analysé à nouveau et différemment après le redémarrage de l'agent.
  • Note spéciale pour les séparateurs de chemin \ : si file_format est file\.log, alors il ne doit pas y avoir de répertoire file, car il n'est pas possible de définir sans ambiguïté si . est échappé ou s'il s'agit du premier symbole du nom de fichier.
  • Les expressions régulières pour logrt sont prises en charge uniquement dans le nom de fichier ; la correspondance par expression régulière sur le répertoire n'est pas prise en charge.
  • Sur les plateformes UNIX, un élément logrt[] devient NOTSUPPORTED si un répertoire dans lequel les fichiers journaux sont censés se trouver n'existe pas.
  • Sur Microsoft Windows, si un répertoire n'existe pas, l'élément ne deviendra pas NOTSUPPORTED (par exemple, si le répertoire est mal orthographié dans la clé de l'élément).
  • L'absence de fichiers journaux pour un élément logrt[] ne le rend pas NOTSUPPORTED. Les erreurs de lecture des fichiers journaux pour un élément logrt[] sont consignées comme des avertissements dans le fichier journal de l'agent Zabbix, mais ne rendent pas l'élément NOTSUPPORTED.
  • Le fichier journal de l'agent Zabbix peut être utile pour déterminer pourquoi un élément log[] ou logrt[] est devenu NOTSUPPORTED. Zabbix peut surveiller le fichier journal de son agent, sauf lorsque DebugLevel=4 ou DebugLevel=5.
  • La recherche d'un point d'interrogation à l'aide d'une expression régulière, par exemple \?, peut entraîner des faux positifs si le fichier texte contient des symboles NUL, car ceux-ci sont remplacés par ? par Zabbix afin de poursuivre le traitement de la ligne jusqu'au caractère de nouvelle ligne.

Extraction de la partie correspondante d'une expression régulière

Il peut parfois être utile d'extraire uniquement la valeur intéressante d'un fichier cible au lieu de renvoyer toute la ligne lorsqu'une correspondance d'expression régulière est trouvée.

Les éléments de journal ont la capacité d'extraire les valeurs souhaitées à partir des lignes correspondantes. Cela est réalisé grâce au paramètre supplémentaire output dans les éléments log et logrt.

L'utilisation du paramètre output permet d'indiquer le "groupe de capture" de la correspondance qui peut nous intéresser.

Par exemple :

log[/path/to/the/file,"large result buffer allocation.*Entries: ([0-9]+)",,,,\1]

devrait permettre de renvoyer le nombre d'entrées trouvé dans le contenu suivant :

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

Seul le nombre sera renvoyé, car \1 fait référence au premier et unique groupe de capture : ([0-9]+).

Et, grâce à la possibilité d'extraire et de renvoyer un nombre, la valeur peut être utilisée pour définir des déclencheurs.

Utilisation du paramètre maxdelay

Le paramètre maxdelay dans les éléments de journal permet d’ignorer certaines lignes plus anciennes des fichiers journaux afin que les lignes les plus récentes soient analysées dans les maxdelay secondes.

Spécifier maxdelay > 0 peut entraîner l’ignorance d’enregistrements importants du fichier journal et des alertes manquées. Utilisez-le avec prudence, à 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, certaines applications commencent, dans certaines situations, à é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 analysés consciencieusement et les lignes correspondantes seront 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 (qui protège le serveur contre un trop grand nombre de lignes de journal correspondantes entrantes) et une limite de 10*'maxlines' (qui protège le CPU et les E/S de l’hôte contre une surcharge par l’agent lors d’une seule vérification). Néanmoins, il existe 2 problèmes avec cette protection intégrée. Premièrement, un grand nombre de messages potentiellement peu informatifs sont signalés au serveur et occupent 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 prendre du retard sur les enregistrements de journal les plus récents pendant des heures. Il est fort probable que vous préfériez être informé plus tôt de la situation actuelle dans les fichiers journaux plutôt que de parcourir d’anciens enregistrements pendant des heures.

La solution à ces 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 valeurs, 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 poursuit l’analyse du fichier journal comme d’habitude.

Si le délai est supérieur à maxdelay, l’agent ignore un bloc d’un fichier journal en le "sautant" 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

La valeur "to byte" est approximative, car après le "saut" l’agent ajuste la position dans le fichier au début d’une ligne de journal, qui peut se trouver plus loin dans le fichier ou plus tôt.

Selon la comparaison entre la vitesse de croissance et la vitesse d’analyse du fichier journal, vous pouvez ne voir aucun "saut", des "sauts" rares ou fréquents, des "sauts" importants ou petits, ou même un petit "saut" à chaque vérification. Les fluctuations de la charge système et la latence réseau affectent également le calcul du délai et donc le fait de "sauter" en avant pour suivre le paramètre maxdelay.

Il n’est pas recommandé de définir maxdelay < update interval (cela peut entraîner des "sauts" fréquents et de petite taille).

Notes sur la gestion de la rotation des fichiers journaux avec copytruncate

logrt avec l'option copytruncate suppose que différents fichiers journaux contiennent des enregistrements différents (au moins leurs horodatages sont différents), par conséquent les sommes MD5 des blocs initiaux (jusqu'aux 512 premiers octets) seront différentes. Deux fichiers ayant les mêmes sommes MD5 des 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 de doublons. Cependant, des situations telles que la création de plusieurs copies d'un fichier journal avec le même horodatage, une rotation du fichier journal plus fréquente que l'intervalle de mise à jour de l'élément logrt[], ou des redémarrages fréquents de l'agent ne sont pas recommandées. L'agent tente de gérer raisonnablement toutes ces situations, mais de bons résultats ne peuvent pas être garantis dans tous les cas.

Notes sur les fichiers persistants pour les éléments log*[]

Objectif des fichiers persistants

Lorsque l'agent Zabbix est démarré, il reçoit une liste de vérifications actives depuis le serveur Zabbix ou le proxy. Pour les métriques log*[], il reçoit la taille du journal traité et l'heure de modification afin de déterminer à partir de quel point commencer la surveillance du fichier journal. Selon la taille réelle du fichier journal et l'heure de modification signalées 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 ensemble plus large d'attributs pour suivre 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 dans lequel cet état de l'élément log[], log.count[], logrt[] ou logrt.count[] est stocké 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'utilisation est la surveillance d'un 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 séparés. Sur la copie active, le fichier journal continue de croître et reçoit de nouveaux enregistrements. L'agent Zabbix l'analyse et envoie la taille du journal traité et l'heure de modification au serveur. Sur la copie passive, le fichier journal reste inchangé, bien en retard par rapport à 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 reprendre la surveillance du fichier journal à l'endroit où l'agent s'était arrêté au moment de la séparation du miroir du système de fichiers, l'agent restaure son état à partir du fichier persistant.

Fonctionnement de l'agent avec un fichier persistant

Au démarrage, l'agent Zabbix ne connaît rien des fichiers persistants. Ce n'est qu'après avoir reçu une liste de vérifications actives de la part du serveur Zabbix (proxy) que l'agent constate que certains éléments de journal doivent être pris en charge 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 avec les données les plus récentes. Le risque de perdre des données du fichier persistant si l'écrasement et la séparation du miroir du système de fichiers se produisent en même temps est très faible ; aucun traitement particulier n'est prévu à cet effet. L'écriture dans le fichier persistant n'est PAS suivie d'une synchronisation forcée vers le support de stockage (`fsync()` n'est pas appelé).

L'écrasement avec les données les plus récentes est effectué après le signalement réussi à Zabbix server d'un enregistrement de fichier journal correspondant ou de métadonnées (taille du journal traitée et heure de modification). Cela peut se produire aussi souvent qu'à chaque vérification d'élément si le fichier journal continue de changer.

Aucune action particulière n'est effectuée 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 alors utiles.

Si l'agent est arrêté avant l'expiration des 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 alors 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, ce qui provoquera des messages manqués ou de fausses alertes.

Nom et emplacement des fichiers persistants

Zabbix agent 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] dans l'interface en 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 conservés lors de la modification dans l'interface/serveur, mais pas dans l'agent).

Le nom du fichier est composé de la somme MD5 de la clé de l'élément, à laquelle est ajoutée la longueur de la clé de l'élément afin de réduire la possibilité 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 de persistent_dir.

persistent_dir est spécifié en tenant compte de la disposition particulière du système de fichiers, des points de montage et des options de montage, ainsi que de la configuration de mise en miroir du stockage - le fichier persistant doit se trouver sur le même système de fichiers 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 Zabbix agent 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 persistant sont supprimés pendant le fonctionnement de l'agent ou si d'autres erreurs surviennent (par exemple, disque plein), les erreurs sont consignées dans le fichier journal de l'agent, mais l'élément de journal ne passe pas à l'état NOTSUPPORTED.

Charge sur les E/S

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, la valeur par défaut de BufferSize est 100. Si un élément de journal a trouvé 70 enregistrements correspondants, alors les 50 premiers enregistrements seront envoyés dans un premier lot, le fichier persistant sera mis à jour, puis les 20 enregistrements restants seront envoyés (éventuellement avec un certain délai lorsque davantage de données sont accumulées) dans le deuxième lot, et le fichier persistant sera à nouveau mis à jour.

Actions si la communication échoue entre l'agent et le serveur

Chaque ligne correspondante des éléments log[] et logrt[] ainsi que le résultat de chaque vérification des éléments log.count[] et logrt.count[] nécessite un emplacement libre dans la zone dédiée de 50 % du tampon d'envoi de l'agent. Les éléments du tampon sont régulièrement envoyés au serveur (ou au proxy) et les emplacements du tampon sont à nouveau libres.

Tant qu'il reste des emplacements libres dans la zone de journal dédiée du tampon 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 journaux sont accumulés dans le tampon d'envoi. Cela permet d'atténuer les brèves interruptions de communication.

Lors de pannes de communication plus longues, tous les emplacements de journal sont occupés et les actions suivantes sont effectuées :

  • Les vérifications des éléments log[] et logrt[] sont arrêtées. Lorsque la communication est rétablie et que des emplacements libres sont disponibles dans le tampon, les vérifications reprennent à partir de la position précédente. Aucune ligne correspondante n'est perdue, elle est simplement signalée plus tard.
  • Les vérifications log.count[] et logrt.count[] sont arrêtées si maxdelay = 0 (par défaut). Le comportement est similaire à celui des éléments log[] et logrt[] décrits ci-dessus. Notez que cela peut affecter les résultats de log.count[] et logrt.count[] : par exemple, une vérification compte 100 lignes correspondantes dans un fichier journal, mais comme il n'y a plus d'emplacements libres dans le tampon, la vérification est arrêtée. Lorsque la communication est rétablie, l'agent compte les mêmes 100 lignes correspondantes ainsi que 70 nouvelles lignes correspondantes. L'agent envoie alors count = 170 comme si elles avaient été trouvées lors d'une seule vérification.
  • Les vérifications log.count[] et logrt.count[] avec maxdelay > 0 : s'il n'y a pas eu de "saut" pendant la vérification, le comportement est similaire à celui décrit ci-dessus. Si un "saut" au-dessus de lignes du fichier journal a eu lieu, alors la position après le "saut" est conservée et le résultat compté est ignoré. Ainsi, l'agent essaie de suivre l'évolution d'un fichier journal croissant, même en cas de panne de communication.

Gestion des erreurs de compilation et d'exécution des expressions régulières

Si une expression régulière utilisée dans un élément log[], logrt[], log.count[] ou logrt.count[] ne peut pas être compilée par la bibliothèque PCRE ou PCRE2, alors l'élément passe à l'état NOTSUPPORTED avec un message d'erreur.
Pour continuer à surveiller l'élément de journal, l'expression régulière doit être corrigée.

Si l'expression régulière se compile correctement, mais échoue à l'exécution (sur certains ou sur tous les enregistrements du journal), alors l'élément de journal reste pris en charge et la surveillance continue.
L'erreur d'exécution est consignée dans le fichier journal de l'agent Zabbix (sans l'enregistrement du fichier journal).

Le taux de journalisation est limité à une erreur d'exécution par vérification afin de permettre à l'agent Zabbix de surveiller son propre fichier journal.
Par exemple, si 10 enregistrements sont analysés et que 3 enregistrements échouent avec une erreur d'exécution regexp, un seul enregistrement est produit dans le journal de l'agent.

Exception : si MaxLinesPerSecond=1 et intervalle de mise à jour=1 (un seul enregistrement est autorisé à être analysé par vérification), alors les erreurs d'exécution regexp ne sont pas consignées.

zabbix_agentd consigne la clé de l'élément en cas d'erreur d'exécution, zabbix_agent2 consigne l'ID de l'élément afin d'aider à identifier quel élément de journal présente des erreurs d'exécution.
Il est recommandé de redéfinir l'expression régulière en cas d'erreurs d'exécution.