AWK для анализа логов нагрузочного тестирования
AWK - утилита предназначенная для простых, механических и
вычислительных манипуляций над данными. Довольно несложные операции
часто необходимо выполнить над целыми пакетами файлов, а писать для
этого программу на одном из стандартных языков программирования является
утомительным и, как правило, не очень простым делом. Оптимальное
решение проблемы - использование специальной утилиты AWK,
включающей в себя не громоздкий и удобный язык программирования,
позволяющий решать задачи обработки данных с помощью коротких программ,
состоящих из двух-трех строк.
Небольшой tutorial по awk.
Поля
Каждая сканируемая строка input рассматривается как состоящая из полей, разделенных разделительными символами (по умолчанию - пробел). На поля можно ссылаться из AWK программы следующим образом:- $1 - Первое поле;
- $2 - Второе поле;
- ... и так далее...
- $0 - Ссылается на всю строку целиком.
Значения переменных
Переменные могут интерпретироваться как числовые или строковые. В общем то в awk динамическая типизация.Переменные поля
Ссылки на поля $1, $2, ... могут интерпретироваться в качестве переменных, например: $1 = "3" + $2 - первое поле принимает значение второго поля, увеличенного на 3.$(i+1) - интерпретируется как поле, номер которого зависит от значения переменной i.
Массивы
Допускается использование массивов. Массивы не объявляются, а принимают значения из контекста, например: x[NR] = $0 - элементу массива x, индексированному NR, присваивается обрабатываемая строка.Регулярное выражение
Для осуществление поиска в AWK языке допускается использование регулярных выражений, определенных в описании SED, заключенных в``/ /''. Дополнения к использованию регулярных выражений, допускаемые в AWK-языке:- "( )" - Скобки допускаются для группирования;
- " |" - Указание альтернативы "или";
- " + " - Плюс, стоящий за регулярным выражением означает любую последовательность вхождений этого выражения, начиная с 1;
- " ? " - Знак вопроса за регулярным выражением означает 0 или 1 вхождений этого выражения;
- [A-Z] - Допускается сокращенная форма записи для рангов ASCII символов;
- Установленный порядок выполнения операторов на одном скобочном уровне: "[] * + ? конкатенация |".
/Olga/ - Указывает на строки, содержащие Olga.
/number[0-9]/ - Указывает на строки, содержащие number0 или number1 или ... number9.
Встроенные функции
length(arg) - Функция длины arg. Если arg не указан, то выдает длину текущей строки.exp(),log(),sqrt() - Математические функции экспонента, логарифм и квадратный корень.
int() - Функция целой части числа.
substr(s,m,n) - Возвращает подстроку строки s, начиная с позиции m, всего n символов.
index(s,t) - Возвращает начальную позицию подстроки t в строке s. (Или 0, если t в s не содержится.)
sprintf(fmt,exp1,exp2,...) - Осуществляет форматированную печать (вывод) в строку, идентично PRINTF.
split(s,array,sep) - Помещает поля строки s в массив array и возвращает число заполненных элементов массива. Если указан sep, то при анализе строки он понимается как разделитель.
Управляющие структуры
Условное предложение: if ( < условие> ) < предложение>\hskip 1cm [else < предложение> ]
Предложения цикла:
while ( < условие> ) < предложение>
for (< выражение> ; < условие> ; < выражение> )
\hskip 1cm < предложение>
Например:
for(i=1; i< =NF; i++) - Аналогично циклу for в языке ``С''
for (i in array) - Цикл по элементам массива. Но, элементы массива доступны в этом случае в случайном порядке.
break - Немедленный выход из цикла.
continue - Переход к выполнению следующего предложения.
next - Немедленный переход к анализу следующей строки.
exit - Выход из программы (на конец input).
# - Комментарий
И несколько полезных примеров для нагрузочного:
Считаем количество хитов и хостов за час по access
Хиты: Если реферер не пустой и HTTP=200 тогда считаем. |
cat access.log | grep '01/Jun/2011:10:' | grep ' 200 ' | awk '{ if ( $11 != "\"-\"" ) print }' | wc -l
Хосты:
cat access.log | grep '01/Jun/2011:10:' | grep ' 200 ' | awk '{ if ( $11 != "\"-\"" ) print $1}' | uniq | wc -l
в list.txt будет список айпи отсортированный по кол-ву обращений.
просматриваете, находите кто чаще всего обращался к апачу.
cat access.log | awk ' {print $1 }' | sort | uniq -c | sort -nr > list.txt
Комментариев нет:
Отправить комментарий