Показаны различия между двумя версиями страницы.
zabbix_iostat [2014/02/14 16:18] metallic [Настройка zabbix-сервера] |
zabbix_iostat [2022/03/25 17:00] |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | ====== Мониторинг дисковой активности с помощью zabbix ====== | ||
- | ===== Введение ===== | ||
- | |||
- | Как мониторить дисковую активность с помощью zabbix писалось уже не раз, но ни один из вариантов меня полностью не устроил и я взял что-то из одного рецепта, | ||
- | |||
- | Для мониторинга используется утилита iostat из пакета sysstat. Она в течерии минуты записывает показания в файл(с интервалом в одну секунду), | ||
- | |||
- | |||
- | ===== Подготовка хоста ===== | ||
- | |||
- | Устанавливаем пакет 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-агента ===== | ||
- | |||
- | В конфиге агента ничего не обычного, | ||
- | |||
- | 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-сервера ===== | ||
- | |||
- | Все настройки на стороне сервера проводятся через веб-интерфейс. Вначале создаем шаблон(Configuration -> Templates -> Create template), при добавлении которого хосту, на этом хосте будет производиться мониторинг дисковой активности. Ниже представлен скриншот с параметрами, | ||
- | |||
- | {{ : | ||
- | |||
- | Далее создаем приложение iostat (Configuration -> Templates -> Template IOstat Linux -> Applications): | ||
- | |||
- | {{ : | ||
- | |||
- | Теперь создадим регулярное выражение для фильтрации малоинтересных разделов, | ||
- | |||
- | {{ : | ||
- | |||
- | <note important> | ||
- | |||