Привет всем,

Сегодня хотелось бы поделится заметкой, относительно мониторинга дисковой подсистемы в AIX. В моей случаи aix сервера мониторятся через заббикс. И дефолтный шаблон, который идет из коробки, весьма урезан.

Установка zabbix-agent

Для начала установим zabbix-агент на сервер. Идем на сайт zabbix, и качам готовый rpm с агентом. aix-disk-load-download.png

Спускаемся ниже, там будут доступные ссылки на скачивание: aix-disk-load-download1.png

Скачанную rpm переносим на сервер, и устанавливаем агента:

root@aix01:/opt/AIX-Toolbox-Linux> rpm -Uhv zabbix-agent-6.0.17-1.aix7.2.ppc.rpm
Preparing...                          ################################# [100%]
Updating / installing...
   1:zabbix-agent-6.0.17-1            warning: /etc/zabbix/zabbix_agentd.conf created as /etc/zabbix/zabbix_agentd.conf.rpmnew
################################# [ 50%]
Cleaning up / removing...
   2:zabbix-agent-6.0.3-1             ################################# [100%]
root@aix01:/opt/AIX-Toolbox-Linux>

Отредактируем конфигурационный файл zabbix-agent, изменив только адрес zabbix сервера.

root@aix01:/opt> vim /etc/zabbix/zabbix_agentd.conf
---
Server=zbx-server.local

Ну и перезапускаем сервис zabbix-агента.

root@aix01:/opt> /etc/rc.d/init.d/zabbix-agent restart
---
Server=zbx-server.local

И в конце на стороне заббикс сервера, добавляем новый хост.

Мониторинг дисков

Для обнаружения дисков и создания по для них метрик, сначала проработаем вопрос с autodiscovery дисков.

Пишем скриптец autodiscovery

Подключаемся к серверу, переходим в /etc/zabbix/zabbix_agentd.d/, и пишем небольшой скриптец:

root@aix01:/> vim /etc/zabbix/zabbix_agentd.d/disk_discovery.sh
---
#!/bin/bash

COUNTER=0
HDISKCOUINT=$(lsdev | grep "^hdisk" | wc -l)

echo -e "[\n"

for hdisk in lsdev |awk '{print $1}' | grep -E "^hdisk"
do

    echo -e "\t{\n"
    echo -e "\t\t\"{#HDISKNAME}\":\"$hdisk\"\n"
    echo -e "\t}\n"

    ((COUNTER+=1))

    if [[ $COUNTER -lt $HDISKCOUINT ]]; then
        echo ","
    fi
done

echo -e "\n\t]\n"

Достаточно простой скриптец, который в консоль листит все диски в ввиде json. Так как заббикс ждет от нас данные в таком формате. Вначале в консоль принтуется открывающая часть json-данных. Затем в цикле for, мы перебираем все диски в системе, тем самым формируем массив с данными. Ну и в конце отдается закрывающая часть.

Если запустить скриптец, в консоле будет такой вывод:

{

        "data":[


        {

                "{#HDISKNAME}":"hdisk0"

        }

        ......so many disk's

        {

                "{#HDISKNAME}":"hdisk12"

        }


        ]

}

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

root@aix01:/> chmod +x /etc/zabbix/zabbix_agentd.d/disk_discovery.sh
root@aix01:/> chown zabbix:zabbix /etc/zabbix/zabbix_agentd.d/disk_discovery.sh

Теперь нам нужно модифицировать, конфигу заббикс-агента. В конфиг мы добавим пользовательский параметр (UserParameters), и свяжем наш скриптец с уникальным ключом.

Заббикс по этому ключу будет извлекать данные по дискам.

Открываем конфиг, и добавляем строчку:

root@aix01:/> vim /etc/zabbix/zabbix_agentd.d/disk_discovery.sh
---
UserParameter=diskDiscovery,bash /etc/zabbix/zabbix_agentd.d/disk_discovery.sh

После нужно перезапустить агент:

root@aix01:/opt> /etc/rc.d/init.d/zabbix-agent restart

На стороне UI заббикс сервера, в текущем шаблоне проваливаемся в раздел - Discovery. aix-disk-load-zbx1.png

Далее создаем новое правило: aix-disk-load-zbx2.png Из параметров, указываем новое имя discovery. Затем прописываем ключ, который мы указывали в конфиге агента. Так изменения с дисками производятся не так часто, интервал на дискавери выставил в пять часов.

Сохраняемся, и идем на хост с этим шаблоном, что бы проверить какие данные отдаются. Проваливаемся в дискавери хоста, находим из списка наше дискавери правило: aix-disk-load-zbx3.png

Внутри дискавери, жмем на кнопку test, затем пробуем получить данные: aix-disk-load-zbx4.png Если данные отдаются, то все гуд можно перейти к метрикам.

Получаем метрики с системы

Для получения метрик по загрузке диска, будем использовать вывод утилиты iostat. В выводе грепать нужный диск, и через awk отображать нужную колонку. Напишем еще один скриптец, который который будет на вход принимать имя диска и имя метрики.

root@aix01:/etc/zabbix/zabbix_agentd.d> vim disk_metrics.sh
---
#!/bin/bash

HDISKMETRICS=$1
HDISKNAME=$2

case $HDISKMETRICS in
        "kbwrtn")
                iostat -d $HDISKNAME | grep '^hdisk' | awk '{print $6}'
                ;;
        "kbread") iostat -d $HDISKNAME | grep '^hdisk' | awk '{print $5}'
                ;;
        "tps") iostat -d $HDISKNAME | grep '^hdisk' | awk '{print $4}'
                ;;
        "kbps") iostat -d hdisk3 | grep '^hdisk' | awk '{print $3}'
                ;;
        "tmact") iostat -d hdisk3 | grep '^hdisk' | awk '{print $2}'
                ;;
esac

Здесь мы объявляем две переменные, в значение которых подставляются аргументы из командной строки. Далее идет оператор выбора case, и в зависимости от аргумента будет выполнена команда.

Для проверки работы скрипта можем выполнить команду:

root@aix01:/etc/zabbix/zabbix_agentd.d> ./disk_metrics.sh kbps hdisk3

В конфигурацию заббикса, добавляем новый пользовательский параметр (UserParameters):

root@aix01:/etc/zabbix/zabbix_agentd.d> vim /etc/zabbix/zabbix_agentd.conf
---
UserParameter=diskIOstat[*],bash /etc/zabbix/zabbix_agentd.d/disk_metrics.sh $1 $2

# Перезапускаем агента
root@fc12rep01:/etc/zabbix/zabbix_agentd.d> /etc/rc.d/init.d/zabbix-agent restart

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

Создаем прототипы данных

Создадим прототипы данных, для наших будущих метрик.

tm_act

Данная метрика отображает процент времени, в течении которого диск был активен.

В текущем шаблоне, в ранее созданном дискавери добавляем новый прототип (Item prototypes): aix-disk-load-zbx5.png Из заполненных полей:

  • Name - имя айтема, тут все просто. Из макроса {#HDISKNAME} будет браться имя диска и тип метрики.
  • Key - в значении прописываем ключ - diskIOstat[tmact,{#HDISKNAME}], по этому ключу будет дергаться наш скрипт. В [] ковычках мы передаем агрументы.
  • Type of information - тип информации, значение с плавающей точкой (float).
  • Update interval - обновление данной метрики, каждые пять минут.

Для своего же удобства, во вкладке tags, добавим теги: aix-disk-load-zbx6.png

tps

TPS - метрика отображающее количество транзакций (запросов) read/write к устройству (диску). Создаем прототип элемента данных для сбора tps. aix-disk-load-zbx7.png

KBRead/KBWrite

Количество прочитанных/записанных килобайт в секунду считается метрикой - KBRead/KBWrite. Создаем элементы данных для этих метрик: aix-disk-load-zbx8.png

aix-disk-load-zbx9.png

Эта метрика возвращает целочисленное значение, поэтому поле - Type of information меняем с float на numeric.

Создаем графики

Данные собираются, для визуализации создадим прототипы графиков. В этом же шаблоке, раздел дискавери: aix-disk-load-zbx10.png

В новом окне указываем имя граффика, и добавляем прототипы данных. aix-disk-load-zbx11.png aix-disk-load-zbx12.png

Аналогичным способом создаем графики, и для других метрик.