Ajouter AWS CloudFront devant S3 et analyser votre trafic avec GoAccess (partie 2)

CloudFlare est un fournisseur DNS formidable mais en ce qui attrait au CDN, je ne suis finalement plus trop convaincu de son utilité pour un site à bas trafic comme le miens. D'ailleurs, essayer de comprendre et suivre ses utilisateurs avec CloudFlare devient extrêmement difficile sauf si on paie pour le forfait Entreprise qui permet l’accès aux fichiers de logs bruts générés par leurs serveurs proxy.

Ajouter le logging au niveau de CloudFront (enregistrer toutes les requêtes)

Afin de pouvoir visualiser vos statistiques de requêtes HTTP avec précision grâce à un logiciel tel que GoAccess, il nous faut activer le logging de CloudFront. Voici donc comment faire en utilisant la console d’AWS.

Il faut d’abord créer un bucket S3 dans lequel tous les fichiers logs vont être envoyés:

  1. Du menu principal, cliquez sur S3
  2. Cliquez sur Create a bucket
  3. Entrez un nom du genre myname-cloudfront-logs
  4. Sélectionnez une région qui fait du sens pour vous

Ensuite, il nous faut activer la génération de logs pour qu’ils se rendent dans le bucket S3:

  1. Du menu Services, cliquez sur CloudFront
  2. Cliquez sur la distribution désirée
  3. Dans l’onglet General, cliquez sur Edit
  4. Activez le Logging en sélectionnant On
  5. Sélectionner votre bucket précédemment créé
  6. Ajoutez un Log Prefix qui correspond à votre site ce qui vous permettra de mettre tous vos logs dans un seul bucket (ex : votrenomdedomain.com)
  7. Vous pouvez laisser le Cookie logging désactivé car un site statique en a rarement besoin de toute façon
  8. Cliquez sur Yes, Edit pour sauvegarder vos changements
Vous avez désormais une distribution CloudFront qui log toutes les requêtes et envoie le tout dans votre bucket S3.

Installer GoAccess

Si vous travaillez sur Linux ou Mac Os X, installez simplement GoAccess tel qu’indiqué sur leur site Web, sinon, utilisez mon setup Vagrant qui préinstallera tout ce qu’il vous faut.

Voici le lien du setup Vagrant:
https://github.com/fredbourni/vagrant-goaccess-awscf

Si vous installez vous même, il vous faudra changer la configuration de base de GoAccess pour accepter le format de log de CloudFront. Vous pouvez aussi vous faciliter la tâche et télécharger et patcher grâce à cloudfront.diff (commande exact: patch goaccess.conf cloudfront.diff).

Télécharger vos fichiers logs locallement

Configurez premièrement AWS CLI pour avoir accès à vos logs. Ensuite, en utilisant la VM Vagrant dans cet example, roulez ces commandes afin d’obtenir tous les fichiers de logs en local:

Exécutez ces commandes:

cd /vagrant
mkdir logs
cd logs
aws s3 sync s3://myname-cloudfront-logs ./

Celles-ci vont résulter à télécharger tous les fichiers logs contenus dans votre bucket pour laisser GoAccess les analyser.

Analyser les logs CloudFront avec GoAccess

GoAccess vous permet de générer un rapport en command line ou de créer un rapport en HTML prêt à être visualisé avec votre fureteur préféré. Créez votre premier rapport HTML...

 zcat /vagrant/logs/yoursite.com/*.gz | goaccess -o /usr/share/nginx/html/yoursite.html

Il suffit ensuite d'aller à l'aide votre fureteur sur http://localhost/yoursite.html

Pour créer un rapport en command line ou pour vous amuser avec GoAccess davantage, rendez-vous sur leur site pour plus de détails: https://goaccess.io/faq, https://goaccess.io/man.

Désactiver le caching de CloudFlare

CloudFlare est le plus souvent utilisé comme CDN, un proxy qui cache les requêtes autour de la planète afin de vous sauver un nombre considérable de requêtes, du moins en théorie. Le problème est que si vous cachez les requêtes HTTP chez CloudFlare, seulement une portion des requêtes se rendent sur CloudFront, donc vous analysez seulement une fraction de votre trafic.

Il vous faut donc désactiver la fonctionnalité de proxy en cliquant sur le nuage dans la section DNS pour tous les domaines pointant sur CloudFront (normalement votresite.com et www.votresite.com). Si vous voyez un nuage avec une flêche qui contourne celui-ci, le tour est joué. Vous avez maintenant CloudFlare en place pour vos DNS mais ne servant plus de CDN interfaçant CloudFront et vos utilisateurs. Du même coup, toutes les requêtes, sans exception, vont aller chez AWS vous permettant d’analyser chaque visite, et évidemment chaque visiteur.

Ah, j'oubliais SSL. Si votre site est en HTTPS, assurez-vous d'avoir un certificat SSL de configuré chez AWS et attribué à votre distribution CloudFront tel qu'expliqué sur ce blog français. C'est gratuit en passant depuis un bon bout de temps!