Содержание


Создание веб-страниц для отображения данных nmon в корпоративной среде с помощью утилиты nmon2rrd

Как сделать данные инструмента nmon более удобными для просмотра

Comments

Комбинация инструментов, которую я описываю в этой статье, отлично работает в моем случае. Несомненно, другие системные администраторы могут применять иные подходы.

Прежде чем углубляться в материал статьи, я сформулирую задачи, которые нам предстоит выполнить.

  • Обеспечить работу на всех удаленных хостах инструмента nmon, собирающего данные о производительности.
  • Установить инструмент nmon2rrd на веб-сервере.
  • Установить требуемые для rrdtool компоненты на веб-сервере.
  • Установить инструмент rrdtool на веб-сервере.
  • Извлечь файлы данных nmon за предыдущий день из удаленных хостов на локальный веб-сервер.
  • Преобразовать файлы nmon с помощью утилиты nmon2rrd, а затем поместить их в веб-каталог.
  • Опубликовать веб-страницы, управляемые посредством веб-меню.

Утилита nmon2rrd нуждается в инструменте rrdtool, которому требуются другие библиотеки

Чтобы загрузить утилиту nmon2rrd, обратитесь к разделу Ресурсы. Ссылка для загрузки утилиты nmon2rrd одновременно ведет на wiki-ресурс с информацией об этой утилите. Обратите внимание, что утилита nmon2rrd не будет корректно функционировать сама по себе, поскольку ей требуется инструмент rrdtool, который, в свою очередь, опирается на другие библиотечные зависимости. В моем случае nmon2rrd работает под управлением IBM® AIX® 5.3 и IBM AIX 7.1. Для версии AIX 7.1 на сайте perzl.org предлагаются все необходимые двоичные файлы. Кроме того, имеется заранее собранный RPM-пакет rrdtool, который создал Зоран Майценич (Zoran Majcenic). Для получения дополнительной информации обратитесь в раздел Ресурсы.

После установки инструмента rrdtool вместе с утилитой nmon2rrd у нас все готово к преобразованию. Работа с этими утилитами из командной строки выполняется просто и понятно.

nmon2rrd -f nmonfile [-d directory] [-x] [-w width] [-h height]  Version:17a
 -f nmonfile  the regular CSV nmon output file
 -d directory  dirname for the output
 -w width  graph width  (default 800, max 1500)
 -h height  graph height (default 300)
 -x  execute the output files
Пример.
 nmon2rrd -f m1_030811_1534.nmon -d /webpages/docs/m1/030811 -x

Для закрепления приведу еще один пример результата работы утилит для недавно созданного файла nmon.

nmon2rrd_17 –f /opt/nmon/ uk01wrs6010_140224_0900.nmon \
 -d /opt/apache2/htdocs/nmon_graphs/uk01wrs6010_140224_0900 -x

При преобразовании файла, полученного из инструмента nmon, я всегда использую флаг –x. В этом случае все изображения, необходимые для HTML-страницы, генерируются и помещаются в результирующий каталог.

Сбор данных nmon

В моей среде я собираю данные за период примерно 24 часа, точнее, 23,75 часа. Такого набора данных вполне достаточно для построения графика. На каждом моем хосте в файле crontab имеется следующая запись:

00 09 * * * /usr/bin/nmon -f -t -^ -s 900 -c 95 -m /opt/dump/nmon_data

Смысл этой записи состоит в следующем:

утилита nmon каждые 900 секунд (15 минут) регистрирует данные по 95 событиям (моментальным снимкам).

Утилита nmon помещает файл с собранными данными в каталог /opt/dump/nmon_data. Имя результирующего файла с собранными данными представляется в следующем формате.

<hostname>_<yymmdd>_<hhmm>.nmon

Пример:

uk01wrs6010_140224_0900.nmon

Параметры команды указывают утилите nmon регистрировать данные Fibre Channel (-^) и охватывать главные процессы (-t) и представлять выходную информацию в формате электронной таблицы (-f). Внимательно следите за количеством моментальных снимков, которые вы собираете. Рассмотрим этот момент более подробно.

Следите за количеством моментальных снимков – информации может оказаться слишком много

При сборе данных реалистично относитесь к тому, какой объем информации вы собираетесь отобразить. Инструмент nmon2rrd способен преобразовать очень много моментальных снимков, однако я считаю, что нет никакого смысла в увеличении количества моментальных снимков свыше 500 - 600, если просматривать диаграмму на обычном экране. Вы просто не сможете отобразить все эти точки на диаграмме. В худшем случае данные будут усечены в процессе преобразования в формат HTML с помощью утилиты nmon2rrd.

Данные nmon за предыдущий день

Итак, все необходимые утилиты установлены? Не торопитесь. Напоминаю, что наш инструмент nmon работает с 24-часовой периодичностью. В качестве примера предположим, что цикл сбора данных начинается в 09:00. Когда мы обходим все удаленные хосты для сбора файлов инструмента nmon, у нас может возникнуть необходимость сбора данных за предыдущий день, поскольку текущий (сегодняшний) цикл nmon еще не закончен! Во-первых, убедитесь в том, что на всех ваших хостах сервис NTP (Network Time Protocol) работает и синхронизируется с сервером времени; во-вторых, используйте соответствующий метод для получения даты предыдущего дня в виде переменной, которая позднее будет использоваться в команде scp. Дату предыдущего дня можно получить с помощью переменной среды TZ или же установить GNU date, чтобы сделать это наверняка. Также можно установить какую-либо нетребовательную к ресурсам утилиту для вычисления дат, такую как yest (см. раздел Ресурсы). К примеру, получить дату предыдущего дня (в предположении, что сегодня 25 февраля) в формате для даты файла nmon можно следующим образом:

$ yest "%y%m%d"
140224

Нетрудно заметить, что эта дата соответствует формату даты файла nmon для предыдущего дня:

uk01wrs6010_140224_0900.nmon

Отобразить дату на 21 день назад можно следующим образом: yest -21

Извлечение и преобразование данных nmon

Чтобы собрать файлы nmon за предыдущий день со всех удаленных хостов, перечисленных в каталоге в /opt/dump/nmon_data, и поместить их в зону ожидания на своем веб-сервере, нужно внутри цикла выполнить простую команду scp. Я пришел к выводу, что наилучший способ — это иметь файл со сведениями обо всех хостах, с которыми я соединяюсь, и осуществлять чтение этого файла. В этом случае использование даты предыдущего дня в составе команды scp позволяет гарантировать, что я получаю файл nmon за предыдущий день. В качестве примера рассмотрим следующий фрагмент кода.

dest_dir=/opt/dump/nmon_data/
incoming=/opt/dump/incoming
yesday=$(yest "%y%m%d")
cat /usr/local/bin/all_nmon_server.txt | while read hosts
do
scp $host:$dest_dir{host}_$yesday*.nmon $incoming
done

В этом коде all_nmon_server.txt – это файл, содержащий сведения об удаленных хостах (по одному хосту в строке):

host_1
host_2
…

Теперь все файлы nmon расположены в каталоге /opt/dump/incoming. Перейдем к выполнению преобразований.

Для графиков nmon я создаю по отдельному каталогу для каждой записи nmon. Таким образом, мне нужно создать каталог, который представляет файл nmon удаленного хоста в формате: <hostname>_yymmdd_<hhmm>. Выглядит знакомо, не так ли? Отделение имени хоста от имени файла – несложная задача. Для ее решения существует множество способов; я воспользуюсь следующим:

thisdirec=$(echo $file | awk -F '.' '{print $1}')

где переменная $file— это текущее имя файла nmon, чтение которого осуществляется в цикле.

Таким образом, uk01wrs6010_140224_0900.nmon превращается в uk01wrs6010_140224_0900.

В следующем примере моя результирующая веб-страница и изображения в формате GIF будут расположены в каталоге /opt/apache2/htdocs/nmon_graphs/<hostname>_<yymmdd>_<hhmm>

if ! [ -d /opt/apache2/htdocs/nmon_graphs/$thisdirec ]
   then
mkdir -m 754 -p /opt/apache2/htdocs/nmon_graphs/$thisdirec
…

где переменная $thisdirec содержит имя каталога.

После нескольких дней сбора данных каталоги для хоста могут иметь следующий вид:

$ ls -l |grep uk01wrs6014
drwxrwxr--    2 www      www         2048 Feb 18 09:41 uk01wrs6014_140217_0900
drwxrwxr--    2 www      www         2048 Feb 20 09:18 uk01wrs6014_140219_0900
drwxrwxr--    2 www      www         2048 Feb 21 09:18 uk01wrs6014_140220_0900
drwxrwxr--    2 www      www         2048 Feb 22 09:20 uk01wrs6014_140221_0900

Теперь выполним преобразование с помощью утилиты nmon2rrd (как ее использовать, я уже говорил). Если вы хотите создать все изображения одновременно одним нажатием мыши, то добавьте к команде флаг исполнения '-x'.

nmon2rrd_17 -f $incoming/$file -d /opt/apache2/htdocs/nmon_graphs/$thisdirec –x

Переменная $file, $thisdirec и $incoming уже были описаны выше. После того как все показанные выше команды будут исполнены, во вновь созданном каталоге будут находиться файлы GIF и rrd (вместе с результирующим файлом index.html). Некоторые журнальные rrd-файлы можно удалить, однако, поскольку они имеют небольшие размеры, я предпочитаю не трогать их. Если возникнут проблемы с неправильным представлением данных на HTML-странице, полезно просмотреть содержимое этих файлов.

Теперь у нас есть HTML-файл с именем index.html. Рекомендуется всегда заменять это имя реальным именем хоста, к которому относится данный файл. Кроме того, этот HTML-файл не имеет на странице ссылки для возврата в меню. Мы собираемся создать меню для просмотра этих файлов, чтобы не тратить массу времени на поиск нужного HTML-файла для просмотра, особенно если у нас имеется много хостов, данные о которых регистрируются в журналах на протяжении длительного периода времени.

В качестве примера ниже показан фрагмент кода для назначения более осмысленного имени файла.

uk01wrs6010_140224_0900.nmon.html

mv /opt/apache2/htdocs/nmon_graphs/$thisdirec/index.html /opt/apache2/htdocs/nmon
_graphs/$thisdirec/$file.html

Теперь поместим в этот файл ссылку, которая позволит пользователю быстро вернуться в меню. О cgi-скриптах мы поговорим чуть позже, а пока будем исходить из следующих допущений.

Хост веб-сервера: uk01wrs6010

Страница меню cgi-bin:: nmon_menu.cgi

Следующая команда sed вставляет в HTML-файл HTML-ссылку, которая указывает обратно на веб-страницу nmon_menu.cgi.

sed '1a\
<a href="http://uk01wrs6010/cgi-bin/nmon_menu.cgi/">Back to nmon menu</a>' /opt/a
pache2/htdocs/nmon_graphs/$thisdirec/$file.html >/tmp/holdme
cp -p /tmp/holdme /opt/apache2/htdocs/nmon_graphs/$thisdirec/$file.html

Отображение полученных HTML-файлов

Итак, теперь мы полностью готовы к выводу файлов инструмента nmon, когда пользователь выберет их внутри веб-среды. Нам предстоит выполнить следующие задачи.

  • Создать cgi-меню для представления доступных хостов, для которых имеются графики nmon.
  • После выбора хоста представить cgi-меню для отображения списка дат, на которые имеются графики nmon.
  • Опубликовать график nmon с HMTL-ссылкой для возврата в cgi-меню.

Выбор сервера

Имеет смысл представлять хосты с помощью меню. В следующем примере мы с помощью команды grep создаем шаблон для поиска имен AIX-хостов, которые являются частью имени каталога. Обратите внимание, что графики nmon находятся в каталоге /opt/apache2/htdocs/nmon_graphs .

Затем мы извлекаем часть, соответствующую имени хоста, и удаляем дублирующиеся имена. Не забывайте, что у нас будет по отдельной записи в каталоге для каждого элемента данных nmon, поэтому удаление дубликатов необходимо .

Рисунок 1. Скрипт nmon.cgi показывает меню nmon, отображающее хосты
figure1
figure1
echo "Select Server name:<br><SELECT NAME=\"srvname\">"
cd /opt/apache2/htdocs/nmon_graphs
hosts=$(ls | egrep 'hrs|wrs|prs|drs'|awk -F '_' '{print $1}'| uniq)
for loop in $hosts
do
                echo "<OPTION>$loop"
done
echo "</td>"
echo "</table><br>"

После выбора сервера его имя ($srvname) передается в составе переменной QUERY_STRING в следующий скрипт cgi-bin.

Выбор нужных дат

Итак, пользователь выбрал сервер. Далее этот пользователь может выбрать дату графика nmon, который он хочет посмотреть. На рис. 2 показаны даты, для которых для данного хоста имеются графики nmon. Затем следующий скрипт cgi-bin получает имя сервера, переданное ему из предыдущего скрипта.

Рисунок 2. Даты, на которые для выбранного хоста присутствуют графики nmon
figure2
figure2

Эта задача с легкостью решается с помощью следующего кода.

server=$(echo $QUERY_STRING | awk -F= '{print $2}')

Затем с помощью команды grep для всех каталогов, содержащих имя этого сервера, мы извлекаем имя каталога, которое, как указывалось выше, представлено в следующем формате.

 uk01wrs6014_140221_0900

Фрагмент кода для решения этой задачи выглядит следующим образом:

<FORM ACTION="/cgi-bin/nmon_display.cgi" METHOD="GET">
<input type="hidden" name="servername" value=$server>
EOF
echo "<BR><BR><BR><BR><BR><BR><BR><BR><BR><TABLE BORDER=0 ALIGN=CENTER width=600>"
echo "<TR align=center><TD>"
echo "Select Run Date Collection for $server (yymmdd_hhmm):<br><SELECT NAME=\"nmon_file\">"
cd /opt/apache2/htdocs/nmon_graphs
 datelist=$(ls -l |grep ^d|grep $server |awk '{print $9}')
for loop in $datelist
do
                echo "<OPTION>$loop"
done
echo "</td>"
echo "</table><br>"

Пользователь выбрал дату графика nmon, который он хочет посмотреть. После этого переменные $servername, $nmon_file передаются следующему cgi-скрипту, который отображает фактический график nmon.

Отображение графика

Нам осталось лишь представить HTML-файл. На рис. 3 показан график nmon с HTML-ссылкой. Имя сервера и файл nmon извлекаются из переменной QUERY_STRING с помощью следующих команд.

servername=$(echo $QUERY_STRING | awk -F '&' '{print $1}' | awk -F'=' '{print $2}')
nmon_file=$(echo $QUERY_STRING | awk -F '&' '{print $2}' | awk -F'=' '{print $2}')
Рисунок 3. Ссылка (в верхней части страницы) вставлена с помощью команды sed
figure3
figure3

Теперь мы можем выдать эту страницу, используя значения, полученные от предыдущего скрипта.

echo "<head>"
echo "<META HTTP-EQUIV='Refresh' CONTENT='1; URL=http://uk01wrs6010/nmon_graphs/$
{nmon_file}/${nmon_file}.nmon.html'/>";
echo "</head>"

На рис. 4 показан график nmon, демонстрирующий использование адаптера Fibre Channel и дискового адаптера.

Рисунок 4. Использование адаптера Fibre Channel и дискового адаптера
figure4
figure4

Заключение

Описанная в статье комбинация инструментов формирует веб-страницу, облегчающую просмотр графиков nmon для разных хостов. Для поддержания порядка не забывайте регулярно удалять старые каталоги командой find.

Ресурсы

Благодарности

Выражаю глубокую благодарность Зорану Майценичу (Zoran Majcenic) за предоставление файлов с ресурсами.


Ресурсы для скачивания


Комментарии

Войдите или зарегистрируйтесь для того чтобы оставлять комментарии или подписаться на них.

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=AIX и UNIX
ArticleID=980539
ArticleTitle=Создание веб-страниц для отображения данных nmon в корпоративной среде с помощью утилиты nmon2rrd
publish-date=08132014