Мониторинг производительности Linux на примере sar

Сегодня хотел бы рассмотреть альтернативные утилиты для измерения производительности в Unix-like системах. Большинство начинающих сисадминов пользуются утилитой top,  но есть немало других замечательных утилит. Сегодня речь пойдет про sar.

Используя sar вы можете наблюдать за производительностью различных подсистем Linux (Процессор, Память, Ввод-Вывод) в реальном времени. Sar является частью пакета sysstat.

 

Перечислим основные характеристики, которые может собирать sar:

 

1.Общее использование CPU
 
2. Статистика по каждому CPU
 
3. Доступная память и загрузка
 
4. Файл подкачки - доступно/занято
 
5. Общий свод по деятельности системы ввода-вывода (I/О)
 
6. Статистика по каждому устройству I/O
 
7. Статистика переключения контекста(Context switch)
 
8. Запущенные очереди и средняя загрузка
 
9. Сетевая статистика
 
10. Сбор статистики по указанному времени
 
Начнем с установки и конфигурирования
 
Установка из пакетов
 
Для начала убедимся, что наша система содержит последнюю версию пакета sysstat и соответственно утилиты sar. Установка зависит от типа Вашего дистрибутива:
sudo apt-get install sysstat
(или)
yum install sysstat
(или)
rpm -ivh sysstat-11.1.2-1.x86_64.rpm
Установка из исходников
 

Скачиваем последнюю версию с сайта

Вы также можете использовать для скачивания wget.

wget ht_tp://pagesperso-orange.fr/sebastien.godard/sysstat-11.1.2.tar.gz

tar xvfj sysstat-11.1.2.tar.gz

cd sysstat-11.1.2

./configure --enable-install-cron
Примечение: убедитесь что Вы поставили опцию –enable-install-cron, это внесет некую автоматизацию в дальнейшем. Если Вы не поставите эту опцию, то потом будете править конфиги руками =)
 
Создайте /etc/rc.d/init.d/sysstat
Создайте соответствующую ссылку с /etc/rc.d/rc*.d/  на /etc/rc.d/init.d/sysstat для автоматического старта при загрузке.
Например, /etc/rc.d/rc3.d/S01sysstat автоматически линукется с /etc/rc.d/init.d/sysstat
После ./configure, инсталируем как показано ниже.
make

make install
Примечение: после выполнения данных команд, sar и другие утилиты sysstat будут располагаться в /usr/local/bin
После установки проверяем версию sar - 
sar -V
sysstat version 10.2.0
(C) Sebastien Godard (sysstat <at> orange.fr)
При написании статьи использовался не совсем свежий дистрибутив, поэтому версия немного ниже чем последняя, но это не изменят прелестей ее использования.
Убедимся что утилита sar работоспособна. Например, команда показанная ниже выдает трижды статистику по CPU  с интервалом в 1 секунду
$ sar 1 3
Linux 3.13.0-39-generic (glpi)  24.12.2014      _x86_64_        (2 CPU)

15:16:33        CPU     %user     %nice   %system   %iowait    %steal     %idle
15:16:34        all      0,50      0,00      0,00      0,00      0,00     99,50
15:16:35        all      0,00      0,00      0,00      0,00      0,00    100,00
15:16:36        all      0,00      0,00      0,00      0,00      0,00    100,00
Average:        all      0,17      0,00      0,00      0,00      0,00     99,83
Перечислим другие утилиты входящие в состав sysstat
sar - собирает и выводит на экран всю статистику по активности системы
 
sadc рсшифровывается как “system activity data collector”, то бишь это надстройка над sar  для сохранения статистики.
 
sa1 - сохраняет информацию об  активности системы в двоичный файл данных. sa1 использует sadc для этой цели.
sa1 запускается через cron.
 
sa2 - создает ежедневный краткий отчет по собранной статистике. sa2  запускается через cron.
 
sadf - может генерировать отчеты sar в CSV, XML, и несколько других форматов. Используется для интеграции данных sar c другими утилитами
 
iostat - показывает статистику CPU и I/O (ввод-вывод)
 
mpstat - показывает статистику CPU.
 
pidstat - показывается статистику по процессам (process id)
 
nfsiostat - показывает статистику  I/O для NFS I/O 
 
cifsiostat - показывает статистику по CIFS
 
Приведем пример сбора статистики через cron используя sa1 и sa2.
 
Создадим файл с именем sysstat в папке /etc/cron.d, который будет собирать данные sar
# sudo nano /etc/cron.d/sysstat
*/10 * * * * root /usr/local/lib/sa/sa1 1 1
53 23 * * * root /usr/local/lib/sa/sa2 -A
Если Вы установили утилиту из исходников, то расположение sa1 и sa2 будет /usr/local/lib/sa. А если через менеджер пакетов (yum, up2date, или apt-get) это должно быть  /usr/lib/sa/sa1 и /usr/lib/sa/sa2
 
Разберем строки подробнее -
Первая -/usr/local/lib/sa/sa1
 
Данная команда запускается каждые 10 минут и собирает данные с использованием sar. Я думаю с форматом cron все знакомы и установить нужный интервал Вы сможете самостоятельно. Для совсем ленивых, меняем например */10 на */5, соответственно информация будет собираться каждые 5 минут.
 
Данные пишутся в файл /var/log/sa/saXX, где ХХ день месяца.  saXX - это файл в двоичном формает и обычным текстовым редактором Вы его не прочитаете.
 
Например, сегодня 24 число месяца, sa1 пишет данные в файл  /var/log/sa/sa25
Вы можете задать два параметра для sa1 - это интервал (в секундах) и счетчик (количество раз).
 
В нашем примере задано - sa1 1 1, что значит собирать данные sar одноразово с интервалом в 1 секунду (каждые 10 минут). 
 
Вторая строка - /usr/local/lib/sa/sa2 запускается ближе к полуночи и создает краткий отчет за день.
sa2 создает файл /var/log/sa/sarXX (отличие от предыдущего в одну букву). Файл создается в ascii формате и могут быть
прочитаны текстовым редактором.
 
В нашем случае ротация логов происходит раз в 7 дней.

Практическое применение команды sar

Существует два способа запуск  команды sar. Первый, с заданием опций без указания файла данных saXX. То бишь данные о производительности будут показывать за текущий день. Второй, это задание опции -f и указанием файла saXX, где XX это конкретный день месяца, за который будет показана статистика.
 
В примерах ниже, мы будем использовать статистику по роизводительности на текущий период, чтобы просмотреть статистику на заданный день, добавьте “-f /var/log/sa/saXX” в конце команды sar.
$ sar -u
Linux 3.13.0-39-generic (glpi)  25.12.2014      _x86_64_        (2 CPU)
Linux 3.13.0-39-generic  – версия ядра Linux
 
(glpi) – имя машины, с которой собираются
 
25.12.2014 –  Дата сбора данных
 
_x86_64_ – Архитектура системы
 
(2 CPU) – Количество доступных CPU в системе. В многоядерных системах, показывается общее число ядер.

1. Использование процессора (общее для всех CPU, sar -u)

Просмотрим статистику в реальном времени по использованию процессорных мощностей. В команде приведенной ниже цифры "1 3" говорят о необходимости снятия данных трижды через каждую секунду. Более интересной выглядит последний столбец в выводе - “%idle” , по которому можно сделать вывод о загруженности процессора.
$ sar -u 1 3
Linux 3.13.0-39-generic (glpi)  25.12.2014      _x86_64_        (2 CPU)

10:24:55        CPU     %user     %nice   %system   %iowait    %steal     %idle
10:24:56        all      0,00      0,00      0,00      0,00      0,00    100,00
10:24:57        all      0,00      0,00      0,50      0,00      0,00     99,50
10:24:58        all      0,00      0,00      0,00      0,00      0,00    100,00
Average:        all      0,00      0,00      0,17      0,00      0,00     99,83
Приведем примеры наиболее востребованных комбинации: 
 
sar -u показывает использование процессора за текущий день, по данным которые были сохранены до текущего запуска
 
sar -u 1 3 Показывает загрузку CPU реальном времени с опросом через 1 секунду трижды
 
sar -u ALL тоже, что и “sar -u”, но добавляются дополнительные поля.
 
sar -u ALL 1 3 Тоже самое, что и “sar -u 1 3″, также добавляются дополнительные поля.
 
sar -u -f /var/log/sa/sa10 Показывает использование CPU  за 10-й день месяца, из файла sa10.

2. Использование CPU для конкретного CPU или ядра (sar -P)

В моем случае имеются всего два, используем ключ “-P ALL” для просмотра загрузки по каждому ядру.
В примере ниже, в колонке “CPU" идут номера ядер
$ sar -P ALL 1 1
Linux 3.13.0-39-generic (glpi)  25.12.2014      _x86_64_        (2 CPU)

10:50:48        CPU     %user     %nice   %system   %iowait    %steal     %idle
10:50:49        all      0,00      0,00      0,50      0,00      0,00     99,50
10:50:49          0      0,00      0,00      0,00      0,00      0,00    100,00
10:50:49          1      0,00      0,00      0,00      0,00      0,00    100,00
Ключ “-P 1″  покажет статистику только по второму ядру (нумерация ядер начинается с 0)
$ sar -P 1 1 1
Linux 3.13.0-39-generic (glpi)  25.12.2014      _x86_64_        (2 CPU)

10:53:39        CPU     %user     %nice   %system   %iowait    %steal     %idle
10:53:40          1      0,00      0,00      1,00      0,00      0,00     99,00
Average:          1      0,00      0,00      1,00      0,00      0,00     99,00
Приведем примеры наиболее востребованных комбинации: 
 
sar -P ALL Показывает использование всех CPU за текущий
 
sar -P ALL 1 3 Показывает статистику в реальном времени по всем ядрам каждую секунду трижды
 
sar -P 1 Показывает использование CPU для ядра с номером 1 на текущий
 
sar -P 1 1 3 Показывает статистику в реальном времени для ядра с номером 1 трижды через каждую секунду.
 
sar -P ALL -f /var/log/sa/sa10 Показывать использование ЦПУ по всем ядрам за 10-е число месяца (из файла sa10)

3. Свободная и занятая память (sar -r)

Команда с данным ключом показывает статистику по свободной и используемой памяти. Ключи "1 3" говорят о сборе статистиеи через каждую секунду три раза. В таблице нас больше все будут интересовать графы “kbmemfree” и“kbmemused”, то бишь свободная и занятая память
$ sar -r 1 3
Linux 3.13.0-39-generic (glpi)  25.12.2014      _x86_64_        (2 CPU)

11:00:03    kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit  kbactive   kbinact   kbdirty
11:00:04      1674524    375400     18,31     21200    182088    682024     17,04    191776    116764        32
11:00:05      1674524    375400     18,31     21200    182088    682024     17,04    191776    116764        32
11:00:06      1674516    375408     18,31     21200    182088    682024     17,04    191780    116764        32
Average:      1674521    375403     18,31     21200    182088    682024     17,04    191777    116764        32
Приведем примеры наиболее востребованных комбинации: 
sar -r
 
sar -r 1 3
 
sar -r -f /var/log/sa/sa10

4. Файл подкачки (sar -S)

Показывает статистику по swap. Если в таблице графы “kbswpused” и “%swpused” равны нулю, то в Вашей системе файл подкачки не используется
$  sar -S 1 3
Linux 3.13.0-39-generic (glpi)  25.12.2014      _x86_64_        (2 CPU)

11:04:51    kbswpfree kbswpused  %swpused  kbswpcad   %swpcad
11:04:52      1951740         0      0,00         0      0,00
11:04:53      1951740         0      0,00         0      0,00
11:04:54      1951740         0      0,00         0      0,00
Average:      1951740         0      0,00         0      0,00
Приведем примеры наиболее востребованных комбинации: 
sar -S
 
sar -S 1 3
 
sar -S -f /var/log/sa/sa10
 
Примечание:
Используйте “sar -R” чтобы определить в системе количество свободных страниц памяти,  используемых, и кэшированных в секунду.
 
Используйте “sar -H” для определения большых страниц (Hugepages, 2 Мб) в килобайтах, свободные и используемые.
 
"sar -B” используется для показа статистики по страничной разбивке (paging)
 
sar -W” используется для показа статистики по использованию swap'a.

5. Статистика по устройствам ввода-вывода(I/O, sar -b)

Опять же собираем статистику трижды через каждую секунду
$ sar -b 1 3
Linux 3.13.0-39-generic (glpi)  25.12.2014      _x86_64_        (2 CPU)

11:40:09          tps      rtps      wtps   bread/s   bwrtn/s
11:40:10         0,00      0,00      0,00      0,00      0,00
11:40:11         8,00      0,00      8,00      0,00     72,00
11:40:12         0,00      0,00      0,00      0,00      0,00
Average:         2,67      0,00      2,67      0,00     24,00
Обозначение столбцов:
tps –  транзакции в секунду (включает и запись и чтение)
 
rtps – транзакций на чтение в секунду
 
wtps – транзакций на запись в секунду
 
bread/s – прочитано байт в секунду
 
bwrtn/s – байт записано в секунду
 
Приведем примеры наиболее востребованных комбинации: 
 
sar -b
 
sar -b 1 3
 
sar -b -f /var/log/sa/sa10
 
Примечание: используйте “sar -v” для отображения количества обработчиков индексных дескрипторов, обработчиков файлов, и псевдо-терминалов, используемых в системе.
 

6. Статистика по каждому устройству I/O (sar -d)

Для идентификации активности единичного блочного устройства (т.е. специфичной точки монтирования, или LUN или раздела), используйте "sar -d"
$ sar -d 1 1
Linux 3.13.0-39-generic (glpi)  25.12.2014      _x86_64_        (2 CPU)

11:46:00          DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     awai
11:46:01       dev8-0      0,00      0,00      0,00      0,00      0,00      0,0
11:46:01     dev252-0      0,00      0,00      0,00      0,00      0,00      0,0
В примере “DEV” показывает конкретное блочное устройство
 
Имя устройства (столбец DEV) может демонстрироваться как  акутуальное имя устройства (например sda1, sda2, sdb1 и т.д.), для этого используется опция -p.
$  sar -p -d 1 1
Linux 3.13.0-39-generic (glpi)  25.12.2014      _x86_64_        (2 CPU)

11:52:40          DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
11:52:41          sda      0,00      0,00      0,00      0,00      0,00      0,00      0,00      0,00
11:52:41    cryptswap1      0,00      0,00      0,00      0,00      0,00      0,00      0,00      0,00
Возможные варианты использования:
sar -d
 
sar -d 1 3
 
sar -d -f /var/log/sa/sa10
 
sar -p -d

7. Показать переключение контекста в секунду (sar -w)

Данный вид отчета показывает общее число процессов созданных за секунду и общее число переключений контекста в секунду.
$  sar -w 1 3
Linux 3.13.0-39-generic (glpi)  25.12.2014      _x86_64_        (2 CPU)

11:59:05       proc/s   cswch/s
11:59:06         0,00     61,00
11:59:07         0,00    104,00
11:59:08         0,00     88,00
Average:         0,00     84,33
Возможные варианты:
sar -w
 
sar -w 1 3
 
sar -w -f /var/log/sa/sa10

8. Отчет по запущенной очереди и средней загрузке(sar -q)

Данный отчет показывает размер запущенной очереди и среднюю загрузку за последние минуту, 5 минут, 15 минут.
$ sar -q 1 3
Linux 3.13.0-39-generic (glpi)  25.12.2014      _x86_64_        (2 CPU)

12:01:44      runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15   blocked
12:01:45            0       186      0,04      0,04      0,05         0
12:01:46            0       186      0,04      0,04      0,05         0
12:01:47            0       186      0,04      0,04      0,05         0
Average:            0       186      0,04      0,04      0,05         0 
Примечание: Столбец “blocked” показывает число задач, которые на данный момент заблокированы и ждут окончание операций I/O.
 
Возможные варианты:
sar -q
 
sar -q 1 3
 
sar -q -f /var/log/sa/sa10

9. Сетевая статистика (sar -n)

Данный вид отчета показывает различные сетевые статистики. Например число полученных пакетов на сетевом интерфейсе, статистика сброшенных пакетов  и т.д. 
Вид команды:
 
sar -n KEYWORD
где KEYWORD может быть:
 
DEV – Показывает сетевую статистику по интерфейсам
 
EDEV – Показывает статистику отброшенных пакетов
 
NFS – показывает активность  NFS клиента
 
NFSD – показывает активность NFS сервера
 
SOCK – показывает используемые сокеты для IPv4
 
IP – показывает трафик IPv4 ffic
 
EIP – показывает ошибки для IPv4
 
ICMP – показывает трафик ICMPv4
 
EICMP – показывает ошибки для ICMPv4
 
TCP – показывает трафик TCPv4
 
ETCP – показывает ошибки для TCPv4
 
UDP – показывает трафик UDPv4
 
для IPv6 аналогично используется - SOCK6, IP6, EIP6, ICMP6, UDP6
 
ALL – показывает всю информацию, вывод будет очень длинным
$  sar -n DEV 1 1
Linux 3.13.0-39-generic (glpi)  25.12.2014      _x86_64_        (2 CPU)

12:34:53        IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s   %ifutil
12:34:54         eth0     37,00      0,00      3,00      0,00      0,00      0,00      0,00      0,00
12:34:54           lo      0,00      0,00      0,00      0,00      0,00      0,00      0,00      0,00

10. Вывод отчетов используя начальное время (sar -s)

Когда Вы просматриваете более ранние данные утилиты sar из файла /var/log/sa/saXX , необходимо использовать опцию -f. Вывод команды покажет Вам информацию на сегодня с 12-00 a.m. 
 
Использую опции “-s hh:mi:ss”, Вы можете задать точное время. Например,  “sar -s 10:00:00″ покажет информацию с 10 a.m. Вы можете комбинировать пцию -s c другими опциями команды.
 
Например, для вывода отчета о средней загрузки на 25-е число месяца, начиная с 10 утра, комбинируем -q и -s
$ sar -q -f /var/log/sa/sa25 -s 10:00:01
Linux 3.13.0-39-generic (glpi)  25.12.2014      _x86_64_        (2 CPU)

10:00:01 AM   runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15   blocked
10:10:01 AM         0       127      2.00      3.00      5.00         0
10:20:01 AM         0       127      2.00      3.00      5.00         0
...
11:20:01 AM         0       127      5.00      3.00      3.00         0
12:00:01 PM         0       127      4.00      2.00      1.00         0
Здесь мы не использовали опцию окончания вывода. Вы можете использовать опцию head, сделать выборку определенного кол-ва записей. Например, стартуем в 10 утра и выводим 7 строк - “head -n 10″
$ sar -q -f /var/log/sa/sa25 -s 10:00:01 | head -n 10
Linux 3.13.0-39-generic (glpi)  25.12.2014      _x86_64_        (2 CPU)

10:00:01 AM   runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15   blocked
10:10:01 AM         0       127      2.00      3.00      5.00         0
10:20:01 AM         0       127      4.00      3.00      2.00         0
10:30:01 AM         0       127      3.00      5.00      2.00         0
10:40:01 AM         0       127      4.00      2.00      1.00         2
10:50:01 AM         0       127      2.00      5.00      3.00         0
11:00:01 AM         0       127      2.00      1.00      6.00         0
11:10:01 AM         0       127      1.00      3.00      7.00         2
Мы довольно кратенько расммотрели мониторинг в Linux c помощью утилиты sar, в дальнейшем, я думаю, мы рассмотрим и другие интересные утилиты, ибо богатство Linux безгранично =)
 
Интересное на сайте: 

miniHowTo: FreeBSD OpenSSH
Поиск и удаление заблокированных файлов в LinuxПоиск и удаление заблокированных файлов в Linux

0
Голосов пока нет