Logs WebLogic sous Elasticsearch

elasticsearch

Cet article présente une solution simple et rapide pour exporter les logs des serveurs WebLogic vers Elasticsearch afin qu’elles soient indexées et consultable via Kibana.

La solution est basée sur le composant open source WebLogic Logging Exporter disponible sous GitHub.

Pour mettre en place la solution vous aurez besoin :

Une fois ces éléments téléchargés et installés il ne reste qu’à configurer le domaine WebLogic.

 

Configuration du domaine WebLogic

Copier les librairies weblogic-logging-exporter-0.1.jar et snakeyaml-1.23.jar dans un répertoire accessible depuis les machines qui hébergent les serveurs WebLogic.

Ajouter ces 2 librairies au CLASSPATH des serveurs en modifiant le fichier setUserOverrides.sh(.cmd) du domaine :

[pastacode lang= »bash » manual= »export%20PRE_CLASSPATH%3D%24%7BPRE_CLASSPATH%7D%3A%3CPATH%3E%2Fsnakeyaml-1.23.jar%3A%3CPATH%3E%2Fweblogic-logging-exporter-0.1.jar%0A » message= » » highlight= » » provider= »manual »/]

Déclarer la startup class de WebLogic Logging Exporter dans le domaine à l’aide de la console :

Configuration de la startup class
Configuration de la startup class

Ou via un script WLST :

[pastacode lang= »python » manual= »connect(…)%0Aedit()%0AstartEdit()%0Acd(‘%2F’)%0Acmo.createStartupClass(‘weblogic.logging.exporter.Startup’)%0A%0Acd(‘%2FStartupClasses%2Fweblogic.logging.exporter.Startup’)%0Acmo.setClassName(‘weblogic.logging.exporter.Startup’)%0Aset(‘Targets’%2Cjarray.array(%5BObjectName(‘com.bea%3AName%3DAdminServer%2CType%3DServer’)%2C%20ObjectName(‘com.bea%3AName%3Dms1%2CType%3DServer’)%5D%2C%20ObjectName))%0Asave()%0Aactivate()%0Adisonnect()%0A » message= » » highlight= » » provider= »manual »/]

Dans l’exemple ci-dessus la startup class est déployée sur les serveurs AdminServer et ms1 du domaine.

La configuration du composant WebLogic Logging Exporter se fait via le fichier YAML WebLogicLoggingExporter.yaml. Par défaut le composant cherche ce fichier dans le répertoire config du domaine WebLogic.

Si vous souhaitez placer votre fichier de configuration à un autre endroit il faut indiquer cet emplacement via la variable d’environnement WEBLOGIC_LOGGING_EXPORTER_CONFIG_FILE

Exemple de fichier de configuration WebLogicLoggingExporter.yaml :

[pastacode lang= »python » manual= »publishHost%3A%20%20localhost%0ApublishPort%3A%20%209200%0AdomainUID%3A%20%20wls12213Domain%0AweblogicLoggingExporterEnabled%3A%20true%0AweblogicLoggingIndexName%3A%20%20wls%0AweblogicLoggingExporterSeverity%3A%20%20Notice%0AweblogicLoggingExporterBulkSize%3A%201%0AweblogicLoggingExporterFilters%3A%0A-%20filterExpression%3A%20%20’severity%20%3E%20Warning’%0A » message= » » highlight= » » provider= »manual »/]

 

C’est tout pour la configuration. Il suffit ensuite de démarrer les serveurs WebLogic La startup class publie des messages dans la sortie standard au démarrage du serveur pour indiquer que le composant est opérationnel et rappel la configuration chargée depuis le fichier.

Ensuite, les logs générées par WebLogic sont envoyées automatiquement vers Elasticsearch, il ne reste plus qu’à utiliser Kibana pour les consulter.

Remarques

Quelques remarques au sujet du composant WebLogic-Logging-Exporter.

  • La publication des logs se fait dans le sens WebLogic vers Elasticsearch. Il faut donc prévoir l’ouverture des routes réseaux depuis les machines WebLogic.
  • Le composant est en version 0.1 Développement et souffre pour le moment de quelques faiblesses :
    • Pas de timeout sur la connexion et les requêtes envoyées par le composant vers Elasticsearch. En cas d’indisponibilité d’Elasticsearch le composant peut attendre longtemps ce qui peut sérieusement nuire au service.
    • Les logs sont publiées au fur et à mesure qu’elles sont produites. Toute log produite alors qu’Elasticsearch est indisponible ne sera pas indexée.
    • Le composant ne dispose pas de fail-back afin de ré-établir la connexion vers Elasticsearch quand celui-ci redevient disponible.

Conclusion

Composant simple et pratique si on souhaite mettre en oeuvre très rapidement l’indexation des logs des serveurs avec Elasticsearch.

Par contre, ses faiblesses font, selon moi, qu’il n’est pas utilisable sur un environnement de production. Les développements futurs devraient améliorer la situation.

 

Enjoy !