Лучший способ объединить несколько файлов журнала с нескольких серверов
Мне нужен простой способ контролировать несколько файлов текстовых журналов, распространяемых на нескольких серверах HP-UX. Это сочетание текстовых и XML файлов журналов из нескольких распределенных устаревших систем. В настоящее время мы просто ssh для серверов и используем tail -f и grep, но это не масштабируется, когда у вас много журналов для отслеживания.
Поскольку журналы находятся в разных форматах и просто файлы в папках (автоматически поворачиваются, когда они достигают определенного размера), мне нужно как собирать их удаленно, так и анализировать каждый по-разному.
Моя первоначальная мысль заключалась в том, чтобы создать простой процесс демона, который я могу запускать на каждом сервере, используя специальный считыватель файлов для каждого типа файла для его анализа в общий формат, который можно экспортировать по сети через сокет. Другая программа-зритель, работающая локально, будет подключаться к этим сокетам и отображать анализируемые журналы в некотором простом графическом интерфейсе с вкладками или агрегироваться в консоли.
Какой формат журнала я должен попробовать преобразовать, если я должен его реализовать таким образом?
Есть ли еще какой-то другой способ? Должен ли я попытаться перевести файлы журнала в формат log4j для использования с Chainsaw или есть лучшие зрители журналов, которые могут подключаться к удаленным сокетам? Могу ли я использовать BareTail, как предложено в еще одном вопросе журнала? Это не массовая распределенная система
Ответы
Ответ 1
Параметры:
- Используйте SocketAppender для отправки всех журналов на 1 сервер напрямую. (Это может серьезно помешать работе и добавить одну точку отказа.)
- Используйте сценарии для агрегирования данных. Я использую scp, ssh и ключи аутентификации, чтобы позволить моим скриптам получать данные со всех серверов без приглашений на входе.
Ответ 2
Вероятно, самое легкое решение для просмотра в режиме реального времени - использовать оболочку танцора в параллельном режиме с хвостом -f:
dsh -Mac -- tail -f /var/log/apache/*.log
- -a для всех имен машин, которые вы определили в ~/.dsh/machines.list
- -c - для одновременного запуска хвоста
- -M добавляет имя хоста к каждой строке вывода.
Ответ 3
Мы используем простую оболочку script, как показано ниже. Очевидно, вам придется немного настроить его, чтобы рассказать о разных именах файлов и решить, в каком окне искать, но вы получаете основную идею. В нашем случае мы обрабатываем файл в одном месте на нескольких ящиках. Для этого требуется аутентификация 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, я храню вышеуказанное в файле multitails.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
Ответ 4
Logscape - как splunk без ценника
Ответ 5
multitail
или
" chip - это локальный и удаленный инструмент анализа и мониторинга журналов для системных администраторов и разработчиков.
Он обертывает черты swatch, tee, tail, grep, ccze и mail в один, с некоторыми дополнениями "
Eg.
chip -f -m0 = 'RUN' -s0 = 'red' -m1 = '. *' -s1 user1 @remote_ip1: '/var/log/log1/var/log/log2/var/log/log3
user2 @remote_ip2: '/var/log/log1/var/log/log2/var/log/log3' | egrep "RUN | == > /"
Вкратце будет выделено красным цветом появление шаблона -m0,
предварительная фильтрация шаблона "RUN | == > /" из всех файлов журнала.
Ответ 6
Я написал vsConsole именно для этой цели - легкий доступ к файлам журналов, а затем добавил мониторинг приложений и отслеживание версий. Хотелось бы узнать, что вы думаете об этом. http://vs-console.appspot.com/
Ответ 7
Awstats предоставляет perl script, который может объединить несколько файлов журнала Apache вместе. Этот script хорошо масштабируется, так как область памяти очень низкая, файлы журналов никогда не загружаются в память.
Я знаю, что si не совсем то, что вам нужно, но, возможно, вы можете начать с этого script и адаптировать его для своих нужд.
Ответ 8
Вы можете использовать различные приемники, доступные с помощью Chainsaw (VFSLogFilePatternReceiver, чтобы обрезать файлы через ssh, SocketReceiver, UDPReceiver, CustomSQLDBReceiver и т.д.), а затем агрегировать журналы в одну вкладку, изменив идентификатор табуляции по умолчанию или создав "настраиваемую лог-панель выражения" 'путем предоставления выражения, которое соответствует событиям на различных вкладках источника.
Ответ 9
gltail - визуализация трафика сервера, событий и статистики в реальном времени с помощью Ruby, SSH и OpenGL с нескольких серверов
Ответ 10
XpoLog для Java