Показаны различия между двумя версиями страницы.
zabbix_iostat [2014/02/14 13:01] metallic [Подготовка хоста] |
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-агента ===== | ||
- | |||
- | ===== Настройка zabbix-сервера ===== | ||