Une pratique clé pour la journalisation est de centraliser ou d’agréger vos journaux dans un seul emplacement, surtout si vous avez plusieurs serveurs ou niveaux d’architecture. Les applications modernes ont souvent plusieurs niveaux d’infrastructure qui peuvent inclure un mélange de serveurs sur site et de services cloud. Essayer de rechercher le bon fichier pour résoudre une erreur serait incroyablement difficile, et essayer de corréler les problèmes entre les systèmes serait encore plus difficile., Il n’y a rien de plus frustrant que de découvrir que les informations que vous vouliez n’ont pas été capturées dans un fichier journal, ou que le fichier journal qui aurait pu contenir la réponse a été perdu après un redémarrage du serveur.
Cette section explique comment utiliser les services de centralisation pour collecter et centraliser vos fichiers journaux Linux.
avantages
avantages de la centralisation des journaux
La centralisation de vos journaux facilite et accélère la recherche dans les données des journaux, car tous vos journaux sont accessibles à un seul endroit., Au lieu de deviner quel serveur a le bon fichier, vous pouvez simplement accéder à votre référentiel de données de journal pour rechercher les événements pertinents. La centralisation est un élément clé des grandes solutions de gestion, car elle leur permet d’analyser, d’analyser et d’indexer les journaux avant de les stocker dans un seul emplacement. Cela facilite et accélère le dépannage et la résolution des problèmes de production. La centralisation offre également ces avantages.
- Les journaux sont sauvegardés dans un emplacement séparé, les protégeant contre les pertes accidentelles ou involontaires., Cela les garde également accessibles au cas où vos serveurs tombent en panne ou ne répondent plus.
- Vous n’avez pas besoin D’utiliser des commandes SSH ou GREP inefficaces, qui peuvent utiliser des ressources informatiques précieuses pour des recherches complexes.
- Vous pouvez réduire l’espace disque utilisé par les fichiers journaux.
- Les ingénieurs peuvent résoudre les problèmes de production sans accéder directement aux systèmes.
bien que la gestion centralisée des journaux soit généralement la meilleure option, il existe encore des risques tels qu’une mauvaise connectivité réseau entraînant une perte de données ou des journaux utilisant une grande quantité de bande passante réseau., Nous discuterons de la façon de résoudre intelligemment ces problèmes dans les sections ci-dessous.
populaires
outils populaires pour centraliser les journaux
la plupart des systèmes Linux centralisent déjà les journaux à l’aide d’un démon syslog. Comme nous l’avons expliqué dans la section Linux Logging Basics, syslog est un service qui collecte des fichiers journaux à partir de services et d’applications s’exécutant sur l’hôte. Il peut écrire ces journaux dans un fichier ou les transférer à un autre serveur via le protocole syslog., Il existe plusieurs implémentations syslog que vous pouvez utiliser, notamment:
- Rsyslog– un démon léger installé sur la plupart des distributions Linux courantes.
- syslog-ng– le deuxième démon syslog le plus populaire pour Linux.
- logstash – un agent de poids plus lourd qui peut effectuer un traitement et une analyse plus avancés. Il peut lire les messages syslog à l’aide du plugin d’entrée syslog et les transférer vers n’importe quel nombre de destinations de sortie.
- fluentd– un autre agent avec des capacités de traitement avancées. Il prend également en charge l’entrée syslog à l’aide du plugin in_syslog.,
Rsyslog est l’implémentation syslog la plus populaire et est installé par défaut dans de nombreuses distributions de Linux. Si vous avez besoin de fonctionnalités de filtrage plus avancées ou d’analyse personnalisée, Logstash est le choix le plus populaire. Logstash est également étroitement intégré à Elastic Stack, qui fournit une solution complète de gestion des journaux. Pour ce guide, nous allons nous concentrer sur l’utilisation de rsyslog car il est si largement utilisé.
config
Configurer Rsyslog.conf
le fichier de configuration rsyslog principal se trouve à/etc/rsyslog.conf
., Vous pouvez stocker des fichiers de configuration supplémentaires dans le /etc/rsyslog.d/ répertoire. Par exemple, sur Ubuntu, ce répertoire contient/etc/rsyslog.d/50-default.conf
, qui demande à rsyslog d’écrire les journaux système dans un fichier. Vous pouvez en savoir plus sur les fichiers de configuration dans la documentation rsyslog.
la configuration de rsyslog implique la configuration des sources d’entrée (où rsyslog reçoit les journaux), ainsi que des règles de destination pour savoir où et comment les journaux sont écrits. Rsyslog fournit déjà des valeurs par défaut pour la réception des événements syslog, il vous suffit donc normalement d’ajouter votre serveur de centralisation en sortie., Rsyslog utilise RainerScript pour sa syntaxe de configuration. Dans cet exemple, nous transmettons nos journaux au serveur à central.example.com
sur le port TCP 514.
action(type="omfwd" protocol="tcp" target="central.example.com" port="514")
alternativement, nous pourrions envoyer nos journaux à une solution de gestion des journaux. Les fournisseurs de gestion de journaux basés sur le Cloud comme SolarWinds ® Loggly® vous fourniront un nom d’hôte et un port auxquels vous pouvez envoyer vos journaux simplement en modifiant les champs target
et port
. Consultez la documentation de votre fournisseur lors de la configuration de rsyslog..,
direct
journalisation des fichiers et répertoires
Rsyslog fournit le module imfile, qui lui permet de surveiller les fichiers journaux pour les nouveaux événements. Cela vous permet de spécifier un fichier ou un répertoire comme source de journal. Rsyslog peut surveiller des fichiers individuels ainsi que des répertoires entiers.
Par exemple, nous voulons surveiller les fichiers journaux créés par le serveur Apache. Nous pouvons le faire en créant un nouveau fichier dans /etc/rsyslog.d/
appelé apache.conf
, chargez le module imfile et ajoutez les fichiers journaux D’Apache en entrée.,
Le paramètre File prend en charge les caractères génériques pour surveiller plusieurs fichiers ainsi que des répertoires.
protocole
quel protocole: UDP, TCP ou RELP?
Vous pouvez choisir parmi trois protocoles principaux lors de la transmission des données de journal: UDP, TCP et RELP.
UDP envoie des messages sans garantie de livraison ni d’accusé de réception (ACK). Il fait une seule tentative pour envoyer un paquet, et si la livraison échoue, il n’essaie pas à nouveau. Il est beaucoup plus rapide et utilise moins de ressources que les autres protocoles, mais ne doit être utilisé que sur des réseaux fiables tels que localhost., UDP ne prend pas non plus en charge le cryptage des journaux.
TCP est le protocole le plus couramment utilisé pour le streaming sur Internet, car il nécessite un ACK avant d’envoyer le paquet suivant. Si la livraison échoue, il continuera à réessayer jusqu’à ce qu’il délivre avec succès le message. Cependant, TCP nécessite une prise de contact et une connexion active entre l’expéditeur et le récepteur, qui utilise des ressources réseau supplémentaires.
RELP (Reliable Event Logging Protocol) est conçu spécifiquement pour rsyslog et est sans doute le plus fiable de ces trois protocoles., Il accuse réception des données dans la couche application et les renverra en cas d’erreur. Comme il est moins courant, vous devrez vous assurer que votre destination prend également en charge ce protocole.
Si rsyslog rencontre un problème lors du stockage des journaux, tel qu’une connexion réseau indisponible, il mettra les journaux en file d’attente jusqu’à ce que la connexion soit restaurée. Les journaux en file d’attente sont stockés en mémoire par défaut. Cependant, la mémoire est limitée et si le problème persiste, les journaux peuvent dépasser la capacité de mémoire, ce qui peut entraîner une perte de données. Pour éviter cela, envisagez d’utiliser des files d’attente de disque.,
avertissement: vous pouvez perdre des données si vous stockez les journaux uniquement en mémoire.
que
envoyer de manière fiable avec des files d’attente assistées par disque
Rsyslog peut mettre vos journaux en file d’attente sur le disque lorsque la mémoire est pleine. Les files d’attente assistées par disque rendent le transport des journaux plus fiable. Voici un exemple de la façon de configurer une règle de transfert de journal dans rsyslog avec une file d’attente assistée par disque.
chiffrer
chiffrer les journaux à l’aide de TLS
lorsque la sécurité et la confidentialité des données sont un problème, vous devriez envisager de chiffrer vos journaux. Les renifleurs et les intermédiaires pourraient lire vos données de journal si vous les transmettez sur internet en texte clair., Vous devez chiffrer vos journaux s’ils contiennent des informations privées, des données d’identification sensibles ou des données réglementées par le gouvernement. Le démon rsyslog peut chiffrer vos journaux à l’aide du protocole TLS et sécuriser vos données.
le processus d’activation du chiffrement TLS dépend de votre configuration de journalisation. Généralement, cela implique les étapes suivantes.
- créez une autorité de certification (CA). Il existe des exemples de certificats dans le répertoire
/contrib/gnutls
de rsyslog, qui ne sont bons que pour les tests, mais vous devez créer le vôtre pour la production., Si vous utilisez un service de gestion des journaux, il en aura un prêt pour vous. - générez un certificat numérique pour votre serveur afin d’activer TLS, ou utilisez-en un auprès de votre fournisseur de services de gestion des journaux.
- configurez votre service rsyslog pour envoyer des données chiffrées TLS à votre service de gestion des journaux.
Voici un exemple de configuration rsyslog avec cryptage TLS. Remplacez CERT et DOMAIN_NAME par votre propre paramètre de serveur.,
$DefaultNetstreamDriverCAFile /etc/rsyslog.d/keys/ca.d/CERT.crt$ActionSendStreamDriver gtls$ActionSendStreamDriverMode 1$ActionSendStreamDriverAuthMode x509/name$ActionSendStreamDriverPermittedPeer *.DOMAIN_NAME.com
Les services de gestion des journaux tels que SolarWinds Loggly fournissent souvent leurs propres CAs et certificats, que vous devez simplement référencer dans votre configuration rsyslog. Par exemple, l’activation de TLS avec Loggly vous oblige uniquement à télécharger le certificat Loggly dans votre /etc/rsyslog.d / directory, mettez à jour votre configuration et redémarrez le service rsyslog.
tout d’abord, téléchargez le certificat.
$ mkdir -pv /etc/rsyslog.d/keys/ca.d$ cd /etc/rsyslog.d/keys/ca.d$ curl -O https://logdog.loggly.com/media/logs-01.loggly.com_sha12.crt
Ensuite, ouvrez le /etc/rsyslog.d/22-loggly.conf
le fichier de configuration et ajouter le code suivant:
Enfin, redémarrez rsyslog.,
$ sudo service rsyslog restart
pratique
meilleures pratiques pour la journalisation des applications
en plus des journaux que Linux crée par défaut, il est également judicieux de centraliser les journaux des applications importantes. Presque toutes les applications serveur basées sur Linux écrivent leurs informations d’état dans des fichiers journaux distincts et dédiés. Cela inclut les produits de base de données comme PostgreSQL ou MySQL, les serveurs web comme Nginx ou Apache, les pare-feu, les services d’impression et de partage de fichiers, les serveurs de répertoires et DNS, etc.
la première chose que les administrateurs font après l’installation d’une application est de la configurer., Les applications Linux ont généralement un.fichier conf quelque part dans le répertoire /etc. Cela peut aussi être ailleurs, mais c’est le premier endroit où les gens recherchent des fichiers de configuration. Selon la complexité ou la taille de l’application, le nombre de paramètres configurables peut être faible ou en centaines. Reportez-vous à la documentation de l’application pour en savoir plus, ou utilisez la commande localiser pour essayer de trouver le fichier vous-même.
# locate postgresql.conf/usr/pgsql-9.4/share/postgresql.conf.sample/var/lib/pgsql/9.4/data/postgresql.conf
Définir un Emplacement Standard pour les Fichiers Journaux
les systèmes Linux généralement enregistrer leurs fichiers log dans /var/log
répertoire., Cela fonctionne bien, mais vérifiez si l’application enregistre sous un répertoire spécifique sous /var/log
. Si elle le fait, grand. Sinon, vous pouvez créer un répertoire dédié pour l’application sous /var/log
. Pourquoi? C’est parce que d’autres applications enregistrent leurs fichiers journaux sous /var/log
aussi et si votre application enregistre plus d’un fichier journal—peut—être une fois par jour ou après chaque redémarrage du service-il peut être un peu difficile d’explorer un grand répertoire pour trouver le fichier que vous voulez.,
Si vous avez plusieurs instances de l’application en cours d’exécution dans votre réseau, cette approche est également pratique. Pensez à une situation où vous pouvez avoir une douzaine de serveurs web en cours d’exécution dans votre réseau. Si vos journaux sont stockés sur un serveur syslog central, comment savez-vous quel fichier journal contient les journaux de quel serveur? En enregistrant chaque serveur dans un répertoire distinct, vous savez exactement où chercher lors du dépannage d’un serveur.
utiliser un nom de fichier statique
de nombreuses applications ajoutent des données dynamiques à leur nom de fichier journal, telles que la date actuelle ou l’horodatage., Ceci est utile pour diviser automatiquement les journaux par date, mais il est plus difficile pour les services comme rsyslog de trouver le dernier fichier. Une meilleure approche consiste à utiliser un nom sans changement pour votre fichier journal, puis à utiliser logrotate pour appliquer un horodatage ou un numéro aux fichiers journaux plus anciens.
Ajouter et faire Pivoter les Fichiers Journaux
les Applications doivent ajouter aux fichiers journaux existants au lieu de les écraser. Cela permet de s’assurer que toutes les lignes de journal sont capturées et qu’aucune donnée n’est perdue, même si l’application redémarre. Cependant, les fichiers journaux peuvent devenir très volumineux au fil du temps., Si vous essayez de trouver la cause profonde d’un problème, vous pouvez finir par chercher à travers des dizaines de milliers de lignes.
nous vous recommandons d’ajouter vos journaux à un seul fichier, mais nous vous recommandons également de configurer l’application pour faire pivoter ses fichiers journaux de temps en temps. Des outils comme logrotate peuvent le faire automatiquement en copiant le fichier journal actuel vers un nouvel emplacement, en lui donnant un nom unique, puis en tronquant le fichier journal actuel., Cela présente un certain nombre d’avantages, notamment:
- Les journaux sont répartis entre les fichiers par date et heure, ce qui facilite la recherche de journaux pour une date spécifique
- chaque fichier journal est beaucoup plus petit, ce qui les rend plus faciles à rechercher et à envoyer sur un réseau
- La sauvegarde des fichiers journaux est beaucoup plus facile, et la suppression ou l’archivage des journaux plus anciens peut être fait beaucoup plus rapidement
la fréquence de rotation des fichiers journaux dépend du nombre de journaux que vous générez. En règle générale, commencez par faire tourner vos journaux une fois par jour.
définir des stratégies de conservation des fichiers journaux
combien de temps conservez-vous un fichier journal?, Que vient définitivement vers le bas à l’exigence de l’entreprise. On pourrait vous demander de conserver une semaine d’informations de journalisation, ou il peut s’agir d’une exigence réglementaire de conserver des données de 10 ans. Quoi qu’il en soit, les journaux doivent partir du serveur à un moment ou à un autre.
à notre avis, sauf indication contraire, vous devez conserver au moins un mois de fichiers journaux en ligne, et les copier dans un emplacement secondaire (comme un serveur de journalisation). Tout ce qui est plus ancien peut être déchargé sur un support séparé. Par exemple, si vous êtes sur AWS, vos anciens journaux peuvent être copiés sur Glacier.,
stocker les fichiers journaux sur un lecteur séparé
les fichiers journaux sont écrits en permanence, ce qui peut conduire à des e / s de disque élevées sur les systèmes occupés. Comme meilleure pratique, vous devez monter /var/log
sur un périphérique de stockage séparé. Cela empêche les Écritures de fichiers journaux d’interférer avec les performances de vos applications, en particulier sur le stockage sur disque. Cela empêche également les fichiers journaux de remplir tout le lecteur au cas où ils deviendraient trop volumineux.
formater vos entrées de journal
Quelles informations devez-vous saisir dans chaque entrée de journal?
cela dépend de ce Que vous voulez utiliser le journal pour., Voulez-vous l’utiliser uniquement à des fins de dépannage, ou voulez-vous capturer tout ce qui se passe? Est-ce une obligation légale de capturer ce que chaque utilisateur exécute ou consulte?
Si vous utilisez des journaux à des fins de dépannage, enregistrez uniquement les erreurs, les avertissements ou les messages fatals. Il n’y a aucune raison de capturer des messages de débogage, par exemple. L’application peut enregistrer les messages de débogage par défaut, ou un autre administrateur peut l’avoir activé pour un autre exercice de dépannage, mais vous devez le désactiver car il peut certainement remplir l’espace rapidement., Au minimum, capturez la date, l’heure, le nom de l’application cliente, L’adresse IP source ou le nom d’hôte client, l’action effectuée et le message lui-même.
par exemple, considérez le comportement de journalisation par défaut de PostgreSQL. Les journaux sont stockés dans /var/log/postgresql
, et chaque fichier commence par postgresql – suivi de la date. Les fichiers sont tournés quotidiennement, et les fichiers plus anciens sont ajoutés avec un nombre basé sur le moment où ils ont été tournés. Chaque ligne de journal peut être préfixée par des champs tels que l’horodatage actuel, l’utilisateur actuel, le nom de la base de données, L’ID de session et L’ID de transaction., Vous pouvez modifier ces paramètres en éditant le fichier de configuration de PostgreSQL (/etc/postgresql/11/main/postgresql.conf
sur Debian).
par défaut, chaque ligne de journal affiche l’horodatage et L’ID du processus PostgreSQL suivi du message de journal.
surveiller les fichiers journaux avec Imfile
traditionnellement, la façon la plus courante pour les applications de consigner leurs données est avec des fichiers. Les fichiers sont faciles à rechercher sur une seule machine, mais ne s’adaptent pas bien avec plus de serveurs. Avec rsyslog, vous pouvez surveiller les fichiers pour les modifications et importer de nouveaux événements dans syslog, où vous pouvez ensuite transférer les journaux vers un serveur centralisé., Ceci est fait en utilisant le module imfile. Pour activer le module, créez un nouveau fichier de configuration dans /etc/rsyslog.d/
, puis ajoutez une entrée de fichier comme celle-ci.
Ajoutez vos flux de sortie après cette configuration, et rsyslog enverra des journaux du fichier spécifié à la destination de sortie.
connectez-vous directement au Socket Syslog avec Imuxsock
un socket est similaire à un handle de fichier UNIX, sauf qu’il lit les données en mémoire au lieu de les écrire sur le disque. Dans le cas de syslog, cela vous permet d’envoyer des journaux directement à syslog sans avoir à écrire d’abord dans un fichier.,
cette approche permet d’utiliser efficacement les ressources système Si votre serveur est limité par des e / s de disque ou si vous n’avez pas besoin de journaux de fichiers locaux. L’inconvénient de cette approche est que le socket a une taille de file d’attente limitée. Si votre démon syslog tombe en panne ou ne peut pas suivre, vous risquez de perdre les données du journal.
pour activer la connexion de socket dans rsyslog, ajoutez la ligne suivante à votre configuration rsyslog (elle est activée par défaut).
$ModLoad imuxsock
Cela crée un socket /dev/log socket
par défaut, mais vous pouvez changer cela en modifiant la SysSock.Nom de paramètre., Vous pouvez également définir des options telles que la limitation de débit et le contrôle de flux. Pour plus d’informations, consultez la documentation rsyslog imuxsock.
journaux UDP avec Imupd
certaines applications produisent des données de journal au format UDP, qui est le protocole standard lors du transfert de fichiers journaux sur un réseau ou votre hôte local. Votre démon syslog reçoit ces journaux et peut les traiter ou les transmettre dans un format différent. Vous pouvez également envoyer les journaux à un autre serveur syslog ou à une solution de gestion des journaux.,
utilisez la commande suivante pour configurer rsyslog pour accepter les données syslog sur UDP sur le port standard 514.
$ModLoad imudp$UDPServerRun 514
gérer la Configuration sur de nombreux serveurs
lorsque vous n’avez que quelques serveurs, vous pouvez configurer manuellement la journalisation sur eux. Une fois que vous avez quelques dizaines de serveurs ou plus, vous pouvez profiter des outils qui rendent cela plus facile et plus évolutive. À un niveau de base, l’objectif de chaque outil est d’activer syslog sur chacun de vos serveurs, d’appliquer une configuration et de s’assurer que les modifications prennent effet.,
Pssh
Pssh (parallèle ou SSH) vous permet d’exécuter une commande ssh sur plusieurs serveurs en parallèle. Utilisez un déploiement pssh pour seulement un petit nombre de serveurs. Si l’un de vos serveurs tombe en panne, vous devez ssh dans le serveur défaillant et effectuer le déploiement manuellement. Si vous avez plusieurs serveurs défaillants, le déploiement manuel sur eux peut prendre beaucoup de temps.
Puppet/Chef
Puppet et Chef sont des outils de gestion de configuration qui peuvent configurer automatiquement tous vos serveurs et les amener au même état. Ils peuvent surveiller vos serveurs et les garder synchronisés., Puppet et Chef sont des outils puissants capables d’installer des logiciels, de créer des fichiers, de redémarrer des services, etc. Si vous ne savez pas lequel est le plus adapté à la gestion de la configuration de votre déploiement, vous pouvez apprécier la comparaison des deux outils par InfoWorld.
certains fournisseurs proposent également des modules ou des recettes pour configurer syslog. Par exemple, Loggly fournit un module Puppet qui utilise rsyslog pour transférer automatiquement les journaux de vos agents. Installez le module Loggly Puppet sur votre Puppet master, puis ajoutez la configuration suivante à votre manifeste Puppet.,
# Send syslog events to Loggly class { 'loggly::rsyslog': customer_token => 'YOUR_CUSTOMER_TOKEN', }
Une fois que vos agents seront actualisés, ils commenceront à se connecter à Loggly.
Kubernetes
Kubernetes est un outil d’orchestration pour gérer des conteneurs sur plusieurs nœuds. Kubernetes fournit une architecture de journalisation complète qui collecte et écrit automatiquement les journaux de conteneur dans un fichier sur la machine hôte. Vous pouvez afficher les journaux d’un Pod spécifique en exécutant la commande kubectl logs <nom du pod>, qui est utile pour accéder aux journaux d’applications sur un serveur distant.,
de nombreuses solutions de gestion des journaux fournissent des agents qui peuvent être déployés sur Kubernetes pour collecter à la fois les journaux d’application et les journaux d’hôte. Par exemple, Loggly fournit un DaemonSet qui déploie un Pod de journalisation sur chaque nœud d’un cluster. Le Pod collecte les journaux des autres Pods et de l’hôte lui-même, et le déployer en tant que DaemonSet permet de s’assurer qu’il y a toujours une instance en cours d’exécution sur chaque nœud. La journalisation d’un cluster Kubernetes avec Loggly est aussi simple que d’exécuter les commandes suivantes.
Panneau
Docker utilise des contenants pour exécuter des applications indépendantes de du serveur sous-jacent., Il est souvent utilisé comme runtime de conteneur pour des orchestrateurs comme Kubernetes, mais peut être utilisé comme une plate-forme autonome. ZDNet a un article détaillé sur L’utilisation de Docker dans votre centre de données.,
Il existe plusieurs façons de se connecter à partir de conteneurs Docker, notamment:
- journalisation via le pilote de journalisation Docker vers le système hôte (méthode recommandée)
- routage de tous les journaux de conteneurs vers un seul conteneur de journalisation dédié (c’est ainsi que fonctionne le conteneur logspout)
- journalisation vers un conteneur de journalisation sidecar
- ajout d’un agent de journalisation au conteneur
Vous pouvez également., Si votre conteneur dispose d’un service syslog en cours d’exécution, vous pouvez soit envoyer des journaux de l’hôte au conteneur via syslog, soit monter les fichiers journaux de l’hôte dans le conteneur et utiliser un agent de surveillance des fichiers pour lire les fichiers.
Scripts ou Agents du fournisseur
La plupart des solutions de gestion des journaux proposent des scripts ou des agents pour faciliter l’envoi de données depuis un ou plusieurs serveurs. Les agents lourds peuvent utiliser des ressources système supplémentaires. Certains fournisseurs s’intègrent aux démons rsyslog existants pour transférer les journaux sans utiliser beaucoup plus de ressources., Loggly, par exemple, fournit un script qui transmet les journaux de rsyslog aux serveurs D’ingestion Loggly à l’aide du module omfwd.
voir. L’analyser. L’inspecter. Résolvez-le
voyez ce qui compte.
commencer L’essai gratuit
Laisser un commentaire