Contenu | Rechercher | Menus

Annonce

L'équipe des administrateurs et modérateurs du forum vous invite à prendre connaissance des nouvelles règles.
En cas de besoin, vous pouvez intervenir dans cette discussion.

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 30/03/2018, à 10:32

TheFrog21

Lien entre deux logs de 2 machines

Bonjour!

Je dispose de deux logs denses (200k lignes), l'une d'un equipement type load balancer, l'autre d'une machine unix.

La log du load balancer contient ces informations: Date(dd/mm/yy) Heure(hh:mm:ss) IP

La log de la machine unix contient ces informations: Date(dd/mm/yy) Heure(hh:mm:ss) IdClient

Entre les deux machines, la latence est de 1 à 4 secondes.

j'aimerais savoir quels clients utilise quelles IP.

Je pensais faire correspondre une IP à plusieurs IdClient (arrivants entre 1 et 4 secondes après) et regarder l'IdClient le plus representé pour une IP.



Si quelqu'un a une solution, un outil ou un code permettant de faire cela!

Hors ligne

#2 Le 30/03/2018, à 11:44

pingouinux

Re : Lien entre deux logs de 2 machines

Bonjour,
Personnellement, je ferais ça en python, en créant 2 dictionnaires, dont les clés seraient les heures converties en secondes, et les valeurs respectivement les IP et les IdClient.
Il faudrait que tu montres un petit exemple de fichiers, ainsi que le résultat que tu veux obtenir.

Hors ligne

#3 Le 04/04/2018, à 14:46

TheFrog21

Re : Lien entre deux logs de 2 machines

les deux logs que je dispose:

16/02/18 00:00:30 192.168.0.1
16/02/18 00:00:31 192.168.0.1
16/02/18 00:00:41 192.168.0.2
16/02/18 00:01:23 192.168.0.3
16/02/18 00:01:59 192.168.0.4
16/02/18 00:02:10 192.168.0.14
16/02/18 00:02:10 192.168.0.5
16/02/18 00:04:08 192.168.0.6
16/02/18 00:05:50 192.168.0.7
16/02/18 00:05:51 192.168.0.8
16/02/18 00:09:39 192.168.0.4
16/02/18 00:12:30 192.168.0.5
16/02/18 00:13:32 192.168.0.9
16/02/18 00:13:32 192.168.0.9
16/02/18 00:13:40 192.168.0.4
16/02/18 00:15:22 192.168.0.9

16/02/18 00:00:34 id000001
16/02/18 00:00:42 id000002
16/02/18 00:01:25 id000003
16/02/18 00:01:25 id000003
16/02/18 00:01:57 id000002
16/02/18 00:02:11 id000004
16/02/18 00:03:03 id000002
16/02/18 00:03:10 id000002
16/02/18 00:04:10 id000005
16/02/18 00:04:15 id000002
16/02/18 00:05:13 id000005
16/02/18 00:05:20 id000002
16/02/18 00:05:28 id000002
16/02/18 00:05:34 id000002
16/02/18 00:05:52 id000006
16/02/18 00:06:17 id000005
16/02/18 00:10:12 id000007
16/02/18 00:12:32 id000004
16/02/18 00:12:32 id000004
16/02/18 00:12:33 id000004
16/02/18 00:12:33 id000004
16/02/18 00:13:33 id000008
16/02/18 00:13:33 id000008
16/02/18 00:13:34 id000008
16/02/18 00:13:34 id000008
16/02/18 00:15:24 id000009
16/02/18 00:15:24 id000008
16/02/18 00:15:25 id000008
16/02/18 00:15:26 id000009

Le tableau que j'aimerai avoir, qui fait correspondre les iP avec les id ayant un timestamp entre 0 et 4 secondes supérieur .
(l'ip 192.168.0.1 ayant un timestamp de 00:00:31 on va capturer les id ayant un timestamp compris entre 00:00:31 et 00:00:35 et ainsi de suite)

192.168.0.1-id000001
192.168.0.1-id000001
192.168.0.2-id000002
192.168.0.3-id000003
192.168.0.3-id000003
192.168.0.4-
192.168.0.14-id000004
192.168.0.5-id000004
192.168.0.6-id000005
192.168.0.7-id000006
192.168.0.8-id000006
192.168.0.4-
192.168.0.5-id000004
192.168.0.5-id000004
192.168.0.5-id000004
192.168.0.5-id000004
192.168.0.9-id000008
192.168.0.9-id000008
192.168.0.9-id000008
192.168.0.9-id000008
192.168.0.9-id000008
192.168.0.9-id000008
192.168.0.9-id000008
192.168.0.9-id000008
192.168.0.4-
192.168.0.9-id000009
192.168.0.9-id000008
192.168.0.9-id000008
192.168.0.9-id000009

Enfin, un tableau final qui compte les résultats les plus fréquemment trouvés
(ici, 192.168.0.1 est présent 3 fois dans le tableau précédent et correspond 2 fois à l'id 000001)

192.168.0.1   id000001 2/3
192.168.0.2   id000002 1/1
192.168.0.3   id000003 2/2
192.168.0.4            0/3
192.168.0.14  id000004 1/1
192.168.0.5   id000004 5/5
192.168.0.6   id000005 1/1
192.168.0.7   id000006 1/1
192.168.0.8   id000006 1/1
192.168.0.9   id000008 10/12
192.168.0.9   id000008 2/10

Merci beaucoup de votre aide!

Dernière modification par TheFrog21 (Le 04/04/2018, à 14:47)

Hors ligne

#4 Le 04/04/2018, à 18:42

pingouinux

Re : Lien entre deux logs de 2 machines

J'avais préparé un script, mais n'avais pas prévu les heures identiques.
Voici le résultat que j'obtiens avec tes deux logs, un peu différent du tien.

192.168.0.1
     id000001  2/2
192.168.0.2
     id000002  1/1
192.168.0.3
     id000003  2/2
192.168.0.4
192.168.0.5
     id000004  5/5
192.168.0.6
     id000005  1/1
192.168.0.7
     id000006  1/1
192.168.0.8
     id000006  1/1
192.168.0.9
     id000008 10/12
     id000009  2/12
192.168.0.14
     id000004  1/1

Voici le script trilog.py (qui manque de commentaires…) :

#!/usr/bin/env python3
import sys
from time import strptime, mktime

ident={}; temps={}; N={}

def conversion_secondes(dat,tim):
   return int(mktime(strptime(dat+tim,"%d/%m/%y%H:%M:%S")))

with open(sys.argv[1],'r') as f1, open(sys.argv[2],'r') as f2:
   for lig in f1:
      dat,tim,ip=lig.split()
      sec=conversion_secondes(dat,tim)
      if ip not in temps: temps[ip]=[]
      temps[ip].append(sec)
   for lig in f2:
      dat,tim,id=lig.split()
      sec=conversion_secondes(dat,tim)
      if sec not in ident: ident[sec]=[]
      ident[sec].append(id)

for ip in temps:
   N[ip]={}
   for sec in temps[ip]:
      sec_0_4=filter(lambda x: sec+0<=x<=sec+4,ident)
      for s in sec_0_4:
         for ids in ident[s]:
            if ids not in N[ip]: N[ip][ids]=0
            N[ip][ids]+=1

for ip in sorted(N,key=(lambda x:tuple(map(int,x.split('.'))))):
   print(ip)
   s=sum(N[ip].values())
   for id in sorted(N[ip],key=(lambda x:N[ip][x]),reverse=True):
      print("     %s %2d/%d"%(id,N[ip][id],s))

À rendre exécutable et à lancer ainsi :

./trilog.py log1 log2

Hors ligne