Pages : 1
#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