Итак, выяснилось, что какой-то специфичный анализатор лога, чтобы собирать ежедневную обобщенную статистику, мне не требуется.
Что нужно? Нужно посчитать, сколько всего трафика за сутки израсходовал тот или иной пользователь.
Решаем задачу наличными силами и подручными средствами. Лог сквида имеет вполне определенный формат, гугл в помощь. Мне нужны поля: передано байт (5), имя пользователя (8) и результат запроса (4). Ну и воспользуемся такой прелестью авка, как ассоциативные массивы. Дальше - просто копипаста рабочего скрипта.
MAWK давно не обновлялся, поэтому я явно указал интерпретатор GAWK.
Что нужно? Нужно посчитать, сколько всего трафика за сутки израсходовал тот или иной пользователь.
Решаем задачу наличными силами и подручными средствами. Лог сквида имеет вполне определенный формат, гугл в помощь. Мне нужны поля: передано байт (5), имя пользователя (8) и результат запроса (4). Ну и воспользуемся такой прелестью авка, как ассоциативные массивы. Дальше - просто копипаста рабочего скрипта.
MAWK давно не обновлялся, поэтому я явно указал интерпретатор GAWK.
#!/usr/bin/gawk -f
# usage:
# 1) get_sqlog.awk filename
# 2) cat filename|get_sqlog.awk
# Если нет пользователя или есть один из двух отлупов, то переходим к следующей строке
{if ($8 == "-" || $4 == "TCP_DENIED/407" || $4 == "TCP_DENIED/403") { next }
# Ассоциативные массивы, в качестве индекса - имя пользователя
# Сколько раз он нам попался
++occurrences[$8]
# Его трафик
summary[$8]=summary[$8]+$5
}
END {
# Проходим по всем элементам массива и красиво печатаем их
# Переменная а принимает значения индексов, определенные во время анализа
for (a in occurences){
printf "%-30s:%10d:%10d\n",a,occurrences[a],summary[a]
}
}
Под катом подробное описание.