Journalisation Java Centralisée


Je cherche un moyen de centraliser les problèmes de journalisation des logiciels distribués (écrits en Java) ce qui serait assez facile, car le système en question n'a qu'un seul serveur. Mais en gardant à l'esprit, qu'il est très probable que plus d'instances du serveur particulier s'exécuteront à l'avenir (et qu'il y aura plus d'applications dans le besoin pour cela), il devrait y avoir quelque chose comme un serveur de journalisation, qui prend en charge les journaux entrants et les rend accessibles pour le l'équipe de support.

La situation actuelle est que plusieurs applications java utilisent log4j qui écrit ses données dans des fichiers locaux, donc si un client éprouve des problèmes, l'équipe de support doit demander les journaux, ce qui n'est pas toujours facile et prend beaucoup de temps. Dans le cas d'un défaut de serveur, le problème de diagnostic n'est pas aussi important, car il y a de toute façon un accès à distance, mais même si, tout surveiller via un serveur de journalisation aurait toujours beaucoup de sens.

Alors que je suis allé à travers les questions concernant la "journalisation centralisée", j'ai trouvé une autre question (en fait la seule avec une réponse (dans ce cas) utilisable. Problème étant, toutes les applications s'exécutent dans un environnement fermé (dans un réseau) et les directives de sécurité ne permettent pas à tout ce qui concerne les logiciels internes de sortir du réseau des environnements.

J'ai également trouvé un merveilleux article sur la façon dont on implémenterait un tel serveur de journalisation. Depuis que l'article a été écrit en 2001, j'aurais pensé que quelqu'un aurait déjà résolu ce problème particulier. Mais mes résultats de recherche n'ont rien donné.

Ma question: Existe-t-il un framework de journalisation qui gère la journalisation sur les réseaux avec un serveur centralisé auquel l'équipe de support peut accéder?

Spécification:

  • Disponibilité
  • Le serveur doit être exécuté par nous.
  • Compatibilité Java 1.5
  • Compatibilité avec un réseau.
  • Meilleur cas: le protocole utilise HTTP pour envoyer des journaux (pour éviter les problèmes de pare-feu)
  • Meilleur cas: Utilise log4j ou LogBack ou fondamentalement tout ce qui implémente slf4j

Pas nécessaire, mais bien d'avoir

  • L'authentification et la sécurité sont bien sûr un problème, mais pourraient être retardées pendant au moins un certain temps (s'il s'agit d'un logiciel ouvert, nous l'étendrions à nos besoins OT: nous redonnons toujours aux projets ).
  • exploration de Données et l'analyse est quelque chose qui est très utile pour améliorer le logiciel, mais cela pourrait aussi bien être une application externe.

Mon pire scénario est que leur n'est pas un logiciel comme ça. Dans ce cas, nous mettrons probablement cela en œuvre nous-mêmes. Mais s'il existe une telle application Client-serveur, j'apprécierais beaucoup de ne pas avoir besoin de faire ce travail particulièrement problématique.

Merci d'avance

mise à Jour:, La solution doit s'exécuter sur plusieurs plates-formes compatibles java. (Principalement Windows, Linux, certains HP Unix)

Mise à jour: Après beaucoup plus de recherches, nous avons trouvé une solution que nous avons pu acquérir. clusterlog.net (hors ligne depuis au moins mi-2015) fournit des services de journalisation pour les logiciels distribués et est compatible avec log4j et logback (qui est compatible avec slf4j). Il nous permet d'analyser tous les utilisateurs à travers l'application. Il est donc très facile de reproduire les bogues signalés (ou même non signalés celles). Il nous informe également des événements importants par e-mail et dispose d'un système de rapport où les journaux de la même origine sont sommés dans un format facilement accessible. Ils l'ont déployé (ce qui était impeccable) ici il y a quelques jours à peine et il fonctionne très bien.

Mise à jour (2016): cette question reçoit toujours beaucoup de trafic, mais le site auquel j'ai fait référence n'existe plus.

Author: Community, 2012-06-19

4 answers

Vous pouvez utiliser Log4j avec le SocketAppender, vous devez donc écrire la partie serveur en tant que traitement LogEvent. voir http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/net/SocketAppender.html

 6
Author: Arcadien, 2012-06-19 12:34:02

NXLOG ou LogStash ou Graylogs2

Ou

LogStash + ElasticSearch (+en option Kibana)

Exemple:

1) http://logstash.net/docs/1.3.3/tutorials/getting-started-simple

2) http://logstash.net/docs/1.3.3/tutorials/getting-started-centralized

 4
Author: hB0, 2014-03-12 10:36:11

Jetez un oeil à logFaces, on dirait que vos spécifications sont remplies. http://www.moonlit-software.com/

  • Disponibilité (vérifier)
  • Le serveur doit être exécuté par nous. (à vérifier)
  • Compatibilité Java 1.5 (vérifier)
  • Compatibilité avec un réseau hétérogène. (à vérifier)
  • Meilleur cas: Le protocole utilise HTTP pour envoyer des journaux (pour éviter les problèmes de pare-feu) (presque TCP/UDP)
  • Meilleur cas: Utilise log4j ou LogBack ou fondamentalement tout ce qui implémente slf4j (à vérifier)
  • Authentification (vérification)
  • Exploration et analyse de données (possible via l'api d'extension)
 3
Author: Frank, 2012-06-19 12:50:39

Il existe une solution prête à l'emploi de Facebook - Scribe - cela utilise Apache Hadoop sous le capot. Cependant, la plupart des entreprises que je connais ont encore tendance à développer des systèmes internes pour cela. J'ai travaillé dans une de ces entreprises et j'y ai traité des journaux il y a environ deux ans. Nous avons également utilisé Hadoop. Dans notre cas, nous avions la configuration suivante:

  • Nous avions un petit cluster dédié de machines pour l'agrégation de journaux.
  • Les travailleurs ont extrait des grumes du service de production, puis analyser les lignes individuelles.
  • Ensuite, les réducteurs regrouperaient les données nécessaires et prépareraient des rapports.

Nous avions un petit nombre fixe de rapports qui nous intéressaient. Dans de rares cas, lorsque nous voulions effectuer un autre type d'analyse, nous ajoutions simplement un code réducteur spécialisé pour cela et l'exécutions éventuellement sur d'anciens journaux.

Si vous ne pouvez pas décider à l'avance du type d'analyse qui vous intéresse, il sera préférable de stocker des données structurées préparées par les travailleurs dans HBase ou une autre base de données NoSQL (ici, par exemple, les gens utilisent Mongo DB). De cette façon, vous n'aurez pas besoin de ré-agréger les données des journaux bruts et pourrez interroger la banque de données à la place.

Il existe un certain nombre de bons articles sur de telles solutions d'agrégation de journalisation, par exemple, utilisant Pig pour interroger les données agrégées. Pig vous permet d'interroger de grands ensembles de données basés sur Hadoop avec des requêtes de type SQL.

 3
Author: Andrew Андрей Листочкин, 2012-06-19 13:07:07