{"id":474,"date":"2019-04-09T14:02:46","date_gmt":"2019-04-09T12:02:46","guid":{"rendered":"https:\/\/corsaire-consulting.fr\/blog\/?p=474"},"modified":"2019-04-09T14:02:46","modified_gmt":"2019-04-09T12:02:46","slug":"logs-weblogic-sous-elasticsearch","status":"publish","type":"post","link":"https:\/\/corsaire-consulting.fr\/blog\/index.php\/2019\/04\/09\/logs-weblogic-sous-elasticsearch\/","title":{"rendered":"Logs WebLogic sous Elasticsearch"},"content":{"rendered":"<p>Cet article pr\u00e9sente une solution simple et rapide pour exporter les logs des serveurs WebLogic vers Elasticsearch afin qu&rsquo;elles soient index\u00e9es et consultable via Kibana.<\/p>\n<p>La solution est bas\u00e9e sur le composant open source <a href=\"https:\/\/github.com\/oracle\/weblogic-logging-exporter\" target=\"_blank\" rel=\"noopener noreferrer\">WebLogic Logging Exporter disponible sous GitHub<\/a>.<\/p>\n<p><!--more--><\/p>\n<p>Pour mettre en place la solution vous aurez besoin :<\/p>\n<ul>\n<li>D&rsquo;un domaine WebLogic Server 11g ou 12c pour lequel vous pouvez modifier la configuration<\/li>\n<li>Une installation <a href=\"https:\/\/www.elastic.co\/fr\/downloads\/\" target=\"_blank\" rel=\"noopener noreferrer\">Elasticsearch 6.2<\/a> ou sup\u00e9rieure<\/li>\n<li>Une installation <a href=\"https:\/\/www.elastic.co\/fr\/downloads\/kibana\" target=\"_blank\" rel=\"noopener noreferrer\">Kibana<\/a><\/li>\n<li>Le composant <a href=\"https:\/\/github.com\/oracle\/weblogic-logging-exporter\/releases\" target=\"_blank\" rel=\"noopener noreferrer\">WebLogic Logging Exporter weblogic-logging-exporter-0.1.jar<\/a><\/li>\n<li>La librairie java de parsing YAML snakeyaml t\u00e9l\u00e9chargeable sur le <a href=\"https:\/\/search.maven.org\/artifact\/org.yaml\/snakeyaml\/1.23\/bundle\" target=\"_blank\" rel=\"noopener noreferrer\">repository Maven Central<\/a><\/li>\n<\/ul>\n<p>Une fois ces \u00e9l\u00e9ments t\u00e9l\u00e9charg\u00e9s et install\u00e9s il ne reste qu&rsquo;\u00e0 configurer le domaine WebLogic.<\/p>\n<p>&nbsp;<\/p>\n<h1>Configuration du domaine WebLogic<\/h1>\n<p>Copier les librairies weblogic-logging-exporter-0.1.jar et snakeyaml-1.23.jar dans un r\u00e9pertoire accessible depuis les machines qui h\u00e9bergent les serveurs WebLogic.<\/p>\n<p>Ajouter ces 2 librairies au CLASSPATH des serveurs en modifiant le fichier setUserOverrides.sh(.cmd) du domaine :<\/p>\n<p>[pastacode lang=\u00a0\u00bbbash\u00a0\u00bb manual=\u00a0\u00bbexport%20PRE_CLASSPATH%3D%24%7BPRE_CLASSPATH%7D%3A%3CPATH%3E%2Fsnakeyaml-1.23.jar%3A%3CPATH%3E%2Fweblogic-logging-exporter-0.1.jar%0A\u00a0\u00bb message=\u00a0\u00bb\u00a0\u00bb highlight=\u00a0\u00bb\u00a0\u00bb provider=\u00a0\u00bbmanual\u00a0\u00bb\/]<\/p>\n<p>D\u00e9clarer la <em>startup class<\/em> de WebLogic Logging Exporter dans le domaine \u00e0 l&rsquo;aide de la console :<\/p>\n<figure id=\"attachment_485\" aria-describedby=\"caption-attachment-485\" style=\"width: 205px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-485\" src=\"https:\/\/corsaire-consulting.fr\/blog\/wp-content\/uploads\/2019\/04\/Screen-Shot-04-09-19-at-12.26-PM-205x300.png\" alt=\"Configuration de la startup class\" width=\"205\" height=\"300\" srcset=\"https:\/\/corsaire-consulting.fr\/blog\/wp-content\/uploads\/2019\/04\/Screen-Shot-04-09-19-at-12.26-PM-205x300.png 205w, https:\/\/corsaire-consulting.fr\/blog\/wp-content\/uploads\/2019\/04\/Screen-Shot-04-09-19-at-12.26-PM.png 512w\" sizes=\"auto, (max-width: 205px) 100vw, 205px\" \/><figcaption id=\"caption-attachment-485\" class=\"wp-caption-text\">Configuration de la startup class<\/figcaption><\/figure>\n<p>Ou via un script WLST :<\/p>\n<p>[pastacode lang=\u00a0\u00bbpython\u00a0\u00bb manual=\u00a0\u00bbconnect(&#8230;)%0Aedit()%0AstartEdit()%0Acd(&lsquo;%2F&rsquo;)%0Acmo.createStartupClass(&lsquo;weblogic.logging.exporter.Startup&rsquo;)%0A%0Acd(&lsquo;%2FStartupClasses%2Fweblogic.logging.exporter.Startup&rsquo;)%0Acmo.setClassName(&lsquo;weblogic.logging.exporter.Startup&rsquo;)%0Aset(&lsquo;Targets&rsquo;%2Cjarray.array(%5BObjectName(&lsquo;com.bea%3AName%3DAdminServer%2CType%3DServer&rsquo;)%2C%20ObjectName(&lsquo;com.bea%3AName%3Dms1%2CType%3DServer&rsquo;)%5D%2C%20ObjectName))%0Asave()%0Aactivate()%0Adisonnect()%0A\u00a0\u00bb message=\u00a0\u00bb\u00a0\u00bb highlight=\u00a0\u00bb\u00a0\u00bb provider=\u00a0\u00bbmanual\u00a0\u00bb\/]<\/p>\n<p>Dans l&rsquo;exemple ci-dessus la <em>startup class<\/em> est d\u00e9ploy\u00e9e sur les serveurs AdminServer et ms1 du domaine.<\/p>\n<p>La configuration du composant WebLogic Logging Exporter se fait via le fichier YAML WebLogicLoggingExporter.yaml. Par d\u00e9faut le composant cherche ce fichier dans le r\u00e9pertoire <em>config<\/em> du domaine WebLogic.<\/p>\n<p>Si vous souhaitez placer votre fichier de configuration \u00e0 un autre endroit il faut indiquer cet emplacement via la variable d&rsquo;environnement WEBLOGIC_LOGGING_EXPORTER_CONFIG_FILE<\/p>\n<p>Exemple de fichier de configuration WebLogicLoggingExporter.yaml :<\/p>\n<p>[pastacode lang=\u00a0\u00bbpython\u00a0\u00bb manual=\u00a0\u00bbpublishHost%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&rsquo;severity%20%3E%20Warning&rsquo;%0A\u00a0\u00bb message=\u00a0\u00bb\u00a0\u00bb highlight=\u00a0\u00bb\u00a0\u00bb provider=\u00a0\u00bbmanual\u00a0\u00bb\/]<\/p>\n<p>&nbsp;<\/p>\n<p>C&rsquo;est tout pour la configuration. Il suffit ensuite de d\u00e9marrer les serveurs WebLogic La startup class publie des messages dans la sortie standard au d\u00e9marrage du serveur pour indiquer que le composant est op\u00e9rationnel et rappel la configuration charg\u00e9e depuis le fichier.<\/p>\n<p>Ensuite, les logs g\u00e9n\u00e9r\u00e9es par WebLogic sont envoy\u00e9es automatiquement vers Elasticsearch, il ne reste plus qu&rsquo;\u00e0 utiliser Kibana pour les consulter.<\/p>\n<h1>Remarques<\/h1>\n<p>Quelques remarques au sujet du composant WebLogic-Logging-Exporter.<\/p>\n<ul>\n<li>La publication des logs se fait dans le sens WebLogic vers Elasticsearch. Il faut donc pr\u00e9voir l&rsquo;ouverture des routes r\u00e9seaux depuis les machines WebLogic.<\/li>\n<li>Le composant est en version 0.1 D\u00e9veloppement et souffre pour le moment de quelques faiblesses :\n<ul>\n<li>Pas de timeout sur la connexion et les requ\u00eates envoy\u00e9es par le composant vers Elasticsearch. En cas d&rsquo;indisponibilit\u00e9 d&rsquo;Elasticsearch le composant peut attendre longtemps ce qui peut s\u00e9rieusement nuire au service.<\/li>\n<li>Les logs sont publi\u00e9es au fur et \u00e0 mesure qu&rsquo;elles sont produites. Toute log produite alors qu&rsquo;Elasticsearch est indisponible ne sera pas index\u00e9e.<\/li>\n<li>Le composant ne dispose pas de fail-back afin de r\u00e9-\u00e9tablir la connexion vers Elasticsearch quand celui-ci redevient disponible.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h1>Conclusion<\/h1>\n<p>Composant simple et pratique si on souhaite mettre en oeuvre tr\u00e8s rapidement l&rsquo;indexation des logs des serveurs avec Elasticsearch.<\/p>\n<p>Par contre, ses faiblesses font, selon moi, qu&rsquo;il n&rsquo;est pas utilisable sur un environnement de production. Les d\u00e9veloppements futurs devraient am\u00e9liorer la situation.<\/p>\n<p>&nbsp;<\/p>\n<p>Enjoy !<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Cet article pr\u00e9sente une solution simple et rapide pour exporter les logs des serveurs WebLogic vers Elasticsearch afin qu&rsquo;elles soient index\u00e9es et consultable via Kibana. La solution est bas\u00e9e sur le composant open source WebLogic Logging Exporter disponible sous GitHub.<\/p>\n","protected":false},"author":1,"featured_media":478,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[1,4],"tags":[77,9,8],"class_list":["post-474","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-non-classe","category-weblogic","tag-elasticsearch","tag-logs","tag-weblogic-server"],"_links":{"self":[{"href":"https:\/\/corsaire-consulting.fr\/blog\/index.php\/wp-json\/wp\/v2\/posts\/474","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/corsaire-consulting.fr\/blog\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/corsaire-consulting.fr\/blog\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/corsaire-consulting.fr\/blog\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/corsaire-consulting.fr\/blog\/index.php\/wp-json\/wp\/v2\/comments?post=474"}],"version-history":[{"count":16,"href":"https:\/\/corsaire-consulting.fr\/blog\/index.php\/wp-json\/wp\/v2\/posts\/474\/revisions"}],"predecessor-version":[{"id":494,"href":"https:\/\/corsaire-consulting.fr\/blog\/index.php\/wp-json\/wp\/v2\/posts\/474\/revisions\/494"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/corsaire-consulting.fr\/blog\/index.php\/wp-json\/wp\/v2\/media\/478"}],"wp:attachment":[{"href":"https:\/\/corsaire-consulting.fr\/blog\/index.php\/wp-json\/wp\/v2\/media?parent=474"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/corsaire-consulting.fr\/blog\/index.php\/wp-json\/wp\/v2\/categories?post=474"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/corsaire-consulting.fr\/blog\/index.php\/wp-json\/wp\/v2\/tags?post=474"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}