[Kafka][Symfony] Utiliser KAFKA + Symfony pour envoyer les logs dans ELK (EleasticSearch)

Nous allons voir comment configurer les divers outils pour envoyé les logs de symfonys dans ELK en passant par kafka

Installer les extensions permettant de communiquer avec kafka

Dans un premier temps, nous allons installer le nécessaire sur notre poste pour pouvoir communiquer avec kafka.

 

Avec linux / docker

Dans votre DockerFile ajouter les lignes suivantes.

 

Avec Windows

Avec windows les chose se complique un peut (comme d’habitude).

Téléchagerles DLL de rdkafka correspondant à votre version de php : https://pecl.php.net/package/rdkafka

  • Déplacer librdkafka.dll dans ‘C:\Windows\System32’
  • Déplacer php_rdkafka.dll dans le dossier ‘ext’ de php et l’activer dans vos php.ini (celui de votre version de php + celui de WAMP si vous l’utiliser) en ajoutant ‘extension=php_rdkafka.dll’
  • télécharger https://www.nuget.org/packages/librdkafka.redist/0.11.6-RC2 et déplacer le dans ‘C:\Windows\System32’

 

installation et configuration du bundle permettant d’envoyer des messages a kafka

Installation

Le bundle permettant la communication avec kafka est le suivant : widicorp/kafka-bundle
Installer le :

 

Configuration

Puis configurons le bundle pour communique avec notre serveur (fichier config/packages/kafka.yaml). Les seuls paramètres que vous avez à changer dans votre application sont les ‘topics’ vers lesquels vous allez envoyer des messages.

Utiliser un ‘producer’

Il est désormais possible de récupérer le ‘producer’ comme un service qui a comme nom ‘kafka.producer.logs’ et de l’utiliser :

 

Automatisation des log Symfony vers kafka

Maintenant que nous savons envoyer des messages vers kafka, nous allons faire en sorte d’envoyer automatiquement les messages de logs de niveau erreur au minimum, vers kafka.

configuration de monolog

Nous allons ajouter un ‘handler’ dans monolog qui va transmettre les log à un service que nous allons créer ensuite.

monolog.yaml

Création du service

Nous avons demander a monolog d’envoyer les logs vers le service KafkaHandler. Notre service doit étendre use Monolog\Handler\AbstractProcessingHandler.

Déclarons le service dans services.yaml. Le second paramètre permet d’indiquer que nous ne concevrons que les logs du niveau ‘error’ ou plus.

 

Ecouter les messages du topic mon_site-log et les envoyé dans ELK (ElasticSearch)

Nous allons utiliser le bunlde widicorp/kafka-bundle pour consommer les messages d’un topic et les envoyer vers ELK.
Pour cela j’ai créer un projet KafkaConsumer. Voyons comment il fonctionne.

 

fichier kafka.yaml

Et le service qui va traiter les messages ‘src/KafkaConsumer/ToElasticsearch.php’ :

 

Ici, si le message est sur le topic ‘mon_site-log’ on le poste dans l’index ‘mon_site’ avec le type ‘log’ dans ElasticSearch.

Pour lancer la consommation de des d’un topic il faut lancer le sript de Symfony widicorp:kafka:consume avec comme argument le nom de notre consommateur :

 

Ajouter un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *