Comment surveiller des exceptions ou des erreurs générées par d'autres applications Java?

StackOverflow https://stackoverflow.com/questions/4468992

  •  11-10-2019
  •  | 
  •  

Question

Je veux trouver ou développer une application qui peut fonctionner comme un démon, informer l'administrateur par e-mail ou SMS lorsque les applications Java en cours d'exécution sur un hôte des exceptions ou obtenir des erreurs. Je sais que JVMTI peut réaliser une partie de mon objectif , mais elle performances impact des applications contrôlées (je ne sais pas combien il sera, il sera acceptable que si elle est faible), en plus il semble être un travail de troublesom de développer un agent JVMTI et je ne suis pas sûr ce qui se passerait si plusieurs applications en cours d'exécution en même temps en utilisant le même agent. Y at-il de meilleures solutions? Merci à l'avance.

Était-ce utile?

La solution

Une façon serait d'utiliser un système d'enregistrement comme log4j qui publie toutes les erreurs survenant sur le système A à un serveur d'enregistrement sur le système B à partir duquel vous pouvez contrôler les erreurs se sont produites. Ce n'est pas un solutation complètement générique cependant, puisque seules exceptions propagées à log4j (ou tout autre système d'exploitation forestière) seraient traités -. Mais il peut être un bon début

Autres conseils

La meilleure solution est d'avoir l'application Java envoyer ses erreurs par email / sms. Le problème est que les programmes généreront des exceptions et gérer correctement en fonctionnement normal. Vous voulez seule exception particulière.

A défaut vous pouvez écrire un lecteur de journal, qui lit les journaux de l'application. Ceci est difficile à obtenir le droit, mais il peut être fait.

Application peut générer une exception par jour 1000+ et toujours se comporter normalement parce que l'application sait comment gérer ces exceptions. par exemple. peut être jeté à chaque fois une connexion de socket est fermé une exception.

OMI, la meilleure approche est de déployer un système de contrôle externe. Cela peut:

  • moniteur de multiples applications
  • Services d'infrastructure de surveillance
  • disponibilité du réseau de surveillance et d'accessibilité machine
  • les ressources de surveillance telles que l'utilisation du processeur et système de fichiers.

Les applications peuvent être surveillés de diverses façons, notamment:

  • en traitant des événements de journal,
  • en regardant pour le redémarrage de l'application,
  • par "pinger" Apis web de l'application pour vérifier liveness de service et
  • en utilisant les interfaces JMX de l'application.

Cette information peut être filtrée et hiérarchisé de façon intelligente, et les événements critiques peuvent être signalés par quelque moyen que ce qui est le plus approprié.

Vous ne voulez pas les demandes individuelles d'envoyer des e-mails, parce qu'ils ne disposait pas d'informations suffisantes pour faire un travail décent. En outre, mettre la logique des rapports dans des applications individuelles est susceptible de conduire à la mise en œuvre incohérente, pauvre configurabilité, et ainsi de suite.

Il existe une alternative à proximité de JVMTI: JPDA . Cette infrastructure vous permet de créer un « débogueur » de distance (oui, c'est ce que vous avez l'intention de le faire) à l'aide du code Java, et le connecter à la machine virtuelle en utilisant soit une connexion locale ou à distance.

Il y aura, comme pour JVMTI, des frais généraux à l'exécution du programme. Cependant, comme le Trace.java L'exemple montre, il est assez simple à la fois mettre en œuvre et se connecter à VM cible.

Enfin, remarquez si vous voulez exécuter le code de l'instrument par serveur d'applications (JBoss, Glassfish, Tomcat, vous le nom), il existe d'autres moyens.

Je suis le modèle où chaque exception se connecté à une table. Ensuite, un flux RSS sélectionne de cette table. Je souscris au flux RSS dans MS Outlook au travail et aussi sur mon téléphone Android avec un programme appelé NewsRob. NewsRob me laisser mis mon téléphone pour me alerter quand il y a quelque chose de nouveau.

Je blogue sur la façon de le faire ICI. Il est en .net, mais vous voyez l'idée.

Comme une étape connexe je l'ai trouvé un moyen de me notifier quand quelque chose ne se produise pas. Ce blog est ICI.

Il y a des tas d'applications qui ne tiennent pas ce que vous cherchez d'une manière qui ne impact sur les performances. Avez-vous eu un coup d'œil à Kibana / ElasticSearch, ou Splunk ou Logscape pour les solutions d'entreprise (ils ont tous deux également des versions gratuites).

Je vais faire écho à ce qui a déjà été dit et mettre en évidence ce que Java fournit déjà et ce que vous pouvez faire avec un système de contrôle externe. Java fournit déjà:

  • log4j - ERREURS journaux, MISES EN GARDE, FATAL et exceptions dans un fichier
  • JMX - Créer des paramètres d'application personnalisés et vous avez également accès à java.lang / * qui vous donnera l'utilisation de mémoire tas, la collecte des ordures, des compteurs de fil, etc.
  • JVM l'enregistrement gc - vous pouvez vous connecter tous vos événements de collecte des ordures dans un fichier et montre pour les longues collections complètes GC.

Un système de contrôle externe vous permettra d'alertes déclenchées ensemble de différents scénarios opérationnels. Vous obtiendrez également la visualisation de vos performances du système grâce à des graphiques. Je l'ai utilisé Logscape de java application dans le passé pour surveiller 30 processus java répartis hôtes over3.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top