Académique Documents
Professionnel Documents
Culture Documents
système
Jonathan Schaeffer
OSU IUEM, service informatique
Technopole Brest Iroise
rue Dumont D’Urville
29 280 Plouzané
Résumé
Les journaux d’événements des systèmes et des services sont une ressource indispensable pour l’adminis-
trateur. On les exploite pour analyser une activité, pour détecter une anomalie ou pour déclencher des
alertes.
La multiplication des serveurs virtuels et des services à exploiter introduit un éclatement de ces journaux en
une multitude de fichiers sur un nombre important de serveurs. Les administrateurs doivent intégrer d’autres
contraintes. D’une part le législateur nous demande d’être en mesure de fournir les journaux d’activité sur
une année, d’autre part l’ANSSI préconise de gérer de façon centralisée cette mine d’information, dans le
cadre d’une démarche pour améliorer la sécurité d’un parc de serveurs. Il devient maintenant crucial de
gérer de façon fiable le volume de données produites par les journaux système.
Si des solutions simples existent pour concentrer les journaux (rsyslog, syslog-ng), elles ne consti-
tuent que la première partie d’une série de problématiques :
— déployer à grande échelle la concentration de logs ;
— s’assurer que ces configurations sont toujours en bon état ;
— exploiter la masse d’information qui sera concentrée.
Nous proposons ici des éléments de solution à ces trois problématiques. Ils sont déployés en production à
l’Institut Universitaire Européen de la Mer et s’appuient sur plusieurs éléments logiciels détaillés dans cet
article.
Mots clefs
Syslog, Gestion d’infrastructure.
2 Objectifs et contraintes
Les objectifs du projet sont les suivants :
— sécuriser les journaux système ;
— proposer un outil de recherche et d’exploitation des journaux ;
— disposer d’un outil d’alertes basé sur les événements consignés.
2.3.1 Elasticsearch
Tout d’abord, les bases de données non-relationnelles (NoSQL) sont d’excellents supports pour le stockage
des journaux et leur exploitation. Les bases NoSQL s’appuient sur des paires clés/valeurs et des index afin
de manipuler efficacement un grand nombre de données non structurées. Le projet elasticsearch 2 est
un bon exemple de cette technologie, il est conçu comme une base de données distribuée, ce qui permet
de répartir son déploiement sur plusieurs postes de travail. Citons également redis 3 , un autre système
NoSQL permettant de gérer des queues de messages.
2.3.2 Logstash
On voit également arriver de nouveaux projets pour la gestion des logs, avec des partis pris différents.
Parmi eux, le très populaire logstash 4 gère les journaux en 4 étapes :
La collecte : Les événements peuvent être extraits d’une grande quantité de sources différentes ;
La normalisation : Les événement collectés peuvent être transformés de façon très permissive, pour par
exemple devenir conformes à la RFC Syslog ;
Le transfert : logstash fonctionne en architecture client-serveur pour transporter les événements sur le
réseau ;
Le stockage : De nombreuses possibilités de stockage sont disponibles pour l’administrateur, et parmi elles
l’enregistrement dans une base elasticsearch.
2.3.3 Kibana
Enfin, tirant parti des possibilités de la base NoSQL elasticsearch et des technologies issues du dé-
veloppement Web, le projet Kibana 5 propose une interface d’exploration des logs très efficace à partir d’un
navigateur web.
Ces trois briques étant souvent assemblées, on les désigne fréquemment sous leurs initiales ELK.
3 Mise en œuvre
La solution mise en œuvre dans le système d’information de l’IUEM s’appuie à la fois sur les technologies
éprouvées et sur les nouvelles possibilités offertes par les nouveaux acteurs.
La figure 1 décrit l’infrastructure mise en œuvre. Celle ci est décrite, brique par brique dans les sections
suivantes.
Si le traitement des messages traverse de nombreuses étapes, l’ensemble reste robuste et résilient. Notre
implémentation ne prévoit pas de redondance mais il est possible de la mettre en œuvre pour chaque brique.
2. https://www.elastic.co/products/elasticsearch
3. http://redis.io/
4. https://www.elastic.co/products/logstash
5. https ://www.elastic.co/products/kibana
Elasticsearch
Logstash Logstash
Redis
shipper Indexer
3.2 La centralisation
Un serveur dédié est chargé de collecter les événements. La collecte se fait aussi par syslog-ng qui a
deux fonctions :
Tout d’abord, il copie des événements dans une arborescence de fichiers permettant de retrouver les évé-
nements par système source et par type. Ensuite, il transmet les événements, sans les modifier, au point
d’entrée pour leur bancarisation. Ce message transite par protocole UDP sur le même serveur, vers un port
tenu par le shipper logstash.
3.3 La bancarisation
Les journaux étant maintenant centralisés, nous souhaitons les enregistrer dans une base de données non-
relationnelle. Pour cela, nous avons mis en place une grappe (cluster) elasticsearch. En pratique,
cette grappe n’est composée que d’un seul nœud, mais au besoin, il est possible de l’étendre sur un nombre
arbitraire de nœuds.
Le service de centralisation syslog-ng ne peut pas écrire directement dans la base elasticsearch
(toutefois, cette fonctionnalité a été ajoutée à la version 6.4 de rsyslog et à la version 3.7 de syslog-ng,
au prix d’une emprunte mémoire importante).
3.4 L’exploitation
La solution décrite est distribuée. Chaque élément peut être déployé sur un ou plusieurs serveurs, tout en
conservant le point d’entrée unique pour l’interrogation des messages.
La base elasticsearch, l’indexer logstash, le gestionnaire de files redis, le shipper log-
stash, et le centralisateur de logs peuvent être répartis en plusieurs instances et sur plusieurs serveurs, afin
de s’adapter aux dimensions de l’architecture.
Par ailleurs, il est possible d’arrêter des éléments de cette chaîne sans perdre de messages. Ainsi, faire des
mises à jour de chaque élément du système peut se faire sans arrêt.
Enfin, les messages stockés en fichiers ou dans la base elasticsearch sont nettoyés une fois par mois
afin d’éliminer les informations trop anciennes.
Figure 2 - Extrait de configuration logstash pour une alerte par messagerie instantanée
Il est possible de construire plusieurs tableaux de bords correspondants aux besoins de plusieurs vues. Par
exemple, mettre en évidence les accèes SSH refusés par serveur sur les 2 derniers jours, compter le nombre
de messages d’erreurs par hôte, ou encore montrer une répartition des événements par sévérité.
La figure 3 montre un exemple simple de tableau de bord avec un histogramme du nombre de logs de sévérité
supérieure à ”warning”.
4 Retour d’expérience
Le système décrit ci-dessus est en production depuis 2 ans. Il a prouvé sa robustesse et sa capacité à répondre
aux attentes de notre équipe d’exploitation.
Voici quelques éléments chiffrés sur les dimensions de notre système :
Serveurs collectés 118
Nombre de messages 487 millions
Nombre de messages par mois 27 millions
Taille de la base 195Go
L’architecture décrite est déployée sur un seul serveur virtuel qui est correctement dimensionné pour le parc
considéré.
Cette solution a aussi eu un effet de bord très positif. En effet, nous utilisons de façon plus systématique
le protocole syslog dans tous les développements d’outils d’administration ou les produits déployés (par la
commande logger ou les bibliothèques de différents langages de programmation).
C’est un bénéfice considérable pour la surveillance de l’activité des tâches automatiques et pour le débogage,
car l’interface de consultation centralisée et le système d’alerte sont une valeur ajoutée immédiate.
5 Conclusion
Avec cette architecture, nous répondons aux recommandations ANSSI suivantes :
R5 export des journaux ;
R6 centralisation des journaux ;
R7 possibilité de redondance de l’infrastructure de gestion des journaux ;
R9 transfert en temps réel de journaux ;