Назад | Перейти на главную страницу

Распределенный grep

Есть ли решение для распределенного grep?

вот история: у меня есть несколько веб-серверов, и я хочу запросить их журналы приложений (я использую tomcat, если это важно). Я не хочу копировать файлы в общее хранилище, они слишком большие, сеть стоит дорого, а хранилище слишком дорого, поэтому я хочу хранить их на одних и тех же веб-серверах. Так что даже хаддоп + улей или аналогичные решения не сработают.
Так что я ищу, возможно, локального агента, для которого я могу отправить запрос grep на все хосты и получить результаты обратно.
Что-нибудь подобное существует?

Спасибо!

Кстати, я задал точно такой же вопрос о http://scale.metaoptimize.com/questions/87/distributed-grep но по какой-то причине сервер продолжает обслуживать меня 500, когда я пытаюсь просмотреть этот вопрос, поэтому я репостю здесь.

Для выполнения простых команд, например greping для определенной строки в журналах сервера используйте параллельный клиент SSH, например пшш или dsh.

Для более сложных задач вы можете взглянуть на MCollective.

Было бы весело попробовать это с GNU parallel, может быть что-то вроде этого:

Поместите серверы в файл servers.txt. Затем:

parallel --sshlogins servers.txt "grep foo logfile"

Сам не пробовал.

Для таких задач я использую GNU Parallel.

echo "fgrep -Rl <MyQuery> /var/log/" | parallel --onall --slf servers.txt

Почему бы просто не запустить что-то вроде задания cron на своем веб-сервере, запустив что-то вроде

grep something /path/to/log | ssh -C LogAnalyser "tee >> log_from_host X"

Если вы хотите знать, когда передача со всех хостов завершена в LogAnalyser, вы можете начать с создания файла блокировки и удаления после tee.

Вы можете попробовать MCollective http://puppetlabs.com/mcollective

Описание его веб-сайта:

Marionette Collective AKA MCollective - это фреймворк для построения систем оркестровки серверов или параллельного выполнения заданий. В первую очередь мы будем использовать его как средство программного выполнения действий системного администратора на кластерах серверов. В этом отношении мы работаем в том же пространстве, что и такие инструменты, как Func, Fabric или Capistrano. Мы попытались придумать нестандартные решения, проектируя эту систему, не полагаясь на центральную инвентаризацию и инструменты, такие как SSH, мы не просто причудливый SSH «цикл for».

Это очень сложная система оркестровки, если вам нужно только выполнить несколько простых журналов grep, это может превысить ваши потребности.

Возможно, что-то в следующем цикле bash?

export FQDNS="hostname.domain.tld another.domain.tld"
for host in $FQDNS
do
  ssh $host 'grep "andol was here" /var/log/syslog'
done