Я могу использовать анализаторы логов, но часто мне нужно анализировать последние веб-логи, чтобы увидеть, что происходит в данный момент.
Я иногда делаю вещи, как выяснить топ-10 ips, которые запрашивают определенный файл
cat foo.log | grep request_to_file_foo | awk '{print $1}' | sort -n | uniq -c | sort -rn | head
Что у вас есть в вашем наборе инструментов?
Ответы:
С помощью только файлов awk вы можете делать что угодно с файлами журналов apache. Файлы журнала Apache в основном разделены пробелами, и вы можете делать вид, что кавычки не существуют, и получать доступ к любой интересующей вас информации по номеру столбца. Единственный раз, когда это выходит из строя, это если у вас есть объединенный формат журнала и вы заинтересованы в пользовательских агентах, после чего вы должны использовать кавычки (") в качестве разделителя и выполнить отдельную команду awk. Далее будут показаны IP-адреса каждый пользователь, который запрашивает страницу индекса, отсортирован по количеству просмотров:
7 $ - запрошенный URL. Вы можете добавить любые условия, которые вы хотите в начале. Замените '$ 7 == "/" любой информацией, которую вы хотите.
Если вы замените $ 1 в (ipcount [$ 1] ++), то вы можете сгруппировать результаты по другим критериям. Использование $ 7 покажет, какие страницы были доступны и как часто. Конечно, тогда вы захотите изменить условие в начале. Ниже будет показано, какие страницы были доступны пользователю с определенного IP:
Вы также можете передать вывод через sort, чтобы получить результаты по порядку, либо как часть команды оболочки, либо также в самом скрипте awk:
Последнее будет полезно, если вы решите расширить скрипт awk для распечатки другой информации. Все дело в том, что вы хотите узнать. Они должны служить отправной точкой для всего, что вас интересует.
источник
По причинам, которые я не могу себе представить, я никогда не видел, чтобы кто-то еще делал это, изменив формат файла журнала Apache на более легко разбираемую версию с информацией, которая действительно важна для вас.
Например, мы никогда не используем базовую аутентификацию HTTP, поэтому нам не нужно регистрировать эти поля. Я буду заинтересован в том , как долго каждый запрос занимает служить, поэтому мы добавим , что в. Для одного проекта, мы также хотим знать (на нашей балансировке нагрузки) , если любые сервера обслуживать запросы медленнее , чем другие, поэтому мы регистрируем имя сервера, к которому мы возвращаемся.
Вот выдержка из конфигурации apache одного сервера:
Из этого нельзя сказать, что между каждым полем находится буквальный символ табуляции (\ t). Это означает, что если я хочу провести некоторый анализ в Python, например, показать не-200 статусов, я могу сделать это:
Или, если бы я хотел сделать, «кто ссылки горячие ссылки?» это было бы
Для количества IP-адресов в журнале доступа, предыдущий пример:
становится примерно так:
Легче читать и понимать, и намного дешевле в вычислительном отношении (без регулярных выражений), что при 9 ГБ журналах имеет огромное значение в том, сколько времени это займет. Когда это становится ДЕЙСТВИТЕЛЬНО аккуратно, если вы хотите сделать то же самое для User-agent. Если ваши журналы разделены пробелами, вы должны выполнить некоторое сопоставление с регулярным выражением или поиск строки вручную. С этим форматом все просто:
Точно так же, как и выше. На самом деле, любое резюме, которое вы хотите сделать, по сути точно такое же.
С какой стати я трачу центральный процессор моей системы на awk и grep, когда cut делает то, что я хочу на порядок быстрее?
источник
cut -f 3 log | uniq -c | sort -n
пользовательскими агентамиcut -f 8 log | uniq -c | sort -n
.Забудьте про awk и grep. Проверьте asql . Зачем писать нечитаемые сценарии, когда вы можете использовать sql-подобный синтаксис для запроса файла журнала. Например.
источник
Вот скрипт для поиска главных URL-адресов, лучших ссылок и лучших пользовательских агентов из последних N записей журнала
Источник
источник
для количества IP в журнале доступа:
Это немного некрасиво, но это работает. Я также использую следующее с netstat (чтобы увидеть активные соединения):
Они одни из моих любимых "лайнеров" :)
источник
Составление списка общих вопросов было бы отличным показателем для ответов на этот вопрос. Мои общие вопросы:
Я замечаю такие изменения, отслеживая страницы состояния сервера (через mod_status) на предмет скорости обращения и приблизительного времени ответа для активных и недавно выполненных запросов (прекрасно понимая, что я пропускаю огромную кучу данных, но примеры достаточно хороши).
Я использую следующую директиву LogFormat (% T действительно полезен)
Я ищу причинно-следственную связь и то, что произошло сначала ... обычно о конкретных подмножествах шаблонов в моих журналах, поэтому мне нужно знать следующее для любого данного шаблона / регулярного выражения:
Я обычно использую Perl, потому что в конце концов он становится достаточно сложным, чтобы быть полезным.
Примером, не относящимся к Perl, может быть быстрый удар в минуту для не-200 кодов состояния:
Да, я обманываю с этим grep, предполагая, что пробел-пробел-200-пробел совпадает только с http-кодами состояния .... может использовать awk или perl для изоляции поля, просто имейте в виду, что это может быть неточно.
Более сложным примером в Perl может быть визуализация изменения битрейта для шаблона.
В приведенном ниже сценарии есть что пережить, особенно если вы не знакомы с Perl.
код следует:
Если вы просто хотите обработать стандартные метрики, оформите заказ
источник
Вот мой пример «sed», он читает формат логов apache по умолчанию и преобразует его в нечто более удобное для автоматической обработки. Вся строка определена как регулярное выражение, переменные сохраняются и записываются в вывод с «#» в качестве разделителя.
Упрощенная запись ввода:% s% s% s [% s] "% s"% s% s "% s" "% s"
Пример строки ввода: xx.xx.xx.xx - - [29 / Mar / 2011: 12: 33: 02 +0200] "GET /index.html HTTP / 1.0" 200 9443 "-" "Mozilla / 4.0"
Пример строки выходных данных: xx.xx.xx.xx # - # - # 29 / Mar / 2011: 12: 33: 02 + 0200 # GET /index.html HTTP / 1.0 # 200 # 9443 # - # Mozilla / 4.0
Почувствуйте силу регулярных выражений :-)
источник
Я часто использую awk, следя за файлом. Каждую ночь я доставляю себе веб-отчет для каждого сервера. В зависимости от вашего файла журнала и вашего LogFormat вам нужно отредактировать некоторые из этих лайнеров, чтобы они работали на вас.
Вот простой пример:
Если я хочу подключить журналы на моем сервере только для кодов состояния 404/500, я бы сделал это:
<snip>
</ snip>
источник
Кто горячо связывает ваши изображения:
источник
В большинстве случаев я обычно читаю разделы журнала, основанные на времени, поэтому я написал следующий скрипт, используя sed для извлечения интересующего меня периода, он работает с каждым файлом журнала, который я получил. через и может обрабатывать архивированные журналы, а также.
источник
Хотя это и не sed или awk, есть две вещи, которые я нашел полезными для работы с файлами журналов apache и icecast.
AWStats имеет очень полезный скрипт logresolvemerge.pl , который объединяет несколько сжатых или несжатых файлов журнала, удаляет дубликаты и сортирует по отметке времени. Он также может выполнять поиск DNS и быть настроен для запуска многопоточных. Это особенно полезно при использовании с awstats, потому что awstats не может добавлять строки журнала с временными метками, которые старше текущей базы данных, поэтому все должны быть добавлены по порядку, но это очень просто, поскольку вы просто добавляете все в logresolvemerge.pl, и все это красиво появляется.
sed и awk довольно плохо справляются с датами, потому что они обычно воспринимают их как строки. У awk есть некоторые функции времени и даты, но их не так много. Например, извлечь диапазон строк между двумя временными метками сложно, если эти точные временные метки не встречаются в файле (даже если значения между ними есть) - пример Криса имеет именно эту проблему. Чтобы справиться с этим, я написал PHP-скрипт, который сообщает о диапазонах меток времени файла журнала, а также может извлекать порцию по диапазону меток времени, используя любой формат даты или времени, который вам нравится (он не должен совпадать с форматом метки времени файла журнала).
Чтобы сохранить это в теме, вот несколько полезных акизм: Получите общее количество байтов, обслуживаемых из журнала Apache или Icecast:
Получить общее количество секунд, подключенных из журнала Icecast:
источник
При восстановлении этого старого потока, после отказа от asql для больших файлов журналов, искал решение, которое также вызывало ошибку сервера. Я обнаружил, что здесь wtop - это инструмент с открытым исходным кодом, который способен выполнять мониторинг в реальном времени или журналы процессов и получать статистику (top N), очень гибкий и мощный, официальное место здесь
источник