Все очень просто - Planning ведет подробный лог действий, происходящих в системе. Нам необходимо посмотреть, какие ошибки были в логе.
Мой скрипт рассчитан на версию Oracle Hyperion 11.x, для более ранних версий необходимо сменить формат даты
Усложняем задание :
есть несколько серверов с установленным Hyperion, пути расположения логов на серверах различаются, необходимо проверить логи на всех серверах и показать ошибки в удобном для просмотра виде.
Подготовка:
- устанавливаем Cygwin, если его еще нет
- настраиваем ssh для авторизации по ключам
Для начала создаем конф-файл ess_logs.cfg, в нем указываем пути к логам, адрес сервера и имя пользователя для входа:
Код скрипта:
Мой скрипт рассчитан на версию Oracle Hyperion 11.x, для более ранних версий необходимо сменить формат даты
Усложняем задание :
есть несколько серверов с установленным Hyperion, пути расположения логов на серверах различаются, необходимо проверить логи на всех серверах и показать ошибки в удобном для просмотра виде.
Подготовка:
- устанавливаем Cygwin, если его еще нет
- настраиваем ssh для авторизации по ключам
Для начала создаем конф-файл ess_logs.cfg, в нем указываем пути к логам, адрес сервера и имя пользователя для входа:
user1@192.169.1.1:"/cygdrive/c/Oracle/Middleware/user_projects/epmsystem1/diagnostics/logs/essbase/essbase" user2@192.169.1.2:"/cygdrive/c/Oracle/Middleware/user_projects/epmsystem2/diagnostics/logs/essbase/essbase" user3@192.169.1.3:"/cygdrive/c/Oracle/Middleware/user_projects/epm4/diagnostics/logs/essbase/essbase"Если откомментировать какую-либо строку, то она не будет участвовать в анализе.
Код скрипта:
#!/bin/bash
# Период для проверки задаем с консоли, например 15 - скрипт будет проверять наличие ошибок в логах за последние 15 минут.
check_int="$1"
echo '<H2><b>' EssBase Error\'s Last $check_int min:'</b></H2>'
period2=`date '+%Y-%m-%dT%H:%M' --date="$check_int mins ago"`
echo '<pre>'
# Пропускаем все закомментированыне строки
grep -v "#" "ess_logs.cfg" | while read line ;do
# парсим данные из конф файла, получаем username@server и путь к логам
echo $line | sed 's/:/ /g' | ( read server path
echo "<b><u><h4>$server</h4></u></b>";
# Соединяемся с удаленным сервером
ssh -C -T "$server" << EOF
# описание ключей ssh :
# -C Requests compression of all data (including stdin, stdout, stderr, and data for forwarded X11 # and TCP connections). The
# compression algorithm is the same used by gzip(1), and the “level” can be controlled by the
# CompressionLevel option for protocol version 1. # Compression is desirable on modem lines and # other slow connections, but will only slow down things on fast networks. The default
# value can be set on a host-by-host basis in the configuration files; see the Compression option.
# -T Disable pseudo-tty allocation.
#
# Ищем необходимые данные в логах измененных за указанный период, сортируем в порядке
# возрастания, парсим только логи ODL
/bin/find $path -type f -mmin -$check_int|xargs ls -latr | grep ODL | awk '{print \$9} ' | while read file ;do
grep -n "$period2" $(echo '$file') | head -1 | awk -F: {'print \$1'} > /util/temp/pozition
# Находим первую строку, подходящую по шаблону и сохраняем ее номер в файл (можно в
# переменную)
# Проверка наличия данных в файле
if [ -s /util/temp/pozition ]; then
# придумал такой костыль $(echo '$(cat /util/temp/pozition)' т.к при использовании простой
# переменной $VAR берутся локальные переменные
# а вызов типа $(echo $var) выдает переменные с "удаленной" системы
# var=`echo $(echo '$(cat /util/temp/pozition)')` находим тейлом начальную строку с нужным
# номером и парсим только строки, в которых присутствует слово ERROR
# Подсвечиваем текст html тегами
tail -n +`echo $(echo '$var')` $(echo '$file') | grep -i ERROR |awk 'BEGIN{IGNORECASE=1} {sub(/error/,"<font color=red bgcolor=black>ERROR</font>");print}' >> my_html_file.html
fi
done
# Перед и после EOF не должно быть никаких символов, даже пробелов!!
EOF
)
echo '< br>'
done
Если статья была вам полезна - кликните на баннер или кнопку Donate :)
Комментариев нет:
Отправить комментарий