Мне нравится использовать в логах tab как разделитель. Это упрощает анализ с помощью таких утилит как awk.
Собственно под эту задачу я использую небольшой скрипт awkt.
Формат команды:
awkt [s] [1] [2] ...
s - необязательный параметр, считает и сортирует уникальные значения
1,2 и т.д. - номер значения в строке лога, которые надо выводить

Формат лога для Nginx-а у меня выглядит так:
a
log_format main	'$remote_addr	$geo	"$remote_user"	[$time_local]	'
	'"$request"	$status	$bytes_sent	'
	'$backend	$upstream_response_time	"$http_referer"	'
	'"$http_user_agent"	$gzip_ratio';
Данные поступают через pipe, формат запуска, такой:
cat access.log | awkt 5 6
выведет два столбца с запросом($request) и кодом ответа($status).
А если так:
cat access.log | awkt s 9 5
то можно посмотреть распределение времени ответа по запрашиваемым страницам

Можно очень быстро проделывать такие штуки:
  1. Распределение запросов по странам
    cat access.log | awkt s 2
    Результат, как пример:
    [skip]
        276 ES
        321 IT
        463 UA
        502 GB
        510 FR
       1025 SE
       1303 NL
       1904 RU
       3598 DE
      21472 US
  2. Количество запросов, переданных бекенду и отданных закешированной статикой ($backend)
    cat access.log | awkt s 8
    Результат:
      13670 0
      20767 1
  3. Количество запросов с одного IP вместе с юзер-агентом
    cat access.log | awkt s 1 11
    Результат:
    [skip]
        353 208.36.144.9   "Mozilla/5.0 (Twiceler-0.9 http://www.cuil.
    	com/twiceler/robot.html)"
        473 67.195.37.108  "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0;
    	 http://help.yahoo.com/help/us/ysearch/slurp)"
        694 67.195.37.108  "Mozilla/5.0 (compatible; Yahoo! Slurp;
    	 http://help.yahoo.com/help/us/ysearch/slurp)"
        976 78.46.75.108   "Mozilla/5.0 (compatible; heritrix/${pom.
    	version} +http://seekda.com)"
       1700 66.249.71.47   "Mozilla/5.0 (compatible; Googlebot/2.1;
    	 +http://www.google.com/bot.html)"
       1720 66.249.71.46   "Mozilla/5.0 (compatible; Googlebot/2.1;
    	 +http://www.google.com/bot.html)"
       1769 66.249.71.45   "Mozilla/5.0 (compatible; Googlebot/2.1;
    	 +http://www.google.com/bot.html)"
       3084 66.150.96.121  "FeedBurner/1.0 (http://www.FeedBurner.com)"
    Как видно, в топе, конечно, боты :)
    А если совместить это с другими командами, то можно в крон поставить наблюдалку и блокировать особо зарвавшихся юзеров в iptables (исключая конечно гугл и т.п.)
    tail -n 1000 access.log | grep -v -E "FeedBurner|Yahoo|Google|
    msnbot|Yandex" | awkt s 1 | awk '{if($1 > 100) print $2}' |
     while read ip; do iptables -A INPUT -s $ip -j TARPIT; done;
    (если у вас в системе нет модуля TRAPIT для ibtables, то можно использовать стандартный DROP)
    П.С. для таких случаев лучше использовать limit_req_zone, limit_conn, limit_zone в самом nginx-е или limit в iptables
  4. Время генерации ответа
    cat access.log | awkt s 9
    Результат:
    [skip]
        409 0.003
        474 0.009
        491 0.047
        648 0.045
        697 0.044
        770 0.010
        837 0.024
       1112 0.001
       1258 0.043
       1908 0.002
      13952 -
    А вот так потом можно график построить:
    cat access.log | awkt 9 | sort | uniq -c
    Если совместить это с $request, то можно узнать, какие страницы тормозят:
    cat access.log | awkt 9 5 | sort -n
    Результат:
    [skip]
    0.947   "POST /XXX HTTP/1.1"
    0.948   "GET /XXX HTTP/1.1"
    1.064   "GET /XXX HTTP/1.1"
    1.153   "POST /XXX HTTP/1.0"
    1.161   "GET /XXX HTTP/1.1"
  5. Самые запрашиваемые страницы
    cat wipmania.log | awkt s 5
    Результат:
    [skip]
        548 "GET /XXX HTTP/1.1"
        628 "GET / HTTP/1.0"
        736 "GET /XXX HTTP/1.1"
        860 "GET /XXX HTTP/1.1"
       1244 "GET /XXX HTTP/1.1"
       1687 "GET / HTTP/1.1"
  6. Какой сайт принес больше всего трафика
    cat wipmania.log | awkt s 10
    Результат:
    [skip]
        442 "http://www.A.com/A"
        459 "http://www.B.com/B"
        708 "http://www.C.com/C"
        760 "http://www.D.com/D"
      25338 "-"
Много, что можно еще придумать, это на фантазию каждого.

4 Votes | Average: 5 out of 54 Votes | Average: 5 out of 54 Votes | Average: 5 out of 54 Votes | Average: 5 out of 54 Votes | Average: 5 out of 5 (4 votes, average: 5 out of 5)
Loading ... Loading ...

Top Posts: