Quelle est la méthode la plus rapide pour lire le journal des événements sur une machine distante?
Je travaille sur une application qui lit eventlogs(Application) à partir de machines distantes. Je suis en train de l'utilisation d'un Journal de classe .net et puis en itérant sur les entrées de Journal, mais c'est très lent. Dans certains cas, certaines machines ont 40000+ les entrées de journal et il faut des heures pour parcourir les entrées.
quel est le meilleur moyen pour accomplir cette tâche? Existe-il des autres classes .net qui sont plus rapides ou dans toute autre technologie?
source d'informationauteur Kapil
Vous devez vous connecter pour publier un commentaire.
Homme, je ressens votre douleur. Nous avons eu exactement le même problème dans notre application.
Votre solution a une branche en fonction de ce serveur de la version que vous utilisez et ce que la version du serveur de votre "cible" de la machine est en cours d'exécution sur.
Si vous êtes à la fois sur Windows Vista ou Windows Server 2008, vous avez de la chance. Vous devriez regarder
System.Diagnostics.Concours complet.Reader.EventLogQuery
etSystem.Diagnostics.Concours complet.Reader.EventLogReader
. Ce sont de nouvelles .net 3.5.Fondamentalement, vous pouvez créer une requête en XML et de les expédier à exécuter sur l'ordinateur distant. Peut-être vous êtes simplement à la recherche pour les événements d'un type donné, ou peut-être simplement de nouveaux événements à partir d'un point spécifique dans le temps. La recherche s'exécute sur l'ordinateur distant, puis vous juste en arrière de la correspondance des événements. Les nouvelles classes sont beaucoup plus rapide que l'ancienne .net 2.0 manière, mais encore une fois, ils ne sont pris en charge sur Windows Vista ou Windows Server 2008.
Pour notre application lorsque la cible n'est PAS sur Vista/Win2008, nous avons téléchargé le raw .evt fichier à partir de la télécommande du système, et ensuite analysé le fichier à l'aide de son format binaire. Il existe plusieurs sources de données sur l'événement format de journal .fichiers evt (pré-Vista), y compris texte du lien et je me souviens d'un article sur codeproject.com qui a un code c#.
Vista et Windows Server 2008 machines en utiliser un nouveau .evtx format qui est un nouveau format, de sorte que vous ne pouvez pas utiliser le même binaire analyse de l'approche dans toutes les versions. Mais la nouvelle EventLogQuery et EventLogReader classes sont tellement rapide que vous n'avez pas à. Il est désormais parfaitement rapide de simplement utiliser les classes intégrées.
Événement de lecture du Journal est horriblement lent... trop lent. WTF Microsoft?
Utilisation LogParser 2.2 - Recherche de C# et de LogParser sur Internet (ou vous pouvez utiliser l'analyseur de journal des commandes à partir de la ligne de commande). Je ne veux pas dupliquer le travail déjà fourni par d'autres.
Je tire le journal du système à distance par le journal exporté dans un fichier EVTX. J'ai ensuite copier le fichier à partir de la télécommande du système. Ce processus est très rapide même avec un réseau qui s'étend sur la planète (j'ai eu des problèmes avec le fait d'avoir le journal exporté à un réseau de ressources). Une fois que vous avez locale, vous pouvez faire vos recherches et de traitement.
Il y a de multiples raisons pour avoir la EVTX - je ne rentrerai pas dans les raisons pourquoi nous faisons cela.
Ce qui suit est un exemple de code pour enregistrer une copie du journal comme un EVTX:
(Notes: "périphérique" est le réseau nom d'hôte ou adresse IP. "LogName" est le nom du journal souhaité: le "Système", "Sécurité", ou "Application". outputPathOnRemoteSystem est le chemin d'accès sur l'ordinateur distant, comme "c:\temp\%hostname%.%LogName%.%YYYYMMDD_HH.MM%.evtx".)
Une bonne Explication/Exemple peut être trouvé sur MSDN.
Lors de l'attente de 5 à 20 minutes avec l'ancien code, celui-ci fait en moins de 10 secondes.
Peut-être WMI peut vous aider à:
WMI avec C#
Avez-vous essayé d'utiliser les fonctionnalités à distance dans powershell 2.0? Ils vous permettent d'exécuter les applets de commande (comme ceux à lire les journaux d'événements) sur des machines à distance et de retourner les résultats (en tant qu'objets, bien sûr) à l'appel de la session.
Vous pouvez placer un Programme dans ces machines enregistrer le journal dans un fichier et l'envoie à votre webapplication je pense que ce serait beaucoup plus vite que vous pouvez le faire à la boucle locale, mais im pas sûr de savoir comment faire donc je ne peux pas ive vous tout code 🙁
Peut-être que les ordinateurs distants pourrait faire un peu de calcul. Ainsi, de cette façon votre serveur ne traite qu'avec des informations pertinentes. Il serait une sorte de cluster à l'aide de la télécommande à l'ordinateur pour faire de filtrage de la lumière et le serveur la la partie analyse.