Привет всем,
Сегодня хотелось бы поделится заметкой, относительно мониторинга дисковой подсистемы в AIX. В моей случаи aix сервера мониторятся через заббикс. И дефолтный шаблон, который идет из коробки, весьма урезан.
Установка zabbix-agent
Для начала установим zabbix-агент на сервер. Идем на сайт zabbix, и качам готовый rpm с агентом.
Спускаемся ниже, там будут доступные ссылки на скачивание:
Скачанную 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.
Далее создаем новое правило: Из параметров, указываем новое имя discovery. Затем прописываем ключ, который мы указывали в конфиге агента. Так изменения с дисками производятся не так часто, интервал на дискавери выставил в пять часов.
Сохраняемся, и идем на хост с этим шаблоном, что бы проверить какие данные отдаются. Проваливаемся в дискавери хоста, находим из списка наше дискавери правило:
Внутри дискавери, жмем на кнопку test
, затем пробуем получить данные:
Если данные отдаются, то все гуд можно перейти к метрикам.
Получаем метрики с системы
Для получения метрик по загрузке диска, будем использовать вывод утилиты 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
):
Из заполненных полей:
Name
- имя айтема, тут все просто. Из макроса{#HDISKNAME}
будет браться имя диска и тип метрики.Key
- в значении прописываем ключ -diskIOstat[tmact,{#HDISKNAME}]
, по этому ключу будет дергаться наш скрипт. В[]
ковычках мы передаем агрументы.Type of information
- тип информации, значение с плавающей точкой (float).Update interval
- обновление данной метрики, каждые пять минут.
Для своего же удобства, во вкладке tags
, добавим теги:
tps
TPS - метрика отображающее количество транзакций (запросов) read/write к устройству (диску). Создаем прототип элемента данных для сбора tps.
KBRead/KBWrite
Количество прочитанных/записанных килобайт в секунду считается метрикой - KBRead/KBWrite
. Создаем элементы данных для этих метрик:
Эта метрика возвращает целочисленное значение, поэтому поле - Type of information
меняем с float на numeric.
Создаем графики
Данные собираются, для визуализации создадим прототипы графиков. В этом же шаблоке, раздел дискавери:
В новом окне указываем имя граффика, и добавляем прототипы данных.
Аналогичным способом создаем графики, и для других метрик.