Эффективный способ проанализировать Журнал Доступа Apache для логинов CMS

Я работал над способом проанализировать большие журналы множественного доступа (иногда в двузначной цифре ГБ в размере) для CMSs. Прямо сейчас мне просто нужны WordPress и Joomla, но я знаю, что типы будут расти со временем. В настоящее время у меня есть две остроты (они в конечном счете войдут в сценарий Bash, таким образом, любой язык сценариев сможет использоваться, пока Bash может интерпретировать его):

echo -e "\n=== WordPress ===\n"; grep --no-messages wp-login.php /usr/local/apache/domlogs/* | grep POST | grep "$(date +"%d/%b/%Y")" | cut --fields=1 --delimiter=: | sort | uniq --count | sort --reverse --numeric-sort | head | sed 's/^ *//g'

echo -e "\n=== Joomla ===\n"; grep --no-messages '/administrator/index.php' /usr/local/apache/domlogs/* | grep POST | grep "$(date +"%d/%b/%Y")" | cut --fields=1 --delimiter=: | sort | uniq --count | sort --reverse --numeric-sort | head | sed 's/^ *//g'

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

=== WordPress ===

896 /usr/local/apache/domlogs/blogp.com
52 /usr/local/apache/domlogs/blogt.com
9 /usr/local/apache/domlogs/blog.com

=== Joomla ===

65778 /usr/local/apache/domlogs/bloge.com
478 /usr/local/apache/domlogs/blogq.com
83 /usr/local/apache/domlogs/blogh.com

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

0
задан 8 December 2014 в 15:11
1 ответ

Это немного зависит от того, как вы настраиваете Apache для форматирования вашего access_log . Если вы используете общий формат журнала «CLF»:

LogFormat "%h %l %u %t \"%r\" %>s %b" common
CustomLog logs/access_log common

Тогда 7-е поле содержит URL-адрес запроса. Небольшой кусочек awk , который всегда присутствует и достаточно эффективен при синтаксическом анализе текста. (В Linux почти всегда по умолчанию используется расширенный GNU awk ; в Solaris вам лучше убедиться, что gawk ). Это позволяет вам выполнять несколько операций за один проход:

awk '
   $7 ~ /wp-login.php/ {print $0 }
   $7 ~ /\/administrator\/index.php/ {print $0}
' access_log

будет искать 7-е поле $ 7 с регулярным выражением ~ , заключенным в косые черты / . Когда совпадение найдено, выполняется { действие } , заключенное в фигурные скобки. Простое действие - это $ print вся строка $ 0 , содержащая совпадение.

Чуть более сложное действие с обновлением счетчиков в сочетании с блоком END:

awk '
   $7 ~ /wp-login.php/ {++wp }
   $7 ~ /\/administrator\/index.php/ {++jl}
   END   { print wp , " WordPress Logins found.\n" , jl , " Joomla logins found.\n" }
' access_log

Примечание: Выучите подходящий язык сценариев. То есть почти обязательно для профессионального системного администратора. Фактический язык не так важен , часто в магазине уже есть установленный внутренний стандарт сценариев, и тогда вы можете попросить кого-нибудь научить вас.
Базовые знания bash sed и awk и различных утилит командной строки в дополнение к grep пока не дадут вам результатов. Дополните это чем-нибудь вроде perl , python , ruby ​​, даже php или PowerShell в среде Windows.

0
ответ дан 24 November 2019 в 08:53

Теги

Похожие вопросы