Производительность Диска Linux

Мониторинг Железа
Датчики температур
Кулера
Диски
Напряжение
и т.д.
Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 367
Стаж: 2 года 9 месяцев
Откуда: Вологодская область
Контактная информация:

Производительность Диска Linux

Сообщение Артём Мамзиков »

В начале смотрим Теория перед расчетом Производительности Дисков Windows/Linux

Так же есть аналогичная проверка Производительность Диска Windows

Скачать можно тут Расширенные шаблоны операционных систем

Изначально все началось с ключей vfs.dev.read и vfs.dev.write что это за ключи? Статистика чтения диска и Статистика записи на диск.
Более подробно о них
vfs.dev.read
Показать
Статистика чтения диска.
vfs.dev.read[<устройство>,<тип>,<режим>]

Обратите внимание: Если используется интервал обновления три часа и более2, будет всегда возвращаться значение '0'

Устройство
дисковое устройство (по умолчанию all)
Вы можете использовать относительные имена устройств (например, sda), а также необязательный префикс /dev/ (например, /dev/sda).
Поддерживаются логические тома LVM.

тип - возможные значения:
sectors, operations, bytes, -Целое число при тип равном
sps, ops, bps - Число с плавающей точкой
Этот параметр необходимо указывать, т.к. умолчания отличаются для разных ОС.
sps, ops, bps соответствуют: секторам, операциям, байтам в секунду соответственно

Значения по умолчанию параметра 'Тип' для различных ОС:
AIX - operations
FreeBSD - bps
Linux - sps
OpenBSD - operations
Solaris - bytes

режим - возможные значения:
avg1 (усреднение за минуту, по умолчанию), avg5 (усреднение за 5 минут), avg15 (усреднение за 15 минут).
Третий параметр поддерживается только, если тип один из: sps, ops, bps.

Пример:
⇒ vfs.dev.read[,operations]
vfs.dev.read[,,]
vfs.dev.read[all,ops,avg1]
vfs.dev.read[/dev/sda,ops,avg1]

ops, bps и sps на поддерживаемых платформах ограничено 8 устройствами (7 отдельных устройств и одно all).
Начиная с Zabbix 2.0.1 этот лимит увеличен до 1024 (1023 отдельных устройств и один для all).
Старое название: io[*]

vfs.dev.read[], vfs.dev.write[]: Если первым параметром используется параметр по умолчанию all, тогда ключ возвращает суммарную статистику, включая: все блочные устройства такие как sda, sbd и их разделы sda1, sda2, sdb3 … и несколько устройств (MD raid) на основе этих блочных устройств/разделов и логические разделы (LVM) на основе этих блочных устройств/разделов. В этих случаях возвращаемые значения следует рассматривать как относительные значения (изменяемые во времени), но не как абсолютные значения.
vfs.dev.write
Показать
Статистика записи на диск.
vfs.dev.write[<устройство>,<тип>,<режим>]

Обратите внимание: Если используется интервал обновления три часа и более2, будет всегда возвращаться значение '0'

Устройство
дисковое устройство (по умолчанию all)
Вы можете использовать относительные имена устройств (например, sda), а также необязательный префикс /dev/ (например, /dev/sda).
Поддерживаются логические тома LVM.

тип - возможные значения:
sectors, operations, bytes, -Целое число при тип равном
sps, ops, bps - Число с плавающей точкой
Этот параметр необходимо указывать, т.к. умолчания отличаются для разных ОС.
sps, ops, bps соответствуют: секторам, операциям, байтам в секунду соответственно

Значения по умолчанию параметра 'Тип' для различных ОС:
AIX - operations
FreeBSD - bps
Linux - sps
OpenBSD - operations
Solaris - bytes

режим - возможные значения:
avg1 (усреднение за минуту, по умолчанию), avg5 (усреднение за 5 минут), avg15 (усреднение за 15 минут).
Третий параметр поддерживается только, если тип один из: sps, ops, bps.

Пример:
⇒ vfs.dev.write[,operations]
vfs.dev.write[,,]
vfs.dev.write[all,ops,avg1]
vfs.dev.write[/dev/sda,ops,avg1]

ops, bps и sps на поддерживаемых платформах ограничено 8 устройствами (7 отдельных устройств и одно all).
Начиная с Zabbix 2.0.1 этот лимит увеличен до 1024 (1023 отдельных устройств и один для all).
Старое название: io[*]
Оф. документация о ключеПоддерживаемые ключи элементов данных

В Данные ключи не обходимо подставить устройство, то есть диск sda, sdb, ...
Если не указывать устройство по умолчанию all, тогда ключ возвращает суммарную статистику, включая: все устройства на основе этих блочных устройств/разделов и логические разделы (LVM). Возвращаемые значения будут как относительные значения (изменяемые во времени), но не как абсолютные значения.

Не обходимо сделать обнаружение устройств (поиск дисков и разделов) на хосте и прототипы элементов.
В версии заббикс начиная с 4.4 есть ключ vfs.dev.discovery - Этот ключ обнаружения возвращает два макроса - {#DEVNAME} и {#DEVTYPE}, которые задают соответственно имя и тип блочного устройства.
Более подробно в оф. документации Обнаружение блочных устройств
vfs.dev.discovery
Показать
vfs.dev.discovery

Пример ответа
[
{"{#DEVNAME}":"loop1", "{#DEVTYPE}":"disk"},
{"{#DEVNAME}":"dm-0", "{#DEVTYPE}":"disk"},
{"{#DEVNAME}":"sda", "{#DEVTYPE}":"disk"},
{"{#DEVNAME}":"sda1", "{#DEVTYPE}":"partition"}
]

фильтр: {#DEVNAME} соответствует sd[\D]$ - для обнаружения устройств с именами "sd0", "sd1", "sd2", …
фильтр: {#DEVTYPE} соответствует disk AND {#DEVNAME} не соответствует ^loop.* - для обнаружения типов дисковых устройств чьи имена не начинаются с "loop"
{#DEVNAME} - имя
{#DEVTYPE} - тип блочного устройств - предназначен для фильтрации устройств

Прототипы элементов данных
"vfs.dev.read[{#DEVNAME},sps]"
"vfs.dev.write[{#DEVNAME},sps]"
У меня же на момент написания версия 4.2 и данного ключа нет.
Ищем варианты как получить список дисков.

Просмотреть список дисков можно следующими командами:
lsblk
df -h
fdisk -l
mount
ls -l /dev/
ls -l /dev/ | grep sd
sd - устройство, подключённое по SCSI;
hd - устройство ATA;
vd - виртуальное устройство;
mmcblk - обозначаются флешки, подключённые через картридер;

lsblk - нам подходит (обычно уже установлена если нет можно установить)
Вид ответа lsblk
Показать
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 931G 0 disk
+-sda1 8:1 0 923G 0 part /
+-sda2 8:2 0 1K 0 part
L-sda5 8:5 0 8G 0 part [SWAP]
sr0 11:0 1 3,4G 0 rom
zabbix_get -s 192.168.XXX.XXX -k system.run["lsblk"]
Или Просмотреть можно /sys/class/block/ тут будут символические ссылки на папки
ls -F /sys/class/block/
zabbix_get -s 192.168.XXX.XXX -k system.run["ls -F /sys/class/block/|grep -E \"*/|@\"|tr -d '@'"]

Получился такой скрипт обнаружения дисков
vfs.dev.sh
Показать
#!/bin/bash
#2021/08/04 v1.0
# Автор Мамзиков Артём Андреевич Описание по скрипту
# Получение списка Дисков Linux до версии zabbix 4.4 есть ключ vfs.dev.discovery

#./vfs.dev.sh 192.168.xxx.xxx 10050 discovery , ключ vfs.dev.sh[{HOST.CONN},{$HOST.PORTS},discovery]

# Для построчного цикла
IFS=$'\n'

if [[ $3 = "discovery" ]]
then
# Запрос Дисков | Убрать 1 строку |Убираем символы таблицы
#get=`zabbix_get -s $1 -p $2 -k system.run["lsblk 2>/dev/null|awk NR\>1|tr -d '├─'|tr -d '│└─'"]`
# Без порта
get=`zabbix_get -s $1 -k system.run["lsblk 2>/dev/null|awk NR\>1|tr -d '├─'|tr -d '│└─'"]`

# Еще вариант получения только списка дисков
#get=`zabbix_get -s $1 -k system.run["ls -F /sys/class/block/|grep -E \"*/|@\"|tr -d '@'"]`
fi

# Цикл Перебор строк в переменную data
for data in $get
do
# Выбираем необходимые данные
NAME=$(echo "${data}"|awk '{print $1}')
TYPE=$(echo "${data}"|awk '{print $6}')
MOUNT=$(echo "${data}"|awk '{print $7}')
# Формируем вывод
JSON=$JSON"$SEP\n{\"{#DEVNAME}\":\"$NAME\", \"{#DEVTYPE}\":\"$TYPE\", \"{#DEVMOUNT}\":\"$MOUNT\"}"
SEP=", "
done
# Выводим результат в json data
JSON="["$JSON"\n]"
echo -e $JSON
Фильтр по дискам задан в правиле обнаружения
{#DEVNAME} не соответствует регулярка ^pve.*|^sr.*|^loop.*|^ram.*

Скрипт находится /usr/local/share/zabbix/externalscripts/
Проверка
/usr/local/share/zabbix/externalscripts/vfs.dev.sh 192.168.xxx.xxx 10050 discovery
Обнаружение Дисков
Обнаружение Дисков
Далее созданы прототипы элементов данных
Статистика чтения диска {#DEVNAME} {#DEVTYPE} {#DEVMOUNT} в среднем за 1 минуту vfs.dev.read[{#DEVNAME},,avg1]
Статистика записи диска {#DEVNAME} {#DEVTYPE} {#DEVMOUNT} в среднем за 1 минуту vfs.dev.write[{#DEVNAME},,avg1]
и по аналогии для ратных типов и среднего времени.
Производительность диска прототипы элементов данных
Производительность диска прототипы элементов данных
Так же попался скрипт обнаружения на питоне
lld-disks.py
Показать
#!/usr/bin/python
import os
import json

if __name__ == "__main__":
# Выполните итерацию по всем блочным устройствам, но игнорируйте их, если они находятся в
# пропуск набора
skippable = ("sr", "loop", "ram")
devices = (device for device in os.listdir("/sys/class/block")
if not any(ignore in device for ignore in skippable))
data = [{"{#DEVICENAME}": device} for device in devices]
print(json.dumps({"data": data}, indent=4))
Но этого как то мало для полной статистики нагрузки работы диска.

Ищем информацию или готовые решения.

Как написано в одной статье:
"Практика показывает что ключевые метрики по которым можно оценивать дисковую подсистему это:
Количество операций в секунду (ops) IOPS — число запросов, отправленных на устройство. Это скорость работы с большим числом мелких файлов. (величина операций чтения/записи в секунду)
Пропускная способность (throughput) — (байт в секунду) максимальная линейная скорость с которой устройство пишет или читает один, но очень большой файл.
Время обработки запроса (latency или правильней svctime) (миллисекунд) — время за которое в среднем обрабатывается запрос на ввод-вывод включая ожидание в очереди, причем наиболее характерно именно ожидание, ибо оно зависит от загрузки, а не собственно размера запроса. Чем выше это время, тем «тормознутее» отзыв системы на запрос приложения, но остальные приложения в принципе не затрагиваются. (общая отзывчивость и чтения/записи)
Утилизация дисковой подсистемы (utilization)
Загрузка (проценты) — оценка загруженности системы на ввод-вывод. При значениях близких к 100% система «встает», в том числе все приложения. Процессора уходят в iowait, а процессы, желающие ввода-вывода — в [Disk] Sleep
,(отслеживания общей нагрузки на устройстве)
Так как эти метрики очень зависят друг от друга, то не зная все нельзя сделать правильные выводы."
О расчетах
Показать
Средний серверный жесткий диск 10 тысяч оборотов в секунду, подключенный по SAS к путному RAID контроллеру (с кешем на батарейке):
имеет пропускную способность около 300 Мегабайт в секунду при последовательном доступе
выдает порядка 150 iops (в попугаях)
при времени обработки запросов порядка 10 мс

Если все это живет в RAID то соответственно в зависимости от типа рейда цифры множатся или делятся на число дисков. Например: 4 диска в RAID 1+0 должны показать половину суммарных iops всех четырех дисков.

Если тесты показывают, что система работает, выдавая примерно эти цифры, значит никто при тестировании не «налажал», никаких чудес нет и можно работать дальше. Иначе стоит сначала разобраться что с железом (может RAID восстанавливается или винт сыпется).

Рост IOPS при тех же скоростях записи — признак фрагментации файловой системы
Утилизация дисковой подсистемы строго следует за пропускной способностью, и например составляет 100% для 6,2 гигабита в секунду — уперлись в пропускную способность FC 8gbps линка. Добавляем второй линк и настраиваем мультипас — утилизация падает в 2 раза
Утилизация дисковой подсистемы выросла пи этом iops и скорость записи та же — глючил линк на FC на одном из каналов
покрутили queue/max_sectors_kb со штатных 512 до 4096 — утилизация упала, но максимально много не значит лучше, при 8192 — утилизация стала расти
Более подробнее Профилирование нагрузки на файловую систему с помощью iostat и gnuplot
Еще немного теории Как правильно мерять производительность диска

Готовое решение zabbix-disk-performance из данного решения выше указан скрипт обнаружения на питоне, получение данных происходит при помощи UserParameter это значит что нужно везде настраивать конфиг агента. Будем делать иначе запрашивать всю таблицу одним элементом и делать зависимые элементы данных.
Пример конфига на UserParameter агента
Показать
UserParameter=custom.vfs.discover_disks,/usr/local/bin/lld-disks.py

UserParameter=custom.vfs.dev.read.ops[*],awk '{print $$1}' /sys/class/block/$1/stat
UserParameter=custom.vfs.dev.read.merged[*],awk '{print $$2}' /sys/class/block/$1/stat
UserParameter=custom.vfs.dev.read.sectors[*],awk '{print $$3}' /sys/class/block/$1/stat
UserParameter=custom.vfs.dev.read.ms[*],awk '{print $$4}' /sys/class/block/$1/stat
UserParameter=custom.vfs.dev.write.ops[*],awk '{print $$5}' /sys/class/block/$1/stat
UserParameter=custom.vfs.dev.write.merged[*],awk '{print $$6}' /sys/class/block/$1/stat
UserParameter=custom.vfs.dev.write.sectors[*],awk '{print $$7}' /sys/class/block/$1/stat
UserParameter=custom.vfs.dev.write.ms[*],awk '{print $$8}' /sys/class/block/$1/stat
UserParameter=custom.vfs.dev.io.active[*],awk '{print $$9}' /sys/class/block/$1/stat
UserParameter=custom.vfs.dev.io.ms[*],awk '{print $$10}' /sys/class/block/$1/stat
UserParameter=custom.vfs.dev.weight.io.ms[*],awk '{print $$11}' /sys/class/block/$1/stat
Чуть позже после создания зависимых прототипов элементов данных при поиске инфы для создания триггеров критических значений попалась статья Мониторинг производительности дисковой подсистемы при помощи zabbix и block stat.

А теперь более подробно!

Будем использовать следующее
Пример
cat /sys/class/block/sda/stat
zabbix_get -s 192.168.XXX.XXX -k system.run'vfs.file.contents['/path/to/{#DEVNAME}/stat']'
Ключи
system.run["cat /sys/class/block/{#DEVNAME}/stat"]
vfs.file.contents["/path/to/{#DEVNAME}/stat"]

Статистика ввода-вывода (Большая часть данных в таблице является аккумулятором и постоянно возрастает!)
Интерфейс /sys/block/sdX/stat даёт некоторые статистические данные о производительности ввода-вывода ядра
Эти сакрально-литургические знаки означают следующее:
1 Столбец
read.ops -- полное число запросов на чтение, выполненных успешно.
read I/Os(Чтение ввода/вывода) requests(Запросов) Количество обработанных операций ввода-вывода при чтении.

2 Столбец
read.merged -- число объединённых запросов на чтение. Запросы на чтение и запись, примыкающие друг к другу, могут быть объединены для повышения эффективности. Таким образом, два 4K считывания может стать одним 8K считыванием перед тем, как в конечном итоге быть переданы диску. Поэтому запрос будет считаться одним, и это поле позволяет вам узнать, как часто это было сделано.
read merges(Чтение слияния) requests(Запросов) Количество операций ввода-вывода для чтения, объединенных с вводом-выводом в очереди.

3 Столбец
read.sectors -- число считанных секторов, чтение которых прошло успешно.
read sectors(Чтение секторов) sectors(Сектора) Количество прочитанных секторов.

4 Столбец
read.ms -- миллисекунд, потраченных на чтение.
read ticks(Чтение ожидание) milliseconds(Миллисекунды) Общее время ожидания запросов на чтение.

5 Столбец
write.ops -- число запросов на запись, выполненных успешно.
write I/Os(Запись ввода-вывода) requests(Запросов) Количество обработанных операций ввода-вывода записи.

6 Столбец
write.merged -- число объединённых запросов на запись. Запросы на чтение и запись, примыкающие друг к другу, могут быть объединены для повышения эффективности. Таким образом, два 4K считывания может стать одним 8K считыванием перед тем, как в конечном итоге быть переданы диску. Поэтому запрос будет считаться одним, и это поле позволяет вам узнать, как часто это было сделано.
write merges(Запись слияния) requests(Запросов) Количество операций записи / ввода, объединенных с вводом/выводом в очереди.

7 Столбец
write.sectors -- число секторов, записанных успешно.
write sectors(Запись секторов) sectors(Сектора) Количество записанных секторов.

8 Столбец
write.ms -- миллисекунды, потраченные на запись.
write ticks(Запись ожидания) milliseconds(Миллисекунды) Общее время ожидания запросов на запись.

9 Столбец
io.active -- число запросов ввода-вывода, активных в данный момент. Единственное поле, которое должно стремиться к нулю.
in_flight(В эксплуатации полёте) requests(Запросов) Количество вводов/выводов, находящихся в настоящее время в эксплуатации.

10 Столбец
io.ms -- миллисекунд, потраченных на выполнение запросов ввода-вывода.
io_ticks(ввода/вывода ожидание) milliseconds(Миллисекунды) Общее время, в течение которого это блокирующее устройство было активным.

11 Столбец
weight.io.ms -- взвешенное количество миллисекунд, потраченных на ввод-вывод. Может использоваться как простая мера производительности ввода-вывода.
time_in_queue(Время в очереди) milliseconds(Миллисекунды) Общее время ожидания для всех запросов.

Более подробное описание
Статистика уровня блоков в /sys/block/<dev>/stat
Показать
Статистика уровня блоков в /sys/block/<dev>/stat
===============================================

Этот файл документирует содержимое файла /sys/block/<dev>/stat

Файл stat предоставляет несколько статистических данных о состоянии блока.
устройство <dev>.
Q.Почему в одном файле содержится несколько статистических данных? Нет sysfs обычно содержат одно значение для каждого файла?
A. Имея один файл, ядро ​​может гарантировать, что статистика представляют собой согласованный снимок состояния устройства. Если статистика была экспортирована в несколько файлов, содержащих одну статистику каждого, было бы невозможно гарантировать, что набор показаний представляют собой единый момент времени.

Файл stat состоит из одной строки текста, содержащей 11 знаков после запятой, значения, разделенные пробелом. Поля сведены в следующей таблице и более подробно описано ниже.

Описание единиц наименования
---- ----- -----------
Имя Единицы измерения Описание
read I/Os(Чтение ввода/вывода) requests(Запросов) Количество обработанных операций ввода-вывода при чтении
read merges(Чтение слияния) requests(Запросов) Количество операций ввода-вывода для чтения, объединенных с вводом-выводом в очереди
read sectors(Чтение секторов) sectors(Сектора) Количество прочитанных секторов
read ticks(Чтение ожидание) milliseconds(Миллисекунды) Общее время ожидания запросов на чтение
write I/Os(Запись ввода-вывода) requests(Запросов) Количество обработанных операций ввода-вывода записи
write merges(Запись слияния) requests(Запросов) Количество операций записи / ввода, объединенных с вводом/выводом в очереди
write sectors(Запись секторов) sectors(Сектора) Количество записанных секторов
write ticks(Запись ожидания) milliseconds(Миллисекунды) Общее время ожидания запросов на запись
in_flight(В эксплуатации полёте) requests(Запросов) Количество вводов/выводов, находящихся в настоящее время в эксплуатации
io_ticks(ввода/вывода ожидание) milliseconds(Миллисекунды) Общее время, в течение которого это блокирующее устройство было активным
time_in_queue(Время в очереди) milliseconds(Миллисекунды) Общее время ожидания для всех запросов
discard I/Os(Отказаться от ввода/вывода) requests(Запросов) Количество обработанных операций сброса ввода/вывода
discard merges(Отменить слияние) requests(Запросов) Количество удаленных операций ввода-вывода, объединенных с вводом-выводом в очереди
discard sectors(Отбросить сектора) sectors(Запросов) Количество отброшенных секторов
discard ticks(Отказаться от ожидания) milliseconds(Миллисекунды) Общее время ожидания для запросов на удаление

read I/Os, write I/Os, discard I/0s (читать ввод/вывод, писать ввод/вывод, отбрасывать ввод/вывод)
Эти значения увеличиваются при завершении запроса ввода-вывода.

read merges, write merges, discard merges (слияния для чтения, слияния для записи, слияния для отмены)
Эти значения увеличиваются, когда запрос ввода-вывода объединяется с уже поставленным в очередь запросом ввода-вывода.

read sectors, write sectors, discard_sectors(сектора чтения, сектора записи, отбрасывание_секторы)
Эти значения подсчитывают количество секторов, считанных, записанных или удаленных с этого блочного устройства. "Секторы", о которых идет речь, являются стандартными секторами UNIX объемом 512 байт, а не размером блока, зависящего от устройства или файловой системы. Счетчики увеличиваются по завершении ввода-вывода.

read ticks, write ticks, discard ticks(чтение ожидания, запись ожидания, отбрасывать ожидания)
Эти значения подсчитывают количество миллисекунд, которые имеют запросы ввода-вывода.
ждал на этом блочном устройстве. Если есть несколько ожидающих запросов ввода / вывода,
эти значения будут увеличиваться со скоростью более 1000 в секунду; для
Например, если 60 запросов на чтение ждут в среднем 30 мс, read_ticks
поле увеличится на 60 * 30 = 1800.

in_flight(В эксплуатации полёте)
Это значение подсчитывает количество запросов ввода-вывода, отправленных драйвер устройства, но еще не завершен. Он не включает ввод / вывод запросы, которые находятся в очереди, но еще не отправлены драйверу устройства.

io_ticks(ввода/вывода ожидание)
Это значение подсчитывает количество миллисекунд, в течение которых устройство были в очереди запросы ввода-вывода.

time_in_queue(Время в очереди)
Это значение подсчитывает количество миллисекунд, в течение которых запросы ввода-вывода ожидали.
на этом блочном устройстве. Если есть несколько ожидающих запросов ввода-вывода, это
значение будет увеличиваться как произведение количества миллисекунд, умноженное на
количество ожидающих запросов (см. «ожидания чтения» выше).

Оригинал текста
Переходим к созданию Прототипа элемента который дудет запрашивать всю таблицу

Имя: Запрос таблицы Статистики ввода-вывода Диска {#DEVNAME} {#DEVTYPE} {#DEVMOUNT}
Тип: Zabbix Агент
Ключ: vfs.file.contents["/sys/class/block/{#DEVNAME}/stat"] или system.run["cat /sys/class/block/{#DEVNAME}/stat"]
Тип информации: Текст
Интервал обновления: 30s
Запрос таблицы Статистики ввода-вывода Диска
Запрос таблицы Статистики ввода-вывода Диска

Создаем зависимые элементы данных.
>>> Количество операций в секунду (ops) IOPS — число запросов, отправленных на устройство. Это скорость работы с большим числом мелких файлов. (величина операций чтения/записи в секунду)
1 и 5 столбец

Столбец 1 read.ops Количество успешно обработанных операций ввода-вывода при чтении. предобработка изменений в секунду
Имя: Чтение:Операций в секунду Диск {#DEVNAME} {#DEVTYPE} {#DEVMOUNT}
Тип: Зависимый элемент данных
Ключ: disk[{#DEVNAME} awk '{print $1}'] - тут он роли не играет но указать что то нужно.
Основоной элемент данных: Шаблон: Запрос таблицы Статистики ввода-вывода Диска {#DEVNAME} {#DEVTYPE} {#DEVMOUNT}
Тип информации: Числовой (целое положительное)
Единица измерения: Ops/s
Группа элементов данных: Производительность, Файловая система
Предобработка
Регулярное выражение: ([0-9]+) \1
Изменение в секунду
1-Чтение Операций в секунду Диск
1-Чтение Операций в секунду Диск
Столбец 5 write.ops Количество успешно обработанных операций ввода-вывода записи. предобработка изменений в секунду
Имя: Запись:операций в секунду Диск {#DEVNAME} {#DEVTYPE} {#DEVMOUNT}
Тип: Зависимый элемент данных
Ключ: disk[{#DEVNAME} awk '{print $5}'] - тут он роли не играет но указать что то нужно.
Основной элемент данных: Шаблон: Запрос таблицы Статистики ввода-вывода Диска {#DEVNAME} {#DEVTYPE} {#DEVMOUNT}
Тип информации: Числовой (целое положительное)
Единица измерения: ops/s
Группа элементов данных: Производительность, Файловая система
Предобработка
Регулярное выражение: [0-9]+ *[0-9]+ *[0-9]+ *[0-9]+ *([0-9]+) \1
Изменение в секунду
5-Запись операций в секунду Диск
5-Запись операций в секунду Диск

>>> Пропускная способность (throughput)
Метрика показывающая с какой скоростью данные были записаны или прочитаны
используются колонки №3 read sectors и №5 write sectors. Значение сколько было прочитано или записано "секторов"

Столбец 3 read sectors общее количество успешно прочитанных секторов. предобработка изменений в секунду и Пользовательский множитель 512
(размер этого «сектора» фиксирован 512 байт и не зависит от реальных значений) пересчитать в байты умножить на 512
Имя: Чтение:Байт/сек Диск {#DEVNAME} {#DEVTYPE} {#DEVMOUNT}
Тип: Зависимый элемент данных
Ключ: disk[{#DEVNAME} awk '{print $3}'] - тут он роли не играет но указать что то нужно.
Основной элемент данных: Шаблон: Запрос таблицы Статистики ввода-вывода Диска {#DEVNAME} {#DEVTYPE} {#DEVMOUNT}
Тип информации: Числовой (целое положительное)
Единица измерения: B/sec
Группа элементов данных: Производительность, Файловая система
Предобработка
Регулярное выражение: [0-9]+ *[0-9]+ *([0-9]+) \1
Изменение в секунду
Пользовательский множитель 512
Чтение Байт-сек Диск
Чтение Байт-сек Диск
Уже создан у нас: Столбец 5 write.ops Количество успешно обработанных операций ввода-вывода записи. предобработка изменений в секунду


>>> Время обработки запроса (latency или правильней svctime)
По сути это усредненное время обработки запросов за интервал между опросами.
Используем следующие столбцы 1 4 и 5 8

Столбец 1 read.ops -- полное число запросов на чтение, выполненных успешно. Мы уже создали его выше.

Столбец 4 read.ms -- миллисекунд, потраченных на чтение.
Имя: Чтение ms Диск {#DEVNAME} {#DEVTYPE} {#DEVMOUNT}
Тип: Зависимый элемент данных
Ключ: disk.ms[{#DEVNAME} awk '{print $4}'] - тут он роли не играет но указать что то нужно.
Основной элемент данных: Шаблон: Запрос таблицы Статистики ввода-вывода Диска {#DEVNAME} {#DEVTYPE} {#DEVMOUNT}
Тип информации: Числовой (целое положительное)
Единица измерения: ms
Группа элементов данных: Производительность, Файловая система
Предобработка
Регулярное выражение: [0-9]+ *[0-9]+ *[0-9]+ *([0-9]+) \1
Изменение в секунду
4-Чтение ms Диск
4-Чтение ms Диск
И
Столбец 5 write.ops -- число запросов на запись, выполненных успешно. Мы уже создали его выше.

Столбец 8 write.ms -- миллисекунды, потраченные на запись.
Имя: Запись ms Диск {#DEVNAME} {#DEVTYPE} {#DEVMOUNT}
Тип: Зависимый элемент данных
Ключ: disk.ms[{#DEVNAME} awk '{print $8}'] - тут он роли не играет но указать что то нужно.
Основной элемент данных: Шаблон: Запрос таблицы Статистики ввода-вывода Диска {#DEVNAME} {#DEVTYPE} {#DEVMOUNT}
Тип информации: Числовой (целое положительное)
Единица измерения: ms
Группа элементов данных: Производительность, Файловая система
Предобработка
Регулярное выражение: [0-9]+ *[0-9]+ *[0-9]+ *[0-9]+ *[0-9]+ *[0-9]+ *[0-9]+ *([0-9]+) \1
Изменение в секунду
8-Запись ms Диск
8-Запись ms Диск
Далее нам нужно создать вычисляемый элемент данных : последнее значение милесекунд / последнее значение запросов и поделить на 1000 чтобы перейти в секунды.

Задержка Чтения с Диска
Имя: {#DEVNAME} задержка чтения с диска
Тип: Вычисляемое
Ключ: read.svctime[{#DEVNAME}]
Формула:last("disk.ms[{#DEVNAME} awk '{print $4}']") / last("disk[{#DEVNAME} awk '{print $1}']") /1000
Тип информации: Числовой (с плавающей точкой)
Единица измерения: s
Интервал обновления: 30s
Группа элементов данных: Производительность, Файловая система
Задержка Чтения с Диска
Задержка Чтения с Диска

Задержка записи на диск
Имя: {#DEVNAME} задержка записи на диск
Тип: Вычисляемое
Ключ: write.svctime[{#DEVNAME}]
Формула:last("disk.ms[{#DEVNAME} awk '{print $8}']") / last("disk[{#DEVNAME} awk '{print $5}']") /1000
Тип информации: Числовой (с плавающей точкой)
Единица измерения: s
Интервал обновления: 30s
Группа элементов данных: Производительность, Файловая система
Задержка Записи на Диска
Задержка Записи на Диска
Примечание: Если при вычислениях в элементах будет значение 0 , то получаем Не поддерживается Cannot evaluate expression: division by zero.


>>> Утилизация дисковой подсистемы (utilization)
Загрузка дисковой подсистемы, сколько процентов реального времени система затратила на операции ввода-вывода за интервал между опросами. При 100% система начинает простаивать в ожидании когда диски обработают запросы.
Используем следующие столбцы: 4 8 10 для получения данных.
4 и 8 столбец у нас уже есть но в милисекундах, а тут мы будем делать в % (разница только в том что добавлена предобратотка пользовательский множитель 0.1)

Столбец 4 read.ms -- миллисекунд, потраченных на чтение.
Имя: Чтение % Диск {#DEVNAME} {#DEVTYPE} {#DEVMOUNT}
Тип: Зависимый элемент данных
Ключ: disk[{#DEVNAME} awk '{print $4}'] - тут он роли не играет но указать что то нужно.
Основной элемент данных: Шаблон: Запрос таблицы Статистики ввода-вывода Диска {#DEVNAME} {#DEVTYPE} {#DEVMOUNT}
Тип информации: Числовой (целое положительное)
Единица измерения: %
Группа элементов данных: Производительность, Файловая система
Предобработка
Регулярное выражение: [0-9]+ *[0-9]+ *[0-9]+ *([0-9]+) \1
Пользовательский множитель 0.1
Изменение в секунду
4-Чтение % Диск
4-Чтение % Диск

Столбец 8 write.ms -- миллисекунды, потраченные на запись.
Имя: Запись % Диск {#DEVNAME} {#DEVTYPE} {#DEVMOUNT}
Тип: Зависимый элемент данных
Ключ: disk[{#DEVNAME} awk '{print $8}'] - тут он роли не играет но указать что то нужно.
Основной элемент данных: Шаблон: Запрос таблицы Статистики ввода-вывода Диска {#DEVNAME} {#DEVTYPE} {#DEVMOUNT}
Тип информации: Числовой (целое положительное)
Единица измерения: %
Группа элементов данных: Производительность, Файловая система
Предобработка
Регулярное выражение: [0-9]+ *[0-9]+ *[0-9]+ *[0-9]+ *[0-9]+ *[0-9]+ *[0-9]+ *([0-9]+) \1
Пользовательский множитель 0.1
Изменение в секунду
8-Запись % Диск
8-Запись % Диск

Столбец 10 io.ms -- миллисекунд, потраченных на выполнение запросов ввода-вывода.
Имя: Утилизация дисковой подсистемы Ввод-вывод % Диск {#DEVNAME} {#DEVTYPE} {#DEVMOUNT}
Тип: Зависимый элемент данных
Ключ: disk[{#DEVNAME} awk '{print $10}'] - тут он роли не играет но указать что то нужно.
Основной элемент данных: Шаблон: Запрос таблицы Статистики ввода-вывода Диска {#DEVNAME} {#DEVTYPE} {#DEVMOUNT}
Тип информации: Числовой (целое положительное)
Единица измерения: %
Группа элементов данных: Производительность, Файловая система
Предобработка
Регулярное выражение: [0-9]+ *[0-9]+ *[0-9]+ *[0-9]+ *[0-9]+ *[0-9]+ *[0-9]+ *[0-9]+ *[0-9]+ *([0-9]+) \1
Пользовательский множитель 0.1
Изменение в секунду
10-Утилизация дисковой подсистемы Ввод-вывод % Диск
10-Утилизация дисковой подсистемы Ввод-вывод % Диск

Пример расчетов
Пример расчета в процентах 10 столбец
Разница значений за 60 секунд
71204 мс- новое
40604 мс- старое значение
71204-40604=30600мс это за 60 секунд 30600:60=510мс за 1 секунду (получили изменение в секунду)
если занчение 1000милисекунд за 1 секунду это 100% 1000*0,1=100 , за 60секунд 60000мс это 100%
510мс*0.1=51% затрачено времени на работу ввода вывода
Если на оборот сперва процент после изменение в секунду
71204*0.1=7120,4% новое
40604*0.1=4060,4% старое
7120,4-4060,4=3060:60=51%
В процент
В процент
Еще у нас остались столбцы: 2 6 7 9 11


Столбец 2 read.merged -- число объединённых запросов на чтение. Запросы на чтение и запись, примыкающие друг к другу, могут быть объединены для повышения эффективности. read merges(Чтение слияния) requests(Запросов) Количество операций ввода-вывода для чтения, объединенных с вводом-выводом в очереди.

Имя: Прочитано:Объединено Диск {#DEVNAME} {#DEVTYPE} {#DEVMOUNT}
Тип: Зависимый элемент данных
Ключ: disk[{#DEVNAME} awk '{print $2}'] - тут он роли не играет но указать что то нужно.
Основной элемент данных: Шаблон: Запрос таблицы Статистики ввода-вывода Диска {#DEVNAME} {#DEVTYPE} {#DEVMOUNT}
Тип информации: Числовой (целое положительное)
Единица измерения: Ops/s
Группа элементов данных: Производительность, Файловая система
Предобработка
Регулярное выражение: [0-9]+ *([0-9]+) \1
Изменение в секунду
2-Прочитано Объединено Диск
2-Прочитано Объединено Диск

Столбец 6 write.merged -- число объединённых запросов на запись. Запросы на чтение и запись, примыкающие друг к другу, могут быть объединены для повышения эффективности. write merges(Запись слияния) requests(Запросов) Количество операций записи / ввода, объединенных с вводом/выводом в очереди.

Имя: Запись:Объединено Диск:{#DEVNAME} {#DEVTYPE} {#DEVMOUNT}
Тип: Зависимый элемент данных
Ключ: disk[{#DEVNAME} awk '{print $6}'] - тут он роли не играет но указать что то нужно.
Основной элемент данных: Шаблон: Запрос таблицы Статистики ввода-вывода Диска {#DEVNAME} {#DEVTYPE} {#DEVMOUNT}
Тип информации: Числовой (целое положительное)
Единица измерения: Ops/s
Группа элементов данных: Производительность, Файловая система
Предобработка
Регулярное выражение: [0-9]+ *[0-9]+ *[0-9]+ *[0-9]+ *[0-9]+ *([0-9]+) \1
Изменение в секунду
6-Запись Объединено Диск
6-Запись Объединено Диск

Столбец 7 write sectors(Запись секторов) sectors(Сектора) Количество записанных секторов.

Имя: Запись:Байт/сек Диск:{#DEVNAME} {#DEVTYPE} {#DEVMOUNT}
Тип: Зависимый элемент данных
Ключ: disk[{#DEVNAME} awk '{print $7}'] - тут он роли не играет но указать что то нужно.
Основной элемент данных: Шаблон: Запрос таблицы Статистики ввода-вывода Диска {#DEVNAME} {#DEVTYPE} {#DEVMOUNT}
Тип информации: Числовой (целое положительное)
Единица измерения: B/sec
Группа элементов данных: Производительность, Файловая система
Предобработка
Регулярное выражение: [0-9]+ *[0-9]+ *[0-9]+ *[0-9]+ *[0-9]+ *[0-9]+ *([0-9]+) \1
Изменение в секунду
Пользовательский множитель 512
7-Запись Байт-сек Диск
7-Запись Байт-сек Диск

Столбец 9 io.active -- число запросов ввода-вывода, активных в данный момент. должно стремиться к нулю.
in_flight(В эксплуатации полёте) requests(Запросов) Количество вводов/выводов, находящихся в настоящее время в эксплуатации.

Имя: Ввод-Вывод:В Настоящее Время Активен Диск:{#DEVNAME} {#DEVTYPE} {#DEVMOUNT}
Тип: Зависимый элемент данных
Ключ: disk[{#DEVNAME} awk '{print $9}'] - тут он роли не играет но указать что то нужно.
Основной элемент данных: Шаблон: Запрос таблицы Статистики ввода-вывода Диска {#DEVNAME} {#DEVTYPE} {#DEVMOUNT}
Тип информации: Числовой (целое положительное)
Единица измерения: io
Группа элементов данных: Производительность, Файловая система
Предобработка
Регулярное выражение: [0-9]+ *[0-9]+ *[0-9]+ *[0-9]+ *[0-9]+ *[0-9]+ *[0-9]+ *[0-9]+ *([0-9]+) \1
9-Ввод-Вывод В Настоящее Время Активен Диск
9-Ввод-Вывод В Настоящее Время Активен Диск

Столбец 11 weight.io.ms -- взвешенное количество миллисекунд, потраченных на ввод-вывод. Может использоваться как простая мера производительности ввода-вывода.
time_in_queue(Время в очереди) milliseconds(Миллисекунды) Общее время ожидания для всех запросов.

Имя: Ввод-вывод:Вес:мс Диск {#DEVNAME} {#DEVTYPE} {#DEVMOUNT}
Тип: Зависимый элемент данных
Ключ: disk[{#DEVNAME} awk '{print $11}'] - тут он роли не играет но указать что то нужно.
Основной элемент данных: Шаблон: Запрос таблицы Статистики ввода-вывода Диска {#DEVNAME} {#DEVTYPE} {#DEVMOUNT}
Тип информации: Числовой (целое положительное)
Единица измерения: ms
Группа элементов данных: Производительность, Файловая система
Предобработка
Регулярное выражение: [0-9]+ *[0-9]+ *[0-9]+ *[0-9]+ *[0-9]+ *[0-9]+ *[0-9]+ *[0-9]+ *[0-9]+ *[0-9]+ *([0-9]+) \1
Изменение в секунду
11-Ввод-вывод Вес мс Диск
11-Ввод-вывод Вес мс Диск

ТРИГГЕРЫ
Создаются индивидуально из характеристик дисков или raid масивов.

Общее может быть значение в процентах, но опять же если это raid масив 4 8 10 столбец где получали в процент в 1 секунде может быть больше 1000ms при обработке данных и получаем 1500% вместо 100%.

Пример 3х прототипов триггеров

Утилизация дисковой подсистемы (utilization)
Имя:Загрузка дисковой системы >= 90% {#DEVNAME} {#DEVTYPE} {#DEVMOUNT}
Важность:Средняя
Выражение проблемы:
{Template OS Linux:disk[{#DEVNAME} awk '{print $4}'].last()}>=90 or
{Template OS Linux:disk[{#DEVNAME} awk '{print $8}'].last()}>=90 or
{Template OS Linux:disk[{#DEVNAME} awk '{print $10}'].last()}>=90

Генерация ОК событий Выражение восстановления
Выражение восстановления:
{Template OS Linux:disk[{#DEVNAME} awk '{print $4}'].last()}<=89 and
{Template OS Linux:disk[{#DEVNAME} awk '{print $8}'].last()}<=89 and
{Template OS Linux:disk[{#DEVNAME} awk '{print $10}'].last()}<=89 or
{Template OS Linux:disk[{#DEVNAME} awk '{print $4}'].last()}>=100 or
{Template OS Linux:disk[{#DEVNAME} awk '{print $8}'].last()}>=100 or
{Template OS Linux:disk[{#DEVNAME} awk '{print $10}'].last()}>=100

Разрешить закрывать вручную: V
URL: http://192.168.XXX.XXX/zabbix/charts.ph ... =showgraph
Триггер Загрузка дисковой системы 90процентов
Триггер Загрузка дисковой системы 90процентов
Имя:Загрузка дисковой системы >= 100% {#DEVNAME} {#DEVTYPE} {#DEVMOUNT}
Важность:Высокая
Выражение проблемы:
{Template OS Linux:disk[{#DEVNAME} awk '{print $4}'].last()}>=100 or
{Template OS Linux:disk[{#DEVNAME} awk '{print $8}'].last()}>=100 or
{Template OS Linux:disk[{#DEVNAME} awk '{print $10}'].last()}>=100

Разрешить закрывать вручную: V
URL: http://192.168.XXX.XXX/zabbix/charts.ph ... =showgraph
Триггер Загрузка дисковой системы 100процентов
Триггер Загрузка дисковой системы 100процентов

Имя:Активная работа Ввода-Вывода на Диске {#DEVNAME} {#DEVTYPE} {#DEVMOUNT}
Важность:Внимание Предупреждение
Выражение проблемы:
{Template OS Linux:disk[{#DEVNAME} awk '{print $9}'].min(3)}>=50
Разрешить закрывать вручную: V
URL: http://192.168.XXX.XXX/zabbix/charts.ph ... =showgraph
Триггер Активная работа Ввода-Вывода на Диске
Триггер Активная работа Ввода-Вывода на Диске
Пропускная способность (throughput) — (байт в секунду) нужно знать ограничения своей дисковой системы
аналогично для Количество операций в секунду (ops) и Время обработки запроса (latency или правильней svctime) и других параметров.

ГРАФИКИ
Графики Производительности диска
Графики Производительности диска
Утилизация Ввод-Вывод/Чтение/Запись в % Диск {#DEVNAME} {#DEVTYPE} {#DEVMOUNT}
Утилизация Ввод-Вывод Чтение Запись в Диск
Утилизация Ввод-Вывод Чтение Запись в Диск

Статистика Чтения / Записи диска {#DEVNAME} {#DEVTYPE} {#DEVMOUNT} в среднем
Статистика Чтения - Записи диска в среднем
Статистика Чтения - Записи диска в среднем
Диск {#DEVNAME} {#DEVTYPE} {#DEVMOUNT} - Слитый Объединено
Диск Слитый Объединено
Диск Слитый Объединено
Диск {#DEVNAME} {#DEVTYPE} {#DEVMOUNT} - Пропускная способность (throughput)
Диск - Пропускная способность (throughput)
Диск - Пропускная способность (throughput)
Диск {#DEVNAME} {#DEVTYPE} {#DEVMOUNT} - Обзор
Диск Обзор
Диск Обзор
Диск {#DEVNAME} {#DEVTYPE} {#DEVMOUNT} - Кол-во операций ввода-вывода в секунду IOPS
Диск Кол-во операций ввода-вывода в секунду IOPS
Диск Кол-во операций ввода-вывода в секунду IOPS
Диск {#DEVNAME} {#DEVTYPE} {#DEVMOUNT} - Время обработки запроса (вычисляемое) latency svctime
Диск Время обработки запроса (вычисляемое) latency svctime
Диск Время обработки запроса (вычисляемое) latency svctime
Диск {#DEVNAME} {#DEVTYPE} {#DEVMOUNT} - Время обработки запроса
Диск Время обработки запроса
Диск Время обработки запроса
Диск {#DEVNAME} {#DEVTYPE} {#DEVMOUNT} - Байт/сек
Диск Байт сек
Диск Байт сек
Диск {#DEVNAME} {#DEVTYPE} {#DEVMOUNT} - Ops/сек Кол-во операций в секунду
Диск Ops сек Кол-во операций в секунду
Диск Ops сек Кол-во операций в секунду
Ввод-Вывод:В Настоящее Время Активен Диск:{#DEVNAME} {#DEVTYPE} {#DEVMOUNT}
Ввод-Вывод В Настоящее Время Активен Диск
Ввод-Вывод В Настоящее Время Активен Диск
количество слов: 1828

Вернуться в «Аппаратное обеспечение»