вторник, 13 мая 2014 г.

Автоматизация: Просмотр ошибок в логах Oracle Hyperion Planning за определенный период времени

Все очень просто - Planning ведет подробный лог действий, происходящих в системе. Нам необходимо посмотреть, какие ошибки были в логе.
Мой скрипт рассчитан на версию 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
Готово. Теперь в файле my_html_file.html можно просмотреть ошибки со всех наших серверов за нужное время, в более-менее читаемом виде :)

Если статья была вам полезна - кликните на баннер или кнопку Donate :) Яндекс.Метрика

Популярные сообщения