36 votes

Quelles sont les bibliothèques java permettant de collecter/stocker/présenter les métriques/statistiques des applications ?

J'ai une application Java qui doit collecter et rapporter un grand nombre de métriques/mesures opérationnelles/statistiques (différents mots pour différentes personnes - j'utiliserai simplement métriques) sur diverses entités. Les métriques peuvent être :

  1. Une valeur numérique mesurée à un moment donné (nombre d'utilisateurs actuellement connectés au système, pourcentage d'utilisation d'une ressource).
  2. Une valeur numérique mesurée sur un intervalle de temps donné (nombre de messages transmis dans les 5 dernières minutes).
  3. Une valeur d'énumération à un moment donné (l'état de santé d'une entité est ONLINE/WARNING/FAILED/OFFLINE).

Les "entités" peuvent être des dispositifs physiques (un ordinateur, un commutateur, un modem) mais sont le plus souvent des entités logiques (canal de communication 4567, utilisateur 123456, interface avec le service A). En outre, certaines de ces entités logiques sont statiques, c'est-à-dire qu'elles sont connues à l'avance et ne changent pas pendant la durée de vie de l'application, tandis que d'autres peuvent être transitoires (le canal de communication 4567 peut n'exister que pendant un certain temps, puis être supprimé).

Je cherche des bibliothèques pour m'aider à résoudre deux problèmes :

  1. Facilitez la collecte et le stockage de ces éléments d'information sur le serveur.
  2. Présenter les données à un utilisateur de manière utile.

Note/exigences :

  1. L'application serveur produisant les données est essentiellement un processus Java fonctionnant comme un démon (c'est-à-dire pas une application web).
  2. Il y aura 2 types de clients différents.
    1. L'un d'entre eux est une application de bureau Java Swing, qui sera le plus utilisé. Il est important de disposer de graphiques en temps réel et de capacités d'interrogation historique.
    2. L'autre est une interface utilisateur Web. Mes exigences ne sont pas encore très claires, mais les besoins de ce client seront considérablement plus légers que ceux du client swing. Des normes ouvertes sont nécessaires ici (AJAX/HTML, pas Flash).
  3. Peut être déployé intégré dans un logiciel propriétaire (c'est-à-dire sans licence GPL). Commercial ou gratuit.

Dans le passé, mon entreprise a tenté de mettre en place quelques solutions "maison" pour répondre à ce besoin. En gros, les données sont introduites dans une base de données d'une manière incohérente, et le client extrait les données et est en mesure d'établir un graphique d'une seule valeur sur une période de temps fixe en utilisant des progiciels de graphiques maison ou tiers. Franchement, toutes nos solutions ont été nulles. Voici quelques-uns des problèmes que j'espère qu'une solution tierce partie pourra résoudre :

  1. Encapsulez le code utilisé pour mettre à jour/enregistrer la métrique afin qu'il ne pollue pas la classe qui mesure réellement la valeur.
  2. Contribuer à la gestion de la dénomination/identification des mesures. Il peut facilement y en avoir des milliers. Trouver moi-même un système de dénomination pour garantir l'unicité est un véritable casse-tête.
  3. Traiter les données historiques de façon agréable. Il est possible de configurer la durée de conservation des données et d'archiver ou de purger les anciens enregistrements.
  4. Côté client, des capacités intégrées de création de graphiques et d'interrogation, avec la possibilité de transformer certaines des données brutes de la base de données avant de les présenter à l'utilisateur.

Désolé pour la longue description. Merci pour votre aide.

17voto

uwe Points 1533

Je peux recommander cette bibliothèque Java de Yammer : https://github.com/dropwizard/metrics Il offre une belle API pour avoir des compteurs, des chronométrages, des histogrammes, etc. Et il peut automatiquement collecter des données intéressantes à partir des servlets en les instrumentant et à partir de la JVM (mémoire, etc.).

Nous stockons ensuite les données dans Graphite : http://graphite.wikidot.com/

Graphite stocke les données dans une base de données de taille fixe similaire à RRD, et peut générer des graphiques et des tableaux de bord.

7voto

Martin Points 13951

RRD4J

On dirait que RRD4J (licence Apache) est exactement ce que vous recherchez.
Il s'agit d'une implémentation Java de la méthode bien établie RRDtool . Il est construit pour collecter des données au fil du temps dans une base de données Round Robin ( RRD ). Les anciennes données sont généralement archivées dans RRA des archives où l'échelle de temps est moins fine, ce qui permet un stockage plus efficace en termes d'espace.

Bien que je n'aie pas d'expérience directe avec RRD4J, nous utilisons avec succès RRDTool et Cacti depuis de nombreuses années, pour la surveillance de la santé dans notre centre de données. Comme RRD est la norme industrielle en matière de surveillance, je vous recommande vivement de jeter un coup d'œil à RRD4J.

5voto

Ole Points 140

Je sais que cela fait un moment que cette question n'a pas été posée mais je pense que ce n'est pas une mauvaise idée de garder les réponses à jour.

Spring Boot 2 utilise désormais https://micrometer.io - qui devrait être un bon point de départ pour la collecte de métriques dans les applications Java de nos jours. Il n'est pas responsable de leur stockage ou de leur présentation, mais offre une intégration pour les frameworks qui le font.

4voto

Raj Points 91

Vous pouvez essayer Stagemonitor https://github.com/stagemonitor/stagemonitor

Il peut être associé à elasticsearch/graphite/influxdb pour le stockage de données chronologiques.

et vous pouvez utiliser Grafana pour visualiser les métriques et il peut se connecter à de nombreuses bases de données différentes comme elasticsearch, influxdb, prometheus, mysql.

1voto

Dave Points 2958

Une autre option, bien qu'assez complexe, est OpenTSD : http://opentsdb.net/overview.html .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X