Я запускаю несколько (~20) сайтов на Dreamhost VPS. Недавно я превысил выделение памяти для VPS и хочу найти проблему.
Мне бы хотелось иметь скрипт SSH, который будет сканировать все файлы журналов всех доменов и показывать, какой объект (изображение, PHP-скрипт и т. д.) получает больше всего вызовов.
Он подсчитает вызовы в каждом /logs/*/http/access.log, выполнит сортировку по убыванию и покажет мне 10 лучших по доменам.
Но я не знаю, как это сделать.
Можно ли это сделать?
Может ли кто-нибудь предложить скрипт, который это сделает?
решение1
Часть, в которой вы просили скрипт для «...подсчета вызовов в каждом /logs/*/http/access.log, выполнения сортировки по убыванию и отображения 10 лучших по доменам», можно выполнить с помощью этого:
grep -o " /[^ ]*" /logs/*/http/access.log | sort | uniq -c | sort -rn | head
Но вы можете получить ту же информацию из AWStats или Google Analytics. Это на самом деле просто список всех URL-адресов, агрегированных и отсортированных по количеству обращений к каждому из них.
Тот же шаблон команд Unix можно использовать для объединения ошибок PHP и ошибок Apache, что может быть более полезным в вашей конкретной ситуации. Например, следующее:
grep -o " PHP.*" /logs/*/php/error.log | sort | uniq -c | sort -rn | head
Найду все ошибки PHP из вашего журнала ошибок PHP (я догадался, где вы его храните) и перечислю 10 наиболее частых из них.
Еще один полезный совет:
grep -o " PHP Fatal error: Allowed memory size.*" /logs/*/php/error.log | sed 's/tried to allocate [0-9]* bytes/tried to allocate N bytes/' | sort | uniq -c | sort -rn | head
Которая найдет все ваши ошибки нехватки памяти и сгруппирует их вместе.
решение2
Вместо того, чтобы использовать этот подход, я бы рекомендовал вам рассмотреть возможность настройки централизованного сервера журналирования. У вас есть несколько вариантов для этого, начиная от старого хранилища на основе файлов и заканчивая более веб-инструментами анализа, которые сохраняют журналы в базе данных и позволяют вам выполнять поиск по ним, создавать диаграммы/графики и т. д.
Вот ссылка на замечательный технический документ от Cisco Systems, который вам поможет:
Создание масштабируемых решений по управлению системным журналом
решение3
Вместо этого сложного ручного решения я бы рекомендовал вам использовать такой инструмент, какСплунцСервер.
Splunk на самом деле является потрясающим анализатором журналов, в котором вы можете анализировать журналы любым удобным для вас способом, даже с оповещениями.
Splunk собирает, индексирует и использует огромные объемы ценных машинных данных, генерируемых вашей сложной ИТ-инфраструктурой, будь то физическая, виртуальная или облачная.