Difference between revisions of "Talk: UNIX opgave Apache Access log"

From Teknologisk videncenter
Jump to: navigation, search
m (Output fra scriptet)
m (Her er så mit udkast)
 
(One intermediate revision by one other user not shown)
Line 48: Line 48:
 
  45  #  output: dato som tekst
 
  45  #  output: dato som tekst
 
  46  
 
  46  
  47  head -n 1 /tmp/httpd-access.log | cut -d' ' -f4 | sed 's/[\[\/]/ /g' | sed 's/:/ /'
+
  47  head -n 1 $LOGFIL | cut -d' ' -f4 | sed 's/[\[\/]/ /g' | sed 's/:/ /'
 
  48 }
 
  48 }
 
  49  
 
  49  
Line 55: Line 55:
 
  52  #  input: $1 = filnavn
 
  52  #  input: $1 = filnavn
 
  53  #  output: dato som tekst
 
  53  #  output: dato som tekst
  54  tail -n 1 /tmp/httpd-access.log | cut -d' ' -f4 | sed 's/[\[\/]/ /g' | sed 's/:/ /'
+
  54  tail -n 1 $LOGFIL | cut -d' ' -f4 | sed 's/[\[\/]/ /g' | sed 's/:/ /'
 
  55  
 
  55  
 
  56 }
 
  56 }
Line 65: Line 65:
 
  62 # Findes logfilen så kører vi
 
  62 # Findes logfilen så kører vi
 
  63 if ! [ -e $LOGFIL ] ; then
 
  63 if ! [ -e $LOGFIL ] ; then
  64  exit 255
+
  64  echo "$LOGIL kunne ikke findes." ; exit 255
 
  65 fi
 
  65 fi
 
  66  
 
  66  
Line 109: Line 109:
  
 
--[[User:Tcj|tcj]] 00:04, 29 August 2009 (CEST)
 
--[[User:Tcj|tcj]] 00:04, 29 August 2009 (CEST)
 +
::Hej Tomas. Rigtig flot og god løsning. :-) [[User:Heth|Henrik Thomsen]] 09:07, 30 August 2009 (CEST)

Latest revision as of 07:47, 1 September 2009

Her er så mit udkast

Jeg har forsøgt at strukturere scriptet mest muligt i små funktioner, så det er tydeligt, hvordan jeg har løst problemet.

  1 #!/usr/bin/bash
  2 
  3 ## Initial værdier
  4 #
  5 # Logfil
  6 LOGFIL=/tmp/httpd-access.log
  7 
  8 # Dato
  9 DD=`date`
 10 
 11 
 12 ## Programmet udskriver en rapport over de 50 mest aktive adresser
 13 ## Adresserne sorteres faldende.
 14 
 15 function dnslookup {
 16   ## Lav DNS lookup.
 17   #  input:  $1 = ipdresse
 18   #  output: dnsopslag
 19 
 20   dig -x $1 | grep PTR | grep -v -E '^;' | tr ' \t' ' '|cut -d' ' -f5
 21 }
 22 
 23 function overskrift {
 24   ## Udskriv sidetop
 25   #  input: $1 = dagsdato
 26   #  input: $2 = logfil start
 27   #  input: $3 = logfil slut
 28   #  output: tekst
 29   cat << HEADER
 30 HTTP Access rapport fra mars.tekkom.dk
 31 ======================================
 32  
 33  Rapporten genereret: $1
 34   
 35   ------------------------------------------------------------------------------------
 36   Data opsamlet er fra perioden den $2 til den $3
 37   ------------------------------------------------------------------------------------
 38 HEADER
 39 
 40 }
 41 
 42 function startdato {
 43   ## Find start dato i logfil
 44   #  input: $1 = filnavn
 45   #  output: dato som tekst
 46 
 47   head -n 1 $LOGFIL | cut -d' ' -f4 | sed 's/[\[\/]/ /g' | sed 's/:/ /'
 48 }
 49 
 50 function slutdato {
 51   ## Find slut dato i logfil
 52   #  input: $1 = filnavn
 53   #  output: dato som tekst
 54   tail -n 1 $LOGFIL | cut -d' ' -f4 | sed 's/[\[\/]/ /g' | sed 's/:/ /'
 55 
 56 }
 57 
 58 #######################
 59 ######## MAIN #########
 60 #######################
 61 
 62 # Findes logfilen så kører vi
 63 if ! [ -e $LOGFIL ] ; then
 64   echo "$LOGIL kunne ikke findes." ; exit 255
 65 fi
 66 
 67 # Lav en overskrift
 68 overskrift "$DD" "`startdato $LOGFIL`" "`slutdato $LOGFIL`"
 69 
 70 # Udskriv statistikken
 71 # forklaring paa oneliner:
 72 # cut -d' ' -f1 $LOGFIL : felt 1 er ipadressen på webclientn.
 73 # sort                  : før ipadresserne skal taelles skal de sorteres. uniq kræv
 74 #                         at listen er sorteret.
 75 # uniq -c               : sammentæl forkomster af unikke ip adresser
 76 # sort -rn              : sorter i omvendt rækkefølge og numerisk. sort sorterer default alfabeti
 77 # head -n 50            : ikke flere end 50
 78 # while read ...        : laver output og dnsopslag
 79 cut -d' ' -f1 $LOGFIL | sort | uniq -c | sort -nr | head -n 50 | \
 80                                                       while read cnt ip ; do \
 81                                                         echo -e "$cnt $ip \t(`dnslookup $ip`)"; \
 82                                                       done

Output fra scriptet

[tcj@mars ~/bin]$ HttpReport 
HTTP Access rapport fra mars.tekkom.dk
======================================
 
 Rapporten genereret: Fri Aug 28 23:55:13 CEST 2009
  
  ------------------------------------------------------------------------------------
  Data opsamlet er fra perioden den  26 Aug 2009 22:21:13 til den  28 Aug 2009 06:40:07
  ------------------------------------------------------------------------------------
806 192.168.146.155     ()
508 87.56.15.130        (0x57380f82.vgnqu2.dynamic.dsl.tele.dk.)
306 77.212.13.52        (0x4dd40d34.adsl.cybercity.dk.)
301 195.181.54.128      (pixuv.eucmidt.dk.)
294 89.249.4.2  ()
283 192.168.146.156     ()
.
.
.

--tcj 00:04, 29 August 2009 (CEST)

Hej Tomas. Rigtig flot og god løsning. :-) Henrik Thomsen 09:07, 30 August 2009 (CEST)