Какие инструменты используются для мониторинга нагрузки и производительности системы?

Ответ

Мониторинг нагрузки (performance monitoring) проводится на разных уровнях стека с помощью специализированных инструментов.

Уровни мониторинга и инструменты:

Уровень Цель Инструменты
Инфраструктура CPU, RAM, Disk I/O, Network OS: top, htop, vmstat, iostat, nmon (Linux). Системы: Zabbix, Nagios, Prometheus (сбор метрик).
Приложение (APM) Время отклика, ошибки, трассировка запросов Специализированные: New Relic, Datadog, AppDynamics. Open-source: Jaeger, Zipkin (трассировка).
Сеть и БД Запросы к БД, сетевая задержка БД: pg_stat_statements (PostgreSQL), slow query log. Сеть: Ping, traceroute, Wireshark.
Клиентский (Frontend) Время загрузки страницы, отрисовки Браузер: Chrome DevTools (Performance, Lighthouse). RUM: Яндекс.Метрика, Google Analytics.
Визуализация и алертинг Дашборды, уведомления Grafana (чаще всего с Prometheus). Встроенные дашборды в Datadog, New Relic.

Примеры использования:

  1. Быстрая проверка нагрузки на сервере через CLI:

    # Просмотр процессов, потребляющих CPU
    top -b -n 1 | head -20
    # Мониторинг использования памяти
    free -h
    # Проверка дискового ввода/вывода
    iostat -dx 2 5
  2. Настройка базового алерта в Prometheus + Alertmanager (пример для высокого CPU):

    # alert_rules.yml
    groups:
      - name: host_alerts
        rules:
        - alert: HighCpuLoad
          expr: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
          for: 5m
          labels:
            severity: warning
          annotations:
            summary: "Высокая загрузка CPU на {{ $labels.instance }}"

Best Practice: Внедрять мониторинг по методологии USE (Utilization, Saturation, Errors) или RED (Rate, Errors, Duration) для комплексного покрытия метрик.

Ответ 18+ 🔞

А, ну ты глянь, мониторинг нагрузки, блядь! Это ж как в поликлинике, только для серверов — везде датчики понатыканы, чтоб понять, кто там хрипит и дохнет. Слушай, разбираем по полочкам, но без занудства, а то заснёшь нахуй.

Где и чем тыкаем, чтоб понять, что болит:

Уровень Зачем тыкаем Чем тыкаем
Инфраструктура CPU не кипит ли, память не кончилась, диски не скрипят? Из консоли: top, htop, vmstat — классика жанра, блядь. Для серьёзных пацанов: Zabbix, Prometheus — они всё сами посчитают и в морду тычут, если что.
Само приложение (APM) А не тормозит ли наша кривая логика? Где запрос завис? Платные штуки: New Relic, Datadog — овердохуища возможностей, но и денег стоят. Бесплатно-бунтарское: Jaeger, Zipkin — сам всё настроишь, зато потом гордиться будешь.
Сеть и базы данных А не тупит ли база? Не роутер ли наш — пидарас шерстяной? Для БД: pg_stat_statements в PostgreSQL — покажет, кто там тяжёлые запросы гоняет. Для сети: Wireshark — если совсем припёрло и надо в пакеты заглянуть.
Клиентская часть (Frontend) А у юзера-то страница за 10 секунд грузится или он уже уснул? Прямо в браузере: Chrome DevTools — Performance вкладка, там всё разложено. Для статистики: Яндекс.Метрика — чтоб знать, сколько народу сбежало, не дождавшись.
Чтоб красиво было и пищало Картинки с графиками для начальства и алерты, чтоб ночью будили. Король дашбордов: Grafana — подключил к Prometheus и красота, блядь. Ну или в тех же Datadog свои виджеты наверти.

Ну и парочка живых примеров, чтоб не на словах:

  1. Быстро прикинуть, че творится на сервере, через консоль:

    # Смотрим, кто CPU жрёт, как не в себя
    top -b -n 1 | head -20
    # Проверяем, не кончилась ли память (free -h, ага, «свободно», смешно)
    free -h
    # Диски наши не захлебнулись от операций?
    iostat -dx 2 5
  2. Чтоб тебе не спалось спокойно, настраиваем алерт на высокий CPU в Prometheus:

    # alert_rules.yml
    groups:
      - name: host_alerts
        rules:
        - alert: HighCpuLoad
          expr: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
          for: 5m
          labels:
            severity: warning
          annotations:
            summary: "Высокая загрузка CPU на {{ $labels.instance }}"

    Перевожу: если какая-то мразь (instance) пятерку минут CPU грузит больше чем на 80% — тебе придёт письмо счастья. Волнение ебать!

И главный совет, чтоб не метаться как Герасим с Муму: внедряй мониторинг по каким-то вменяемым принципам, типа USE (Утилизация, Насыщение, Ошибки) или RED (Скорость, Ошибки, Длительность). А то будешь тысячу метрик собирать, а что с ними делать — хуй знает. Короче, чтоб покрыть всё важное, а не просто графики рисовать.