Как посмотреть нагрузку на диски?devops-11

Основные инструменты для анализа дисковых нагрузок

1. Команда iostat

Лучший инструмент для анализа производительности дисков в реальном времени:

iostat -dx 1 5
# Параметры:
# -d - только дисковые устройства
# -x - расширенная статистика
# 1 - интервал в секундах
# 5 - количество отчетов

Ключевые метрики в выводе:

  • %util - процент использования диска (важнейший показатель)
  • await - среднее время ожидания I/O (мс)
  • r/s, w/s - операции чтения/записи в секунду
  • rkB/s, wkB/s - скорость чтения/записи (КБ/с)

2. Утилита iotop

Показывает какие процессы создают нагрузку:

sudo iotop -oP
# Параметры:
# -o - только активные процессы
# -P - показывать только процессы

Преимущества:

  • Видно конкретные процессы
  • Сортировка по дисковым операциям
  • Показывает накопленную нагрузку

3. Команда vmstat для общей статистики

vmstat -d 1

Выводит:

  • sectors read/written
  • время работы дисков

4. Утилита dstat - комбинированный мониторинг

dstat -td --disk-util --top-io 1
# Показывает:
# - время
# - загрузку дисков
# - процессы с максимальным I/O

Детальный анализ дисковых операций

5. Использование pidstat для мониторинга на уровне процессов

pidstat -dl 1
# Параметры:
# -d - статистика дисковых операций
# -l - полные имена команд

6. Анализ конкретного устройства с blktrace

Для глубокой диагностики проблем:

blktrace -d /dev/sda -o - | blkparse -i -

(требует прав root)

7. Просмотр очереди запросов к диску

cat /sys/block/sda/queue/nr_requests
# Или для всех устройств:
lsblk -d -o NAME,MOUNTPOINT,ROTA,SCHED,RQ-SIZE

Долгосрочный мониторинг

8. Настройка sar для сбора исторических данных

# Активируем сбор (если не активен):
sudo sed -i 's/ENABLED="false"/ENABLED="true"/' /etc/default/sysstat
sudo systemctl enable --now sysstat

# Просмотр данных за сегодня:
sar -d -p

9. Использование /proc для получения сырых данных

cat /proc/diskstats
# Или более читаемо:
awk '{print $3"\t"$4"\t"$8"\t"$12}' /proc/diskstats | column -t

Специализированные инструменты

10. bpftrace для продвинутого анализа

Пример скрипта для отслеживания медленных операций:

sudo bpftrace -e 'tracepoint:block:block_rq_complete {
    @[args->dev] = hist(args->nr_sector * 512); }'

11. Grafana + Prometheus для визуализации

Пример метрик для мониторинга:

  • node_disk_read_bytes_total
  • node_disk_write_bytes_total
  • node_disk_io_time_seconds_total

Анализ конкретных проблем

Высокая загрузка диска (%util > 90%):

  1. Определить процессы (iotop, pidstat)
  2. Проверить тип нагрузки (чтение/запись)
  3. Проанализировать очередь (iostat -x)

Большое время ожидания (await > 10ms):

  1. Проверить физическое состояние диска (smartctl)
  2. Оптимизировать планировщик ввода-вывода
  3. Рассмотреть миграцию на SSD

Резюмируем

  1. Базовые инструменты:

    • iostat - основной инструмент для быстрой диагностики
    • iotop - идентификация "прожорливых" процессов
    • vmstat/dstat - общий мониторинг
  2. Продвинутые методы:

    • blktrace - для глубокого анализа проблем
    • bpftrace - для кастомного мониторинга
    • sar - для исторических данных
  3. Для DevOps практики:

    • Настроить постоянный мониторинг ключевых метрик
    • Автоматизировать сбор и анализ данных
    • Понимать взаимосвязь между метриками
    • Уметь интерпретировать данные для разных типов накопителей (HDD/SSD/NVMe)
  4. Критические метрики:

    • %util - общая загрузка
    • await - задержки
    • IOPS - количество операций
    • Пропускная способность (MB/s)
  5. Оптимизация:

    • Выбор правильного планировщика (deadline, noop, cfq)
    • Балансировка нагрузки между дисками
    • Кэширование (при наличии RAM)