Hallo,
Ik heb een applicatie die logfiles analyseert en daar mooie grafiekjes uit laat rollen.
Het is een firewalllog die ik verwerk met AWK, awk maakt SQL statements en die zet ik in een MySQL database. Hieronder een stukje logfile:
Even de hostnames enzo verwijderd...
Ik gebruik dit stuk AWK om er info uit te filteren:
dmv substr worden de datum en de tijd in een array gezet, en nu ben ik al zover dat hij per minuut alles optelt. Het onderste stukje genereert netjes SQL en dat werkt allemaal feilloos.
Nu het volgende:
Per minuut is niet de bedoeling, ik wil per 5 minuten alles optellen, en eventueel per 15 minuten maar daar zit niet veel verschil tussen denk ik.
Ik moet dus al die meldingen optellen, ik dacht aan een for loopje, en dan die waardes in die array's stoppen, maar tot zover lukt het me niet. Het probleem is voornamelijk dat door deze constructie automatisch alles wordt opgeteld in de array, en ik wil dus wel de index zo houden als het kan.
Ik heb een applicatie die logfiles analyseert en daar mooie grafiekjes uit laat rollen.
Het is een firewalllog die ik verwerk met AWK, awk maakt SQL statements en die zet ik in een MySQL database. Hieronder een stukje logfile:
code:
1
2
| Jun 13 04:20:15 somehost.nl deviceid: NetScreen device_id=deviceid system-notification-00257(traffic): start_time="2004-06-13 05:20:14" duration=0 Jun 13 04:22:57 somehost.nl deviceid: NetScreen device_id=deviceid system-notification-00257(traffic): start_time="2004-06-13 05:22:56" duration=0 |
Even de hostnames enzo verwijderd...
Ik gebruik dit stuk AWK om er info uit te filteren:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| $6~/NetScreen/ && $14~/proto=/ && $8 == "system-notification-00257(traffic):" {
sub(/action=Deny/,0,$19)
sub(/action=Permit/,1,$19)
Verzonden[substr($9,13)"@"substr($10,1,5)"@"$19]+=substr($20,6)
Ontvangen[substr($9,13)"@"substr($10,1,5)"@"$19]+=substr($21,6)
Connecties[substr($9,13)"@"substr($10,1,5)"@"$19]++
}
$6~/NetScreen/ && $15~/proto=/ && $8 == "system-notification-00257(traffic):" {
sub(/action=Deny/,0,$20)
sub(/action=Permit/,1,$20)
Verzonden[substr($9,13)"@"substr($10,1,5)"@"$20]+=substr($21,6)
Ontvangen[substr($9,13)"@"substr($10,1,5)"@"$20]+=substr($22,6)
Connecties[substr($9,13)"@"substr($10,1,5)"@"$20]++
}
END {
for ( sleutel in Connecties ) {
split(sleutel,waarde,"@")
print "INSERT INTO `packets` ( `datum` , `tijd`, `actie` , `sent` , `rcvd` , `connecties` ) VALUES ('"waarde[1]"','"waarde[2]"','"waarde[3]"','"Verzonden[sleutel]"','"Ontvangen[sleutel]"','"Connecties[sleutel]"');" |
dmv substr worden de datum en de tijd in een array gezet, en nu ben ik al zover dat hij per minuut alles optelt. Het onderste stukje genereert netjes SQL en dat werkt allemaal feilloos.
Nu het volgende:
Per minuut is niet de bedoeling, ik wil per 5 minuten alles optellen, en eventueel per 15 minuten maar daar zit niet veel verschil tussen denk ik.
Ik moet dus al die meldingen optellen, ik dacht aan een for loopje, en dan die waardes in die array's stoppen, maar tot zover lukt het me niet. Het probleem is voornamelijk dat door deze constructie automatisch alles wordt opgeteld in de array, en ik wil dus wel de index zo houden als het kan.