Лучший способ объединить несколько файлов журналов с нескольких серверов [закрыто]
-
01-07-2019 - |
Вопрос
Мне нужен простой способ мониторинга нескольких файлов текстовых журналов, распределенных по нескольким серверам HP-UX.Они представляют собой смесь текстовых и XML-файлов журналов из нескольких распределенных устаревших систем.В настоящее время мы просто подключаемся к серверам по SSH и используем хвост -f и grep, но это не масштабируется, если вам нужно отслеживать много журналов.
Поскольку логи имеют разные форматы и представляют собой просто файлы в папках (автоматически вращающиеся при достижении определенного размера), мне нужно как собирать их удаленно, так и анализировать каждый по-разному.
Моя первоначальная мысль заключалась в том, чтобы создать простой демон-процесс, который я мог бы запускать на каждом сервере, используя специальную программу чтения файлов для каждого типа файлов, чтобы преобразовать их в общий формат, который можно будет экспортировать по сети через сокет.Другая программа просмотра, работающая локально, будет подключаться к этим сокетам и отображать проанализированные журналы в каком-нибудь простом графическом интерфейсе с вкладками или агрегировать их на консоли.
В какой формат журнала мне следует попытаться преобразовать, если я хочу реализовать его таким образом?
Есть ли другой более простой способ?Должен ли я попытаться перевести файлы журнала в формат log4j для использования с Бензопила или есть ли лучшие программы просмотра журналов, которые могут подключаться к удаленным сокетам?Могу ли я использовать BareTail как предложено в еще один вопрос по журналу?Это не массово распределенная система и изменение текущих реализаций журналирования для всех приложений для использования широковещательной рассылки UDP или помещения сообщений в очередь JMS не является вариантом.
Решение
Параметры:
- Используйте SocketAppender для отправки всех журналов напрямую на 1 сервер.(Это может снизить производительность сервера и добавить единую точку отказа.)
- Используйте сценарии для агрегирования данных.Я использую ключи 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