Показаны различия между двумя версиями страницы.
Следующая версия | Предыдущая версия | ||
zabbix_iostat [2014/02/07 16:30] metallic создано |
zabbix_iostat [2022/03/25 17:00] (текущий) |
||
---|---|---|---|
Строка 9: | Строка 9: | ||
===== Подготовка хоста ===== | ===== Подготовка хоста ===== | ||
+ | Устанавливаем пакет sysstat. С помощью утилиты iostat из этого пакета будем собирать статистику загруженности дисков и сохранять в файл. | ||
+ | |||
+ | # apt-get install sysstat | ||
+ | | ||
+ | Далее создаем скрипт, | ||
+ | |||
+ | #!/bin/bash | ||
+ | | ||
+ | # Script for iostat monitoring | ||
+ | # Author Epikhin Mikhail | ||
+ | # michael at nomanlab.org | ||
+ | | ||
+ | SECONDS=55 | ||
+ | TOFILE=/ | ||
+ | IOSTAT=/ | ||
+ | | ||
+ | DISK=$($IOSTAT -x 1 $SECONDS | awk 'BEGIN {check=0;} {if(check==1 && $1==" | ||
+ | echo $DISK | sed ' | ||
+ | echo 0 | ||
+ | | ||
+ | Добавляем этот скрипт в крон, чтобы он выполнялся каждую минуту / | ||
+ | |||
+ | * * * * * root / | ||
+ | |||
+ | И перезапускаем крон: | ||
+ | |||
+ | # / | ||
+ | | ||
+ | Теперь каждую минуту в файле / | ||
+ | |||
+ | Далее создаем скрипт, | ||
+ | |||
+ | #!/bin/bash | ||
+ | |||
+ | # Script for disk monitoring | ||
+ | # Author Epikhin Mikhail | ||
+ | # michael.nomanlab.org | ||
+ | # version 1.1 | ||
+ | | ||
+ | NUBMER=100500 | ||
+ | FROMFILE=/ | ||
+ | DISK=$1 | ||
+ | METRIC=$2 | ||
+ | | ||
+ | case " | ||
+ | " | ||
+ | NUMBER=2 | ||
+ | ;; | ||
+ | " | ||
+ | NUMBER=3 | ||
+ | ;; | ||
+ | " | ||
+ | NUMBER=4 | ||
+ | ;; | ||
+ | " | ||
+ | NUMBER=5 | ||
+ | ;; | ||
+ | " | ||
+ | NUMBER=6 | ||
+ | ;; | ||
+ | " | ||
+ | NUMBER=7 | ||
+ | ;; | ||
+ | " | ||
+ | NUMBER=8 | ||
+ | ;; | ||
+ | " | ||
+ | NUMBER=9 | ||
+ | ;; | ||
+ | " | ||
+ | NUMBER=10 | ||
+ | ;; | ||
+ | " | ||
+ | NUMBER=11 | ||
+ | ;; | ||
+ | " | ||
+ | NUMBER=12 | ||
+ | ;; | ||
+ | esac | ||
+ | | ||
+ | cat $FROMFILE | grep $DISK | tail -n +2 | tr -s ' ' | cut -f$NUMBER -d' ' | awk 'BEGIN {sum=0.0; | ||
+ | | ||
+ | #iostat -x | grep $1 | tr -s ' ' | cut -f$NUMBER -d' ' | ||
+ | |||
+ | И еще один скрипт, | ||
+ | |||
+ | # | ||
+ | | ||
+ | import os | ||
+ | import re | ||
+ | | ||
+ | devs = [] | ||
+ | mountsFD = open("/ | ||
+ | mounts = mountsFD.readlines() | ||
+ | jsonData = ' | ||
+ | mountPoint = '' | ||
+ | md = re.compile(' | ||
+ | | ||
+ | for line in mounts: | ||
+ | if line.startswith("/ | ||
+ | lineParts = line.split(" | ||
+ | mountPoint = lineParts[1] | ||
+ | | ||
+ | if "/ | ||
+ | dev = os.readlink(lineParts[0]).split(" | ||
+ | | ||
+ | else: | ||
+ | dev = lineParts[0].split("/ | ||
+ | | ||
+ | # if not MD-drive | ||
+ | if not md.match(dev): | ||
+ | # removing numbers from string | ||
+ | dev = '' | ||
+ | mountPoint = "" | ||
+ | | ||
+ | if dev not in devs: | ||
+ | if jsonData != ' | ||
+ | jsonData += ', | ||
+ | jsonData += """ | ||
+ | mountPoint = "" | ||
+ | | ||
+ | devs.append(dev) | ||
+ | | ||
+ | mountsFD.close() | ||
+ | | ||
+ | jsonData += " | ||
+ | | ||
+ | print(jsonData) | ||
+ | |||
+ | Подготовка системы закончена. | ||
===== Настройка zabbix-агента ===== | ===== Настройка zabbix-агента ===== | ||
+ | В конфиге агента ничего не обычного, | ||
+ | |||
+ | UserParameter=custom.disks.discovery_python,/ | ||
+ | UserParameter=custom.disks.iostat[*],/ | ||
+ | | ||
+ | Первый параметр без аргументов, | ||
+ | |||
+ | Теперь перезапускаем агента и тестируем: | ||
+ | |||
+ | # zabbix_agentd -t custom.disks.discovery_python | ||
+ | custom.disks.discovery_python[/ | ||
+ | " | ||
+ | | ||
+ | {" | ||
+ | {" | ||
+ | {" | ||
+ | {" | ||
+ | | ||
+ | ] | ||
+ | }] | ||
+ | | ||
+ | # zabbix_agentd -t custom.disks.iostat[sdb, | ||
+ | custom.disks.iostat[/ | ||
+ | |||
+ | Если все в порядке, | ||
===== Настройка zabbix-сервера ===== | ===== Настройка zabbix-сервера ===== | ||
+ | |||
+ | Все настройки на стороне сервера проводятся через веб-интерфейс. Вначале создаем шаблон(Configuration -> Templates -> Create template), при добавлении которого хосту, на этом хосте будет производиться мониторинг дисковой активности. Ниже представлен скриншот с параметрами, | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Далее создаем приложение iostat (Configuration -> Templates -> Template IOstat Linux -> Applications): | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Теперь создадим регулярное выражение для фильтрации малоинтересных разделов, | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | <note important> | ||
+ | |||
+ | Следующий шаг - создание discovery rule, т.е. правила, | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Здесь важными параметры: | ||
+ | |||
+ | * Key - наш собственный ключ, который указали в конфиге агента | ||
+ | * Filter - параметры фильтрации объектов, | ||
+ | |||
+ | Теперь создаем прототипы источников данных, | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | * Key - тут опять же указывается ранее созданный пользовательский параметр и ему передаются два аргумента: | ||
+ | |||
+ | <note important> | ||
+ | |||
+ | Таким образом создается нужное кол-во прототипов данных для интересующих метрик. Поддерживаются следующие метрики: | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | И в заключении создаются прототипы графиков. В примере ниже создается график, | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | В итоге у меня получилось четыре прототипа графиков: | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | ===== Заключение ===== | ||
+ | |||
+ | Полученный результат можно увидеть на скриншотах ниже. | ||
+ | |||
+ | {{: | ||
+ | |||
+ | ===== Использованная литература ===== | ||
+ | |||
+ | - [[http:// | ||
+ | - [[http:// | ||
+ | - [[https:// | ||
+ | |||