"Бинарные логи" в реальной жизни

Мы всегда говорим, что киборги-админы локалхоста, читающие логи "глазами" (например, раз, два, три), и проклинающие "бинарные логи", просто не знакомы с задачами, которые возникают, когда надо не только читать /var/log/messages, но и осмысливать прочитанное. И вот, в новых вакансиях Яндекса, мы с интересом увидели практические примеры задач на анализ логов:

Эксперт по нагрузочному тестированию
...
Продемонстрируйте свои знания
...
Вопрос 4

Перед вами пример части access-лога web-сервера, на котором работает сервис Яндекс.Погода.

[10/Jul/2010:00:13:18 +0400] pogoda.yandex.ru 2.2.2.2 "GET /chernigov HTTP/1.1" 200 "http://www.yandex.ua/" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)" 113
[10/Jul/2010:00:13:19 +0400] pogoda.yandex.ru 3.3.3.3 "GET /russia HTTP/1.1" 200 "http://pogoda.yandex.ru/27612/choose/" "Opera/9.52 (Windows NT 6.0; U; MRA 5.5 (build 02842); ru)" 119
[10/Jul/2010:00:13:20 +0400] pogoda.yandex.ru 5.5.5.6 "GET / HTTP/1.1" 302 "http://www.yandex.ru/" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; InfoPath.2)" 203


Любым удобным для вас способом определите, пожалуйста, для полного лога из нескольких миллионов строк:

1) топ-3 рефереров, с которых перешли на главную страницу сервиса (/) или на страницу с прогнозом погоды в Москве (/moscow), и число таких переходов;
2) в какое время уложилось 95% запросов (время ответа в мс указано в последнем столбце каждой строки) для страниц с прогнозом погоды в Киеве (/kiev).

Из ответа мы хотели бы понять почему вы подошли к решению задачи именно таким способом и увидеть пример конкретной реализации.


и еще одна вакансия:

Стажёр-тестировщик
...
Продемонстрируйте свои знания
...
Вопрос 11

Перед вами часть access-лога веб-сервера, на котором работает Яндекс.Погода.

[10/Oct/2012:00:15:32 +0400] pogoda.yandex.by 178.122.164.78 "GET / HTTP/1.1" 302 "-" "Opera/9.80 (Windows NT 5.1; U; Edition Yx 01; ru) Presto/2.10.229 Version/11.60" "-" 0.008 - 1170
[10/Oct/2012:00:15:35 +0400] pogoda.yandex.ru 212.193.232.183 "GET / HTTP/1.0" 302 "-" "-" "-" 0.011 - 1237
[10/Oct/2012:00:15:37 +0400] pogoda.yandex.ru 78.46.121.182 "GET /kemerovo/details HTTP/1.1" 200 "http://pogoda.yandex.ru" "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)" "-" 0.314 - 93275
[10/Oct/2012:00:15:38 +0400] pogoda.yandex.ru 93.158.129.212 "GET /astrahan/ HTTP/1.1" 200 "-" "Python-urllib/2.5" "-" 0.183 - 37160


Любым удобным для вас способом определите для полного лога из нескольких миллионов строк:

1) количество запросов для каждой секунды суток;
2) число 5хх HTTP-кодов ответа.

Поясните, каким образом вы решали задачу и почему выбрали именно его, и приведите пример реализации.


Те наши читатели, которые хоть немного знакомы с SQL, уже могли заметить, что вопросы довольно характерные. Мы бы хотели задать дополнительные вопросы соискателям:

  1. Почему хранение журнала в текстовом файле будет нерационально для решения подобных задач?
  2. Какие есть практические варианты для ведения журнала событий, которые бы позволили эффективно получать ответы на подобные запросы?