https://linuxoid.in/index.php?title=%D0%9D%D0%B5%D1%81%D0%BA%D0%BE%D0%BB%D1%8C%D0%BA%D0%BE_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%BE%D0%B2_%D0%B4%D0%BB%D1%8F_%D0%B0%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0_%D0%BB%D0%BE%D0%B3%D0%BE%D0%B2_Apache&feed=atom&action=history
Несколько скриптов для анализа логов Apache - История изменений
2024-03-29T10:52:16Z
История изменений этой страницы в вики
MediaWiki 1.37.2
https://linuxoid.in/index.php?title=%D0%9D%D0%B5%D1%81%D0%BA%D0%BE%D0%BB%D1%8C%D0%BA%D0%BE_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%BE%D0%B2_%D0%B4%D0%BB%D1%8F_%D0%B0%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0_%D0%BB%D0%BE%D0%B3%D0%BE%D0%B2_Apache&diff=2079&oldid=prev
Sevenfourk в 12:49, 16 августа 2012
2012-08-16T12:49:06Z
<p></p>
<table style="background-color: #fff; color: #202122;" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr class="diff-title" lang="ru">
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Предыдущая</td>
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Версия 12:49, 16 августа 2012</td>
</tr><tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l1">Строка 1:</td>
<td colspan="2" class="diff-lineno">Строка 1:</td></tr>
<tr><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Ниже приводятся несколько скриптов, написанных для удобства быстрого анализа логов Apache / Nginx (combined-формат логов) на предмет аномального пика активности или для поиска наиболее активных IP-адресов за промежуток времени.</div></td><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Ниже приводятся несколько скриптов, написанных для удобства быстрого анализа логов Apache / Nginx (combined-формат логов) на предмет аномального пика активности или для поиска наиболее активных IP-адресов за промежуток времени.</div></td></tr>
<tr><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br/></td><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br/></td></tr>
<tr><td class="diff-marker" data-marker="−"></td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Скрипты <del style="font-weight: bold; text-decoration: none;">написан </del>преимущественно с использованием mawk, поэтому он должен быть установлен в системе. Возможен вариант с использованием GNU awk, но он в разы более медленный. Кроме того, при необходимости используются параллельные версии декомпрессоров для GZ и BZ2 - pigz и pbzip2.</div></td><td class="diff-marker" data-marker="+"></td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Скрипты <ins style="font-weight: bold; text-decoration: none;">написаны </ins>преимущественно с использованием mawk, поэтому он должен быть установлен в системе. Возможен вариант с использованием GNU awk, но он в разы более медленный. Кроме того, при необходимости используются параллельные версии декомпрессоров для GZ и BZ2 - pigz и pbzip2.</div></td></tr>
<tr><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br/></td><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br/></td></tr>
<tr><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Скрипт 1 ==</div></td><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Скрипт 1 ==</div></td></tr>
</table>
Sevenfourk
https://linuxoid.in/index.php?title=%D0%9D%D0%B5%D1%81%D0%BA%D0%BE%D0%BB%D1%8C%D0%BA%D0%BE_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%BE%D0%B2_%D0%B4%D0%BB%D1%8F_%D0%B0%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0_%D0%BB%D0%BE%D0%B3%D0%BE%D0%B2_Apache&diff=2078&oldid=prev
Rain: Новая страница: «Ниже приводятся несколько скриптов, написанных для удобства быстрого анализа логов Apache …»
2012-08-16T10:30:56Z
<p>Новая страница: «Ниже приводятся несколько скриптов, написанных для удобства быстрого анализа логов Apache …»</p>
<p><b>Новая страница</b></p><div>Ниже приводятся несколько скриптов, написанных для удобства быстрого анализа логов Apache / Nginx (combined-формат логов) на предмет аномального пика активности или для поиска наиболее активных IP-адресов за промежуток времени.<br />
<br />
Скрипты написан преимущественно с использованием mawk, поэтому он должен быть установлен в системе. Возможен вариант с использованием GNU awk, но он в разы более медленный. Кроме того, при необходимости используются параллельные версии декомпрессоров для GZ и BZ2 - pigz и pbzip2.<br />
<br />
== Скрипт 1 ==<br />
Скрипт оформлен в виде функции. Использование:<br />
<br />
apache_logstat file [h|m|s] [num]<br />
<br />
где<br />
; file : путь к access_log-файлу, может быть plaintext'ом, в формате gzip или bzip2.<br />
; [h|m|s] : необязательный второй параметр, указывающий подробность отчета: '''h''' - почасово, '''m''' (дефолтный) - поминутно и '''s''' - посекундно<br />
; num : необязательный третий параметр (подразумевается, что при его наличии указан и 2-й параметр), указывающий, сколько запросов будет обозначено одним символьным блоком. Дефолтно для минутного разрешения используется 100 запросов на блок, для часового - 10000, для секундного - 5 запросов.<br />
<br />
Пример работы скрипта:<br />
<br />
<pre><br />
# apache_logstat access.log h 2000<br />
15/Aug/2012:03 R:1825 #<br />
15/Aug/2012:04 R:2822 ##<br />
15/Aug/2012:05 R:2668 ##<br />
15/Aug/2012:06 R:5465 ###<br />
15/Aug/2012:07 R:42915 ######################<br />
15/Aug/2012:08 R:30243 ################<br />
15/Aug/2012:09 R:18967 ##########<br />
15/Aug/2012:10 R:15394 ########<br />
15/Aug/2012:11 R:14113 ########<br />
15/Aug/2012:12 R:11908 ######<br />
15/Aug/2012:13 R:11242 ######<br />
15/Aug/2012:14 R:6436 ####<br />
15/Aug/2012:15 R:6234 ####<br />
</pre><br />
<br />
Код:<br />
<br />
----<br />
<br />
<source lang=bash><br />
<br />
apache_logstat() {<br />
<br />
[ -z "${1}" ] && echo -e "Usage: apache_logstat file [h|m|s] [num]\n\tfile - Apache common log file\n\tm|s - resolution in minutes or seconds\n\tnum - request count in block" || {<br />
<br />
[ -z "${2}" ] && r='m' || r="${2}"<br />
<br />
type="$(file "${1}" | grep -oE 'gzip|bzip')"<br />
<br />
case "${type}" in<br />
gzip) cmd='unpigz -c'<br />
;;<br />
bzip)<br />
cmd='pbunzip2 -c'<br />
;;<br />
*)<br />
cmd='cat'<br />
;;<br />
esac<br />
<br />
$cmd "${1}" | mawk '<br />
{<br />
if ("'$r'"=="m") gsub(/:[0-9]+$/, "", $4)<br />
if ("'$r'"=="h") gsub(/:[0-9]+:[0-9]+$/, "", $4)<br />
a[$4]++<br />
}<br />
END {<br />
for (i in a) {<br />
j=i<br />
gsub(/^\[/, "", i)<br />
if ("'$3'"=="") {<br />
if ("'$r'"=="m") b="100"<br />
else if ("'$r'"=="h") b="10000"<br />
else b="5"<br />
}<br />
else b="'$3'"<br />
printf "%-30s", i"\tR:"a[j]<br />
for (k=0; k<a[j]; k+=b) printf "%s", "#"<br />
print ""<br />
}<br />
}' | sort<br />
}<br />
}<br />
</source><br />
<br />
== Скрипт 2 ==<br />
<br />
Данный скрипт показывает число запросов в минуту с одного IP-адреса с сортировкой по минутам. При обработке исключаются обращения с localhost и запрос jpg/jpeg-картинок. Параметр 1 - plaintext-файл лога; при необходимости можно добавить блок кода автоопределения передаваемого файла или архива по типу приведенного в первом скрипте.<br />
<br />
Пример работы:<br />
<pre><br />
$ apache_ip_logstat access_log<br />
48 188.26.24.214 2012/08/15 21:56<br />
14 190.235.179.226 2012/08/15 21:57<br />
19 95.25.19.190 2012/08/15 21:57<br />
59 188.26.24.214 2012/08/15 21:57<br />
20 95.27.72.24 2012/08/15 22:04<br />
19 77.232.158.58 2012/08/15 22:13<br />
32 178.168.30.155 2012/08/15 22:15<br />
</pre><br />
<br />
Код:<br />
----<br />
<source lang=bash><br />
apache_ip_logstat() {<br />
mawk '<br />
! /127.0.0.1/ && ! /localhost/ && ! /.jpg / && ! /.jpeg/{<br />
sub(/Jan/, "01", $4)<br />
sub(/Feb/, "02", $4)<br />
sub(/Mar/, "03", $4)<br />
sub(/Apr/, "04", $4)<br />
sub(/May/, "05", $4)<br />
sub(/Jun/, "06", $4)<br />
sub(/Jul/, "07", $4)<br />
sub(/Aug/, "08", $4)<br />
sub(/Sep/, "09", $4)<br />
sub(/Oct/, "10", $4)<br />
sub(/Nov/, "11", $4)<br />
sub(/Dec/, "12", $4) <br />
<br />
gsub(/:[0-9][0-9]$|^\[/, "", $4)<br />
d[$1" "$4]++<br />
}<br />
END {<br />
for (b in d) {<br />
split(b, c)<br />
split(c[2], e, "/")<br />
split(e[3], f, ":")<br />
if (d[b]>10) print d[b]"\t"c[1]"\t"f[1]""e[2]""e[1]""f[2]""f[3]<br />
}<br />
}' "${1}" | sort -nk3 | sed -r 's@([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})$@\1/\2/\3 \4:\5@g'<br />
}<br />
</source><br />
<br />
[[Category:Общее]][[Category:Bash-скрипт]][[Category:Shell-функция]]</div>
Rain