begin process at 2010 02 10 06:16:27
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C#

 > 

Système

 > 

Autre

 > 

Recuperer les journaux d'evenements


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Recuperer les journaux d'evenements

mercredi 6 décembre 2006 à 09:10:04 | Recuperer les journaux d'evenements

zmaster


Salut !

Je dois, dans le cadre d'une politique de sécurité dans mon entreprise, récupérer les journaux d'évenements de mes serveurs, puis les stocker a quelque part pour ensuite générer des statistiques, des rapports etc...

Mon chef ne voulant pas dépenser un euro pour un produit du style : http://manageengine.adventnet.com/products/eventlog/index.html
Vu le peu de temps dont je disposais, je n'ai pas trop cherché des produits libres et/ou gratuits, du coup j'ai écrit un p'tit bout de code bien crade (c'est le cas de le dire) que j'ai rendu public ici : [ Lien ]

Si jamais vous êtes motivé pour filer un coup de main, (vu que je suis un gros nul en prog (specialement csharp)... ce serait cool).

Merci par avance, et bonne journée !

--

zsh: segmentation fault vlc
ah ça, quelle merde zsh hein !
mercredi 6 décembre 2006 à 10:59:06 | Re : Recuperer les journaux d'evenements

SharpMao

Membre Club

Hello,

J'ai jeté un coup d'oeil à ton code, et j'ai juste deux ou trois conseils à te donner :

Les types énumérés ne sont pas à utiliser comme ça :

e.EntryType.ToString().Equals("Error")

mais plutôt comme ça :

e.EntryType == EventLogEntryType.Error

Si tu dois formatter une date, ne fait si possible pas comme ça :
string timestamp = e.TimeGenerated.Year.ToString() + "-" + e.TimeGenerated.Month.ToString() + "-" + e.TimeGenerated.Day.ToString() + "-" + e.TimeGenerated.Hour.ToString() + "-" + e.TimeGenerated.Minute.ToString() + "-" + e.TimeGenerated.Second.ToString();

Mais plutôt 

string timestamp = e.TimeGenerated.ToString("yyyy-MM-dd-HH-mm-ss");

timestamp.ToString() est inutile, puisque timestamp est déjà un string.

Il est à mon avis inutile de remplir un ArrayList avec des éléments, si tu peux directement faire ta requête pour les mettre dans la DB.

pour ta base de donnée, j'espère que tu utilises bien les types Datetime pour timestamp et long pour instanceid non des string.

Un conseil encore, utilise des paramètre pour faire tes requêtes SQL, tu seras nettement moins embêté par des problèmes de culture, de format, ou simplement d'apostrophe dans un string.

En gros, voici le code tel que je le ferais :

maCommande.CommandText = "INSERT INTO eventlog (serveur, logtype, source, username, instanceid, timegenerated, message) VALUES (?,?,?,?,?,?,?)";
maCommande.Parameters.Add("@serveur", OdbcType.VarChar);
maCommande.Parameters.Add(
"@logtype", OdbcType.VarChar);
maCommande.Parameters.Add(
"@source", OdbcType.VarChar);
maCommande.Parameters.Add(
"@username", OdbcType.VarChar);
maCommande.Parameters.Add(
"@instanceid", OdbcType.BigInt); //OdbcType.BigInt correspond to system.Int64 or long.
maCommande.Parameters.Add("@timegenerated", OdbcType.DateTime);
maCommande.Parameters.Add(
"@message", OdbcType.VarChar, 50);

foreach (EventLogEntry e in evtLog.Entries)
{
   if (e.EntryType == EventLogEntryType.Error)
   {
      maCommande.Parameters["@serveur"].Value = serveur;
      maCommande.Parameters[
"@logtype"].Value = type;
      maCommande.Parameters[
"@source"].Value = e.Source;
      maCommande.Parameters[
"@username"].Value = e.UserName;
      maCommande.Parameters[
"@instanceid"].Value = e.InstanceId;
      maCommande.Parameters[
"@timegenerated"].Value = e.TimeGenerated;
      maCommande.Parameters[
"@message"].Value = e.Message;
      try
      {
         maCommande.ExecuteNonQuery();
      }
      catch (Exception e)
      {
         Console.Out.WriteLine(e.Message);
      }
   }
}

                       
La première partie peut être sortie de la boucle, comme elle ne change pas.
Pour rendre le code encore un peu plus propre, tu peut déclarer des constantes pour tes paramètres ("@...")

Je n'ai pas testé le code, mais en principe, il devrait fonctionner sans trop de modifications.

Amicalement, SharpMao

mercredi 6 décembre 2006 à 11:40:04 | Re : Recuperer les journaux d'evenements

zmaster

Merci beaucoup pour tes conseils, je tenterai de les appliquer dès que j'ai quelques minutes pour toucher au code.

Pour la requète SQL directement dans la boucle, je l'avais fait comme ça au début, mais il attend qu'a chaque fois l'insertion soit finie pour lire l'évenement suivant.

J'ai pas remarqué de grande différence au niveau du temps d'exécution, mais je me suis dit qu'il vallait peut-être mieux ne pas mélanger la récupération des données des journaux, avec l'insertion dans la base de données.

Bonne journée,

--

zsh: segmentation fault vlc
ah ça, quelle merde zsh hein !


Cette discussion est classée dans : recuperer, http, evenements, journaux, coup


Répondre à ce message

Sujets en rapport avec ce message

recuperer des arguments? [ par BlackWizzard ] en C, pour appeler un prog comme ceci "prog.exe arg1 arg2", on utilise un code comme ceci ::#include main (int argc, char **argv){ // ou char *argv[] Recherche du nom d'utilisateur dans l'entête HTTP [ par projetbts ] Bonjour,Je tente de récupérer le nom d'utilisateur qui tente une connection sur mon serveur HTTP. Pour cela, je récupére les entêtes HTTP fourni dans Falsification du protocole HTTP. [ par michalss ] Bonjour à toi qui me lis !Voici mon problème : je pense faire une petite application(VB6, VB.Net, C# ou C++) qui tourne en tache de fond et valide aut RCW recuperation d'objets com [ par marshallmatter ] MarshallMatterBonjour,je suis entrain de developé un client en c# et je dois donc recuperer des données sur le serveur. J ai integré la tlb mais a par Treeview [ par streetlife ] J'ai un réèl problème avec un composant treeview si quelqu'un pouvait jetter un coup d'oeil j'ai laisser mon problème en tant que source C#:http://www HELP !! XML [ par JCpp ] Ça commence à m'énerver. Grrr.J'ai toujours le même problème :http://www.csharpfr.com/forum.v2.aspx?ID=155596 clavier key [ par JCpp ] Je voudrais connaître les touches appuyer sur le clavier, pour que Jenny (Botmaster) puise connaître les mots frappés dans une autre application comme Recuperer l'adresse IP d'un utilisateur distant [ par eRRaTuM ] Bijour,Je cherche une methode pour que je puisse recuperer l'adresse IP d'un remote user, pour pouvoir faire des statistiques, je sais que je dois uti Recuperer le contenu d'un Arraylist quand celui est une classe créé par l'utilisateur [ par reyman ] Salut tout le mondeJ'ai utilisé un arraylist dans lequel je stocke une classe de ma créationex: MaClasse Cl;Liste.Add(Cl);Donc je pensais recupérer l Recuperer le contenu de la barre d'adresse de IE [ par karshnod ] Bonjour,Je develloppe une appli en C# (winForm) et je cherche un moyen de recuperer le contenu de la barre d'adresse de IE.En fait mon prog tourne en


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,952 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales