Все очень просто - 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 :)
Комментариев нет:
Отправить комментарий