Monitoring¶
Ewt intègre différents mécanismes de monitoring, notamment la génération d'un rapport d'état et la fourniture de metrics.
Rapport d'état¶
Ewt peut générer un rapport d'état de l'instance. Le rapport se présente sous la forme d'une page web qui fournit plusieurs indicateurs sur l'état du système (mémoire, threads, cpu, espace disque, etc.)
Il est généralement possible d'accéder au rapport via la commande suivante:
{ "action": "admin", "params": { "action": "instance-metrics" } }
Metrics¶
Ewt intègre des composants micrometer.io pour générer des métriques exploitables par Prometheus et, par extension, visualisables dans Grafana.
Activation des metrics¶
L'activation des metrics nécessite d'indiquer quels metrics on souhaite produire et d'activer le servlet qui servira à restituer les données. Nous décrivons ci-après la marche à suivre pour réaliser ces étapes.
-
En premier lieu, il faut activer la production de metrics et indiquer quels metrics on souhaite obtenir. Pour ce faire, ajoutez la propriété
enabled-metricsdans le fichier de bootstrap et y déclarer les metrics à suivre. Les metrics reconnus sont:classloader: Metrics portant sur le Class Loadermemory: Metrics relatifs à l'état de la mémoirethreads: Metrics relatifs au threadsdeadlocks: Metrics relatifs aux interblocages de threadsgc: Suivi d'activité du Garbage Collectorcpu: Surveillance d'activité du processeurdisk: Surveillance de l'espace disque disponible sur les disquesfiledescriptor: Surveillance des entrées-sorties (fichiers ou sockets)uptime: Informations concernant l'uptime du serveurdatabase: Informations relatives à la base de donnéesall: Mot-clé désignant tous les metrics ci-dessus
Exemple:
1enabled-metrics = disk,memory,cpu,gc,threads -
Ensuite, il faut ouvrir un nouvel endpoint pour mettre les metrics à disposition de systèmes tiers (par exemple Prometheus). Pour ce faire, éditez le fichier
web.xmlde Ewt et ajoutez-y les éléments suivants:1 2 3 4 5 6 7 8 9
<servlet> <servlet-name>EwtMetricsServlet</servlet-name> <servlet-class>ch.epilogic.ewt.servlets.EwtMetricsServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>EwtMetricsServlet</servlet-name> <url-pattern>/metrics/*</url-pattern> </servlet-mapping>⚠️ Attention, les modifications ci-dessus ont pour effet d'activer le servlet, mais celui-ci n'est pas sécurisé et donc accessible en public, ce qui n'est pas recommandé. Il convient donc de sécuriser l'endpoint. Nous allons le faire en activant deux mesures :
- en imposant une authentification BASIC
- en limitant la consultation des metrics à un compte disposant de rôle spécifique.
La suite du chapitre part du principe que l'application est sécurisée au moyen du module d'authentification intégré à Ewt. Veuillez vous reporter au chapitre traitant de ce module pour de plus amples détails.
Toujours dans le fichier
web.xml, ajouté un nouveau filtre qui sera dédié aux metrics:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
<filter> <filter-name>EwtAuthFilterMetrics</filter-name> <filter-class>org.pac4j.jee.filter.SecurityFilter</filter-class> <init-param> <param-name>authorizers</param-name> <param-value>isAuthenticated,ewt-metrics-role</param-value> </init-param> <init-param> <param-name>clients</param-name> <param-value>basic</param-value> </init-param> </filter> <filter-mapping> <filter-name>EwtAuthFilterMetrics</filter-name> <url-pattern>/metrics/*</url-pattern> <dispatcher>REQUEST</dispatcher> </filter-mapping>Cela a pour effet d'imposer une authentification BASIC pour consulter l'endpoint
/metrics(voir ligne 10). Le compte utilisé doit en outre disposer de rôles spécifiques (définis dans l'authorizerewt-metrics-role, voir ligne 6). Il reste donc à déclarer ce clientbasicet cet authorizerewt-metrics-role.Pour ce faire, éditez le fichier
ewtAuthConfig.xmlet ajoutez les éléments suivants:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
<repository name="tomcat-file-repo" type="file"> <file>${env:CATALINA_BASE}/conf/tomcat-users.xml</file> </repository> <authorizer name="ewt-metrics-role" type="role"> <role>ewt-metrics-reader</role> </authorizer> <client name="basic" type="basic"> <realm>UserDatabase</realm> <repository>tomcat-file-repo</repository> <hashAlgo>AUTO</hashAlgo> <lockOut failureCount="5" lockOutTime="300" cacheSize="1000" warningTime="3600"/> </client>Le bloc ci-dessus déclare un repository, un authorizer et un client.
Le repository indique la source dans laquelle est déclarée le compte utilisateur qui sera utilisé pour accéder aux metrics. Dans le cas présent, nous avons opté pour le fichier
tomcat-users.xmldu serveur d'application Tomcat. Vous êtes bien entendu libre d'exploiter un autre repository.Les lignes 5 à 7 déclarent l'authorizer
ewt-metrics-role. Ce dernier vérifiera que le profil utilisateur possède le rôleewt-metrics-readeravant d'autoriser l'accès. Cela évite que n'importe quel autre utilisateur authentifié ne puisse consulter les metrics.Le client défini aux lignes 9 à 16 active l'authentification BASIC.
La configuration de Ewt est terminée. Il reste à créer le compte. Pour ce faire, éditez le fichier
tomcat-users.xmldans le dossierconfde Tomcat et ajoutez-y les lignes suivantes:1 2 3 4
<role rolename="ewt-metrics-reader"/> <user username="metrics-reader" password="{MD5}b91cd1a54781790beaa2baf741fa6789" roles="ewt-metrics-reader"/>Le compte
metrics-readerreçoit le rôleewt-metrics-readerqui est attendu par l'authorizer. Le mot de passe "changeit" est ici hashé en MD5 pour ne pas figurer en clair dans le fichier. On notera que lehashAlgoétait défini enAUTOau niveau du client afin de pouvoir tenir compte du préfixe inclu dans le mot de passe.