Mon application est hébergée sur un cluster Amazon EC2. Chaque instance écrit des événements dans des fichiers journaux. Je dois collecter (et exploiter des données) sur ces journaux à la fin de chaque journée. Quelle est la méthode recommandée pour collecter ces journaux dans un emplacement central? J'ai pensé à plusieurs options, mais je ne sais pas trop comment aller:
Nous utilisons Logstash sur chaque hôte (déployé via Puppet) pour collecter et envoyer les événements de journal dans une file d'attente de messages (RabbitMQ, mais peut être Redis) sur un hôte central. Une autre instance de Logstash récupère les événements, les traite et enregistre le résultat dans ElasticSearch . Une interface/ Kibana web est utilisée pour effectuer une recherche dans cette base de données.
Il est très capable, évolue facilement et est très flexible. Logstash a des tonnes de filtres pour traiter les événements de différentes entrées et peut générer de nombreux services, ElasticSearch en étant un. Nous envoyons actuellement environ 1,2 million d'événements de journal par jour à partir de nos instances EC2, sur du matériel léger. La latence d'un événement de journal d'un événement à l'autre est d'environ 1 seconde dans notre configuration.
Voici une documentation sur ce type d’installation: https://www.elastic.co/guide/fr/logstash/current/getting-started-with-logstash.html , et une démonstration de l’interface de recherche Kibana avec certaines données en direct.
Cette question est ancienne (décembre 2014), mais occupe toujours une place de choix lors d'une recherche Google sur ce sujet.
Amazon offre maintenant un moyen de faire certaines de ces choses via CloudWatch. Il a la capacité de mettre en correspondance le message de journal et de déclencher des alarmes en fonction de ce qui se passe dans l'application. Selon la nature de l'exploration de données à effectuer, il peut être possible d'utiliser leur API pour extraire les événements agrégés souhaités. Voir http://aws.Amazon.com/blogs/aws/cloudwatch-log-service/
Je me sers de Loggly et cela semble faire l'affaire
Cela me permet d’envoyer tous mes journaux via TCP à leur service et d’avoir un emplacement central pour surveiller tous mes fichiers journaux,
Cela me permet également d'archiver mes fichiers journaux sur S3, ce qui est bien aussi
Je ne l'ai pas essayé à cette fin, mais Amazon semble recommander l'utilisation de SimpleDB:
http://aws.Amazon.com/simpledb/usecases_logging/
Voici un paquet qui pourrait vous être utile - il est dit que vous pouvez l’utiliser pour capturer stdout/stderr dans SimpleDB:
Jetez un coup d’œil à la version gratuite de Splunk -, elle gérera la collecte de fichiers journaux à distance et vous fournira également de très bons outils de recherche et d’analyse.
Utilisez syslog-ng, un outil populaire qui transfère les messages de journal via TCP, éventuellement chiffré.
Je ne l'ai pas encore implémenté, mais j'ai découvert Facebook Scribe et cela semble être une bonne idée. https://github.com/facebookarchive/scribe
Jusqu'à ce que je commence, je faisais exactement ce que vous avez mentionné pour # 1: j'ai un travail cron qui utilise sftp pour extraire les fichiers. J'ai choisi cela parce que même si je faisais le n ° 2, il est arrivé que la machine ec2 se bloque et que je sois obligé de retirer les fichiers journaux de toute façon.
* Avertissement: je travaille chez Sumo:
Sumo Logic Free est également une option relativement facile: