Je commence une sĂ©rie d'articles oĂč je souhaite partager mon expĂ©rience de connexion d'Exchange et d'ELK. Cette stack aidera Ă traiter de grands volumes de logs sans se demander Ă quel moment les outils de logging habituels cesseront de nous ĂȘtre utiles. DĂ©couvrons ce nouveau combattant des logs.
Exchange dispose d'un systÚme de logging assez étendu. Les logs les plus demandés sont les logs de tracking, qui suivent le parcours d'un courriel spécifique au sein de l'organisation de messagerie ; les logs du serveur web, qui suivent chaque nouvelle session d'utilisateur dans le systÚme, et les logs d'applications web spécifiques avec différents niveaux de détails sur les sessions. Exchange peut également stocker des logs bruts des protocoles smtp, imap et pop3.
Quels outils pouvons-nous utiliser pour travailler avec les logs :
- Le cmdlet natif Get-MessageTrackingLog : pratique pour traiter les logs de tracking ;
- L'outil logparser : pour le logging utilise un langage pseudo-SQL pour la recherche et fonctionne assez rapidement ;
- Un serveur SQL externe : pour des cas trÚs spécifiques (par exemple, l'analyse de données sur de grandes périodes de temps).
Tout cela fonctionne assez bien quand nous avons quelques serveurs et que le volume de logs traité est mesuré en dizaines à centaines de gigaoctets. Mais que se passe-t-il si le nombre de serveurs atteint des dizaines et que la taille des logs dépasse le téraoctet ? Ce schéma commence probablement à s'effondrer.
Et voilà ce qui se passe : Get-MessageTrackingLog commence à avoir des délais d'attente, logparser atteint la limite de l'architecture 32 bits, et l'exportation vers le serveur SQL échoue au moment le plus inopportun, ne gérant pas un exception multiline du service.
C'est alors qu'un nouvel acteur entre en jeu â la stack ELK, qui est spĂ©cialement conçue pour jongler avec d'Ă©normes volumes de logs dans des dĂ©lais raisonnables et avec une consommation raisonnable de ressources.
Dans la premiĂšre partie, je dĂ©taillerai comment connecter filebeat, qui fait partie de la stack ELK â il est responsable de la lecture et de l'envoi de fichiers texte simples, dans lesquels diffĂ©rentes applications Ă©crivent leurs logs. Dans les articles suivants, nous examinerons plus en dĂ©tail les composants Logstash et Kibana. Ainsi, l'archive du fichier agent filebeat
Installation
peut ĂȘtre tĂ©lĂ©chargĂ©e sur ce site .
c:Program Filesfilebeat . Ensuite, il est nécessaire d'exécuter le script PowerShellinstall-service-filebeat.ps1 , qui est inclus, pour installer le service filebeat., inclus, pour l'installation du service filebeat.
Nous sommes maintenant prĂȘts Ă commencer Ă configurer le fichier de configuration.
Résilience
Filebeat garantit la livraison des journaux au systÚme de collecte de journaux. Cela se fait en maintenant un registre des entrées dans les fichiers journaux. Le registre contient des informations sur les entrées qui ont été lues à partir des fichiers journaux, ainsi que sur les entrées spécifiques qui ont été livrées à destination.
Si une entrĂ©e ne peut pas ĂȘtre livrĂ©e, filebeat tentera de la renvoyer jusqu'Ă ce qu'il reçoive une confirmation de livraison de la part du systĂšme rĂ©cepteur, ou que le fichier journal d'origine soit supprimĂ© lors de la rotation.
Lors du redémarrage du service filebeat, il lira dans le registre les informations sur les derniÚres entrées lues et livrées et lira les entrées dans les fichiers journaux en fonction des informations dans le registre.
Cela permet de minimiser le risque de perte d'informations sur les journaux qui doivent ĂȘtre envoyĂ©s aux serveurs elasticlogstash, en cas de dĂ©faillances imprĂ©vues et lors des opĂ©rations de maintenance des serveurs.
Pour en savoir plus, vous pouvez : Comment Filebeat maintient l'état des fichiers et Comment Filebeat garantit une livraison au moins une fois ?
Configuration
Toute la configuration est réalisée dans un fichier de configuration au format fichier yml, qui est divisé en plusieurs sections. Examinons certaines d'entre elles qui participent au processus de collecte des journaux depuis les serveurs Exchange.
Bloc de traitement des journaux
Le bloc de traitement des journaux commence par le champ :
filebeat.inputs :Nous allons utiliser un outil de collecte de journaux commun :
- type : logEnsuite, nous indiquons le statut (activĂ©) et les chemins vers le dossier contenant les journaux. Par exemple, dans le cas des journaux IIS, les paramĂštres peuvent ĂȘtre les suivants :
enabled: true
paths:
- C:inetpublogsLogFilesW3SVC1*.log
- C:inetpublogsLogFilesW3SVC2*.log
Une autre configuration importante : comment filebeat doit lire les entrées multilignes. Par défaut, filebeat considÚre une ligne du fichier journal comme une seule entrée. Cela fonctionne bien, tant que les journaux ne commencent pas à contenir des exceptions liées à un fonctionnement incorrect du service. Dans ce cas, les exceptions peuvent consister en plusieurs lignes. Ainsi, filebeat doit considérer l'entrée multilignes comme une seule, si la ligne suivante commence par une date. Le format d'entrée des journaux dans Exchange est tel que chaque nouvelle entrée dans le fichier journal commence par une date. Dans la configuration, cette condition se présente comme suit :
multiline:
pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
negate: true
match: afterIl est judicieux d'ajouter des tags à l'enregistrement envoyé, par exemple :
tags: ['IIS', 'ex-srv1']Et n'oubliez pas d'exclure les lignes commençant par un symbole de hachage :
exclude_lines: ['^#']Ainsi, le bloc de lecture des logs ressemblera Ă ce qui suit :
filebeat.inputs:
- type: log
enabled: true
paths:
- C:inetpublogsLogFilesW3SVC1*.log
- C:inetpublogsLogFilesW3SVC2*.log
multiline:
pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
negate: true
match: after
tags: ['IIS', 'ex-srv1']
exclude_lines: ['^#']Bloc d'envoi des logs
Filebeat envoie les enregistrements individuels dans le fichier log sous forme d'objet json, dans lequel un enregistrement spĂ©cifique du log est contenu dans un seul champ message. Si nous voulons travailler avec ces informations, nous devons d'abord analyser ce champ en diffĂ©rents champs. Cela peut ĂȘtre fait, par exemple, dans logstash. Celui-ci sera le destinataire des enregistrements de filebeat. Voici Ă quoi cela pourrait ressembler dans le fichier de configuration de filebeat :
output.logstash:
hosts: ["logstash1.domain.com:5044"]
S'il y a plusieurs serveurs, vous pouvez activer l'équilibrage de charge : alors filebeat n'enverra pas les logs au premier serveur disponible dans la liste, mais répartira les logs envoyés entre plusieurs serveurs :
hosts: ["logstash1.domain.com:5044", "logstash2.domain.com:5044"]
loadbalance: true Lors du traitement des logs, filebeat ajoute Ă l'json envoyĂ©, en plus de l'enregistrement du log qui est contenu dans le champ message, un certain nombre de mĂ©tadonnĂ©es, ce qui affecte la taille du document qui sera envoyĂ© Ă elastic. Ces mĂ©tadonnĂ©es peuvent ĂȘtre sĂ©lectivement supprimĂ©es de l'envoi. Cela se fait dans le bloc processor Ă l'aide du processeur drop_fields. Il est possible d'exclure, par exemple, les champs suivants :
processors:
- drop_fields:
fields: ["agent.ephemeral_id", "agent.hostname", "agent.id", "agent.type", "agent.version", "agent", "ecs.version", "ecs", "input.type", "input", "log.offset", "version"]Il convient d'approcher le choix des champs Ă exclure avec soin, car certains d'entre eux peuvent ĂȘtre utilisĂ©s du cĂŽtĂ© d'elasticsearch pour la crĂ©ation des index.
Ainsi, le bloc d'envoi des logs ressemblera Ă ce qui suit :
output.logstash:
hosts: ["logstash1.domain.com:5044", "logstash2.domain.com:5044"]
loadbalance: true
processors:
- drop_fields:
fields: ["agent.ephemeral_id", "agent.hostname", "agent.id", "agent.type", "agent.version", "agent", "ecs.version", "ecs", "input.type", "input", "log.offset", "version"]ParamĂštres de journalisation de filebeat
Il est judicieux de définir les paramÚtres de journalisation suivants :
- Niveau de journalisation info;
- Enregistrer les logs dans des fichiers, situés par défaut (répertoire logs, dans le répertoire d'installation de filebeat);
- Nom du fichier de log â filebeat;
- Conserver les 10 derniers fichiers de logs;
- Lancer la rotation dĂšs que la taille atteint 1 Mo.
Le bloc final de configuration du journal sera le suivant :
logging.level: info
logging.to_files: true
logging.files:
name: filebeat
keepfiles: 10
rotateeverybytes: 1048576Configuration finale
Nous avons rassemblé la configuration, et elle se présente maintenant comme suit :
filebeat.inputs:
- type: log
enabled: true
paths:
- C:inetpublogsLogFilesW3SVC1*.log
- C:inetpublogsLogFilesW3SVC2*.log
multiline:
pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
negate: true
match: after
tags: ['IIS', 'ex-srv1']
exclude_lines: ['^#']
output.logstash:
hosts: ["logstash1.domain.com:5044", "logstash2.domain.com:5044"]
loadbalance: true
processors:
- drop_fields:
fields: ["agent.ephemeral_id", "agent.hostname", "agent.id", "agent.type", "agent.version", "agent", "ecs.version", "ecs", "input.type", "input", "log.offset", "version"]
logging.level: info
logging.to_files: true
logging.files:
name: filebeat
keepfiles: 10
rotateeverybytes: 1048576Il est important de comprendre que le format du fichier de configuration est yml. Il est donc essentiel de respecter correctement les espaces et les signes moins.
Filebeat est capable de vérifier le fichier de configuration et, si la syntaxe présente des erreurs, il indiquera dans quelle ligne et à quel endroit la syntaxe est incorrecte. La vérification se fait de la maniÚre suivante :
.filebeat.exe test configDe plus, filebeat peut vérifier la connectivité réseau du récepteur de journaux. La vérification se lance comme suit :
.filebeat.exe test outputDans les prochaines parties, je parlerai de la connexion et de l'interaction entre Exchange et les composants Logstash et Kibana.
Liens utiles
Source : habr.com
