Top como visualizador comendo a cauda - f stream

1

Estou procurando uma ferramenta de linha de comando que trabalhe com um fluxo de linhas (tail -f tipicamente) e conte-as como: tail -f /var/log/apache2/access.log | corte -d '' -f1 | SOME_COMMAND e exibindo uma vista superior como:

52 xxx.xxx.xxx.xxx 12 xxx.xxx.xxx.xxx 6 xxx.xxx.xxx.xxx 2 xxx.xxx.xxx.xxx

Poderia ser muito útil, associado, por exemplo, a esta sh:

#!/bin/sh
# NCSA structure :
#IP - - [DATE] "METHOD URL HTTP/VERSION" STATUS LENGTH "REFERER" "USER AGENT"
QUERY=""
while [ "$1" ] ; do
  case "$1" in
      ip) QUERY="$QUERY"'' ;;
      date) QUERY="$QUERY"'' ;;
      method) QUERY="$QUERY"'' ;;
      url) QUERY="$QUERY"'' ;;
      version) QUERY="$QUERY"'' ;;
      status) QUERY="$QUERY"'' ;;
      length) QUERY="$QUERY"'' ;;
      referer) QUERY="$QUERY"'' ;; # Does not work...
      useragent) QUERY="$QUERY"'' ;; # Does not work
      *) QUERY="$QUERY""$1" ;;
  esac
  shift
done
sed -r 's/^([^ ]+) ([^ ]+) ([^ ]+) \[([^]]+)] "([^ ]+) ([^"]+) HTTP\/([^"]+)" ([^ ]+) ([^ ]+) "([^"]+)" "([^"]+)"$/'"$QUERY"'/g'

Com este comando eu estou procurando e meu script você poderia fazer: gato somelog | ncsa.sh url | SOME_COMMAND e obter um top de seu url'z, ou referer, ou o que você quer

(e se alguém puder consertar o bug de \ 10 interpretado como \ 1 seguido por um 0 ...: p)

Tenha um ótimo dia!

    
por Mandark 23.06.2010 / 22:29

2 respostas

2

Primeira versão de um programa resolvendo este problema cometido aqui:

link

    
por 01.07.2010 / 19:11
0

Você está procurando por uniq -c e tr ?

cat /var/log/apache2/access.log | cut -d' ' -f1 | uniq -c | tr -s "\n " " "

Na página do manual uniq :

Filter  adjacent  matching lines from INPUT (or standard input), writing to OUTPUT (or standard output).

       -c, --count
              prefix lines by the number of occurrences

Na página do manual tr :

Translate, squeeze, and/or delete characters from standard input, writing to standard output.

   -s, --squeeze-repeats
          replace  each  input  sequence  of  a repeated character that is listed in SET1 with a single occurrence of that character

Para ter o classificado descendente:

cat /var/log/apache2/access.log | cut -d' ' -f1 | uniq -c | sort -gr | tr -s "\n " " "

Um exemplo de saída (eu ofusquei os IP's):

 87 71.255.255.11 54 95.255.222.255 50 84.255.255.120 50 178.255.255.14 49 92.255.255.240 49 91.255.36.215 49 255.52.126.184 49 217.255.110.23 49 216.255.45.4 49 255.8.27.5

Observação: Meus exemplos estão usando cat porque não acho que usar tail -f funcionaria, pois não há End of File , mas você poderia usar apenas tail -100 por exemplo e fazer isso periodicamente.

    
por 24.06.2010 / 02:01