Comment analyser vos journaux CloudWatch avec le service Elasticsearch d'AWS
Elasticsearch est un moteur de recherche open source. Il est couramment utilisé en conjonction avec l'agrégation de journaux pour faciliter l'analyse des journaux du serveur. AWS le propose en tant que service géré avec Kibana, un tableau de bord de visualisation pour Elasticsearch.
Pourquoi s'embêter avec les fichiers journaux?
Tout dans Linux est enregistré. Les actions système sont enregistrées dans /var/log/syslog
et la plupart des applications créent des fichiers journaux. Plus particulièrement, les serveurs Web créent des entrées de journal pour chaque demande, faisant de l'analyse des journaux un outil très puissant. Nginx enregistre un tas d'informations pour chaque demande, y compris:
- L'adresse IP de l'utilisateur qui se connecte
- Un nom d'utilisateur, si vous utilisez l'authentification de base (vide la plupart du temps)
- Le moment de la demande
- La demande elle-même (par exemple, "
GET /index.php?url=abc
") - Le code d'état renvoyé
- Nombre d'octets envoyés, hors en-têtes HTTP (utile pour suivre la taille réelle du trafic)
- Le référent HTTP (c'est-à-dire le site d'origine de l'utilisateur)
- L'agent utilisateur du navigateur de l'utilisateur
Par exemple, si vous souhaitez savoir quelles pages de votre site sont les plus sujettes aux erreurs, vous pouvez effectuer une recherche par code d'erreur, puis vérifier quelles sont les premières pages pour chaque code.
Ce n’est pas vraiment possible de le faire manuellement, surtout si vous disposez de nombreux serveurs Web. Elasticsearch (ES) résout ce problème en vous permettant d'effectuer des requêtes complexes sur des fichiers journaux agrégés. Kibana est un tableau de bord de visualisation et sert d'interface pour ES. AWS fournit ces deux services sous la forme d'un seul service géré avec AWS Elasticsearch Service.
Vous devez payer pour le serveur sur lequel Elasticsearch s'exécute, même si vous ne payez qu'une légère prime par rapport aux tarifs EC2 standard. Si vous ne faites que des analyses de temps en temps, vous n’avez pas besoin d’exécuter ce serveur en permanence. Cependant, si vous l'exécutez tout le temps, vous pouvez acheter des instances réservées pour réduire le prix.
Pour que tout cela fonctionne, vous devez extraire vos fichiers journaux de votre instance EC2 et les placer dans CloudWatch. AWS rend cela facile avec l'agent CloudWatch Logs. Vous devriez lire notre guide sur sa configuration avant de continuer avec Elasticsearch.
Si vous n'exécutez qu'un ou deux serveurs Web, vous n'avez probablement pas besoin d'un service complet uniquement pour consulter vos journaux. CloudWatch Logs lui-même dispose d'excellents outils de recherche intégrés à partir de l'onglet Insights et peut effectuer des visualisations simples.
Mais, si vous avez de nombreux serveurs et beaucoup de données à analyser, vous pouvez bénéficier d'Elasticsearch et de Kibana.
Premiers pas avec AWS Elasticsearch
Rendez-vous sur la console Elasticsearch et créez un nouveau domaine. Un domaine ES est un cluster de serveurs qui fonctionnent comme un seul moteur de recherche. La configuration est assez simple; donnez-lui un nom et spécifiez quelle instance vous souhaitez exécuter. La valeur par défaut est r5.large
, mais vous devriez probablement configurer un t2.small
instance d'abord pour l'essayer.
Donnez-lui une taille de disque suffisante pour stocker vos journaux (la valeur par défaut est de 10 Go) et cliquez sur créer. L'initialisation des nouveaux domaines prend environ 10 minutes, alors prenez une tasse de café et revenez un peu.
Une fois qu'il est configuré, accédez à la console CloudWatch et sélectionnez votre groupe de journaux. Sous le bouton Actions, choisissez "Diffuser vers Amazon Elasticsearch Service":
Sélectionnez le domaine ES que vous venez de configurer, puis créez un nouveau rôle IAM pour la fonction Lambda qui effectue la diffusion en continu. La stratégie doit être préconfigurée, mais si ce n'est pas le cas, elle doit accéder à Elasticsearch:
{ "Version": "2012-10-17", "Statement": ( { "Action": ( "es:*" ), "Effect": "Allow", "Resource": "arn:aws:es:region:account-id:domain/target-domain-name/*" } ) }
Cliquez sur suivant, et vous serez invité à spécifier le format. Vous pouvez entrer un format personnalisé ici ou choisir «Format de journal commun», valeur par défaut pour la plupart des journaux de serveur Web.
Cliquez sur la configuration et démarrez la diffusion du journal. Vous devriez voir les journaux ingérés en quelques secondes.
Rendez-vous sur votre instance Kibana (l'URL du point de terminaison se trouve dans le panneau d'informations du domaine) et créez l'index initial. Une toute nouvelle information de journal diffusée vers le cluster Elasticsearch apparaît, que vous pouvez parcourir dans vos journaux dans l'onglet Découvrir.
À partir de là, tout est configuré et vous êtes libre d'utiliser Kibana comme vous le souhaitez. Sous l'onglet «Visualiser», vous trouverez des options de création et de configuration de graphiques que vous pouvez organiser en tableaux de bord.
Vous pouvez surveiller l'intégrité globale de votre domaine Elasticsearch à partir du panneau d'informations:
Elasticsearch et Kibana nécessitent une assez grande puissance de traitement, en particulier lorsque vous travaillez avec d'énormes ensembles de données et des requêtes complexes. ES lui-même peut être configuré pour enregistrer ses propres requêtes dans CloudWatch, sous l'onglet «Journaux», ce qui est utile pour voir quelles requêtes prennent le plus de temps à traiter (et si vous avez besoin ou non d'une instance plus grande).