Une nouvelle approche de la visualisation des journaux

À un moment donné, j'ai dû beaucoup travailler avec des journaux. Ils peuvent être volumineux et sur différents serveurs. Il était nécessaire non pas de trouver quelque chose de spécifique, mais de comprendre pourquoi le système ne se comporte pas comme il le devrait. Pour une raison quelconque, il n'y avait pas d'agrégateur de journaux.





Je voulais avoir une visionneuse de journal qui permette, à tout moment, d'ouvrir n'importe quel fichier sans le télécharger sur la machine locale, comme la commande less dans la console Linux. Mais en même temps, il devrait y avoir une mise en évidence pratique du texte, comme dans l'EDI, et un filtrage des enregistrements par divers paramètres. Le filtrage et la recherche doivent fonctionner par événements dans le journal, et non par lignes, comme grep, ceci est important lorsqu'il y a des entrées multilignes, par exemple, des erreurs avec des traces de pile. Il devrait également être possible d'afficher les enregistrements de plusieurs fichiers à la fois sur une seule page, en les figeant en fonction de l'horodatage, même si les fichiers sont situés sur des nœuds différents.





Et j'ai compris comment faire un tel utilitaire!





Log Viewer - web-, , , Web . , , , , . . 





  « ?   c ».  , , 1 3,5, .  , ,   ,  ,     ,     .   .





, ; severity , .





  , , «+» «…» ,   ,  ,   .  .       . Java IDE.





: «~.SecurityManager». ,   «~».





, . , . , Ctrl+C, , .





, , , :





. , , . . , severity, UI :





Severity filter





  . ,   «    ».      ,   . ,     .









    « » « »,   .  .





JavaScript. true false.





JavaScript
function isVisibleEvent(text, fields) {
    var match = text.match(/Task completed, elapsed time: (\d+)ms$/)
    if (!match)
        return false // Don't show events not matched the pattern
        
    var time = parseInt(match[1])

    return time > 500 // Show only events where elapsed time is more than a threshold
}
      
      











, . , , . , , , .





URL, .





,

-  —  ,    ,       , , ,   ,  ..





, .





, . , . . , . . log4j, logback . , — issue GitHub, .





 — .     «.log»   ,       .     :





logs = [
  {
    path: "/opt/my-app/logs/*.log"
  },
  {
    path: ${HOME}"/work/**"
  }
]
      
      



.log /opt/my-app/logs ~/work .





GitHub.





,    — ,   .   ,         . ,     Log Viewer. web UI    , ,  Log Viewer   LogViewer .       - .





. , ,   «  N », N —  .  ,  N   . ,   «  N    T», T —  .    . ,   .  , / T,  ,     . ,   .    .





  ,  UI   ,   URL   :

http://localhost:8111/log?path=/opt/my-app/logs/a.log@hostname1&path=/opt/my-app/logs/b.log@hostname1&path=/opt/my-app/logs/c.log@hostname2

"path" , "@" ,     . . "@"  —   .     URL,  ,   log-paths = { … }



.





Log Viewer   Java Web , . .  Maven/Gradle    spring context. , log viewer        .   UI  /logs,   .  Log4j  Logback.





, — discussions GitHub.





, . , . , , .





UI. , JSON, , . severity , .





Parfois, il n'y a aucun moyen d'ouvrir un port sur le serveur pour afficher les journaux, il n'y a qu'un accès SSH. Vous pouvez prendre en charge le travail via SSH. L'interface utilisateur Web montera sur la machine locale, se connectera via SSH au serveur et y lancera un agent spécial. L'agent acceptera les commandes via le flux d'entrée et retournera les parties requises du journal via le flux de sortie.





J'aimerais entendre vos commentaires.





Projet sur GitHub: https://github.com/sevdokimov/log-viewer








All Articles