Лучший способ объединить несколько файлов журналов с нескольких серверов [закрыто]

StackOverflow https://stackoverflow.com/questions/83741

Вопрос

Мне нужен простой способ мониторинга нескольких файлов текстовых журналов, распределенных по нескольким серверам HP-UX.Они представляют собой смесь текстовых и XML-файлов журналов из нескольких распределенных устаревших систем.В настоящее время мы просто подключаемся к серверам по SSH и используем хвост -f и grep, но это не масштабируется, если вам нужно отслеживать много журналов.

Поскольку логи имеют разные форматы и представляют собой просто файлы в папках (автоматически вращающиеся при достижении определенного размера), мне нужно как собирать их удаленно, так и анализировать каждый по-разному.

Моя первоначальная мысль заключалась в том, чтобы создать простой демон-процесс, который я мог бы запускать на каждом сервере, используя специальную программу чтения файлов для каждого типа файлов, чтобы преобразовать их в общий формат, который можно будет экспортировать по сети через сокет.Другая программа просмотра, работающая локально, будет подключаться к этим сокетам и отображать проанализированные журналы в каком-нибудь простом графическом интерфейсе с вкладками или агрегировать их на консоли.

В какой формат журнала мне следует попытаться преобразовать, если я хочу реализовать его таким образом?

Есть ли другой более простой способ?Должен ли я попытаться перевести файлы журнала в формат log4j для использования с Бензопила или есть ли лучшие программы просмотра журналов, которые могут подключаться к удаленным сокетам?Могу ли я использовать BareTail как предложено в еще один вопрос по журналу?Это не массово распределенная система и изменение текущих реализаций журналирования для всех приложений для использования широковещательной рассылки UDP или помещения сообщений в очередь JMS не является вариантом.

Это было полезно?

Решение

Параметры:

  1. Используйте SocketAppender для отправки всех журналов напрямую на 1 сервер.(Это может снизить производительность сервера и добавить единую точку отказа.)
  2. Используйте сценарии для агрегирования данных.Я использую ключи scp, ssh и аутентификации, чтобы мои сценарии могли получать данные со всех серверов без каких-либо запросов на вход в систему.

Другие советы

Вероятно, самым легким решением для просмотра журналов в реальном времени является использование Раковина танцора в параллельном режиме с хвостом -f:

dsh -Mac -- tail -f /var/log/apache/*.log
  • -a предназначен для всех имен компьютеров, которые вы определили в ~/.dsh/machines.list.
  • -c предназначен для одновременного запуска хвоста
  • -M добавляет имя хоста к каждой строке вывода.

Мы используем простой сценарий оболочки, подобный приведенному ниже.Вам, очевидно, придется несколько подправить его, чтобы сообщить о различных именах файлов и решить, в каком поле искать, но основную идею вы поняли.В нашем случае мы отслеживаем файл в одном и том же месте на нескольких ящиках.Для этого требуется аутентификация ssh с помощью сохраненных ключей вместо ввода паролей.

#!/bin/bash
FILE=$1
for box in box1.foo.com box2.foo.com box3.foo.com box4.foo.com; do
     ssh $box tail -f $FILE &
done

Что касается комментариев Майка Фанка о том, что он не смог убить хвост ^C, я храню вышеупомянутый в файле под названием MultiT.Sh и добавил следующее к его окончанию.Это создает файл kill_multitails.sh, который вы запускаете, когда закончите хвост, а затем он удаляется.

# create a bash script to kill off 
# all the tails when you're done
# run kill_multitails.sh when you're finished

echo '#!/bin/sh' > kill_multitails.sh
chmod 755 kill_multitails.sh
echo "$(ps -awx | grep $FILE)" > kill_multitails_ids
perl -pi -e 's/^(\d+).*/kill -9 $1/g' kill_multitails_ids
cat kill_multitails_ids >> kill_multitails.sh
echo "echo 'running ps for it'" >> kill_multitails.sh
echo "ps -awx | grep $FILE" >> kill_multitails.sh
echo "rm kill_multitails.sh" >> kill_multitails.sh
rm kill_multitails_ids


wait

Логскейп - как спланк без ценника

многохвостыйили

"чип — это локальный и удаленный инструмент анализа и мониторинга журналов для системных администраторов и разработчиков.
Он объединяет функции swatch, tee, Tail, grep, ccze и mail в одно целое с некоторыми дополнениями.

Например.

Chip -f -m0 = 'run' -s0 = 'red' -m1 = '.*' -s1 user1@remote_ip1: '/var/log/log1/var/log2/var/log/log3 user2@remote_ip2 : '/var/log/log1/var/log/log2/var/log/log3' '| egrep "запустить | ==> /"

Это будет выделять в красном происхождение шаблона -m0, предварительно фильтрационную шаблон «run | ==> /'из всех файлов журнала.

Я написал vsConsole именно для этой цели — легкий доступ к файлам журналов — а затем добавил мониторинг приложений и отслеживание версий.Хотелось бы знать, что вы об этом думаете. http://vs-console.appspot.com/

Awstats предоставляет сценарий Perl, который может объединять несколько файлов журналов Apache.Этот сценарий хорошо масштабируется, поскольку занимает очень мало памяти, файлы журналов никогда не загружаются в память.Я знаю, что это не совсем то, что вам нужно, но, возможно, вы сможете начать с этого скрипта и адаптировать его под свои нужды.

Вы можете использовать различные приемники, доступные в Chainsaw (VFSLogFilePatternReceiver для отслеживания файлов через ssh, SocketReceiver, UDPReceiver, CustomSQLDBReceiver и т. д.), а затем объединить журналы в одну вкладку, изменив идентификатор вкладки по умолчанию или создав «панель журнала пользовательского выражения», предоставив выражение, которое соответствует событиям на различных вкладках источника.

gltail — визуализация серверного трафика, событий и статистики в реальном времени с помощью Ruby, SSH и OpenGL с нескольких серверов.

XpoLog для Java

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top