Для выполнения данной операции используется стандартная утилита top.
Выполняем crontab -e и добавляем следующую строку:
*/1 * * * * top -bi -n1 >> top.log
Указанная инструкция означает, что выполнять нужно каждую минуту команду top -bi -n1
Далее после сбора данных, требуется прочитать информацию при помощи скрипта написанного для nodejs:
/** * Простое применение: node script.js /var/data.log * Полный синтаксис: node script.js /var/data.log /var/data.log.csv ; * Версия: 1.0 */ const SEPARATE = process.argv[4] || ','; const fs = require('fs'); var filePath = process.argv[2]; if(fs.existsSync(filePath)) { var data = fs.readFileSync(filePath).toString(); var output = 'time' + SEPARATE + 'la1' + SEPARATE + 'la2' + SEPARATE + 'la3' + SEPARATE + 'tasks' + SEPARATE + 'used\n'; var lines = data.split('\n'); var la1 = ''; var la2 = ''; var la3 = ''; var tasks = ''; var mem = ''; var time = ''; for(var i in lines) { var line = lines[i]; var load_average = 'load average:'; if(line.indexOf(load_average) >= 0) { var items = line.split(',')[0].split(' '); time = items[4] + ' day ' + items[2]; var i = line.indexOf(load_average); var data = line.substr(i + load_average.length, line.length - (i + load_average.length)).trim().split(','); la1 = data[0].trim(); la2 = data[1].trim(); la3 = data[2].trim(); } var _tasks = 'Tasks:' if(line.indexOf(_tasks) >= 0) { var i = line.indexOf(_tasks); var data = line.substr(i + _tasks.length, line.indexOf('total') - (i + _tasks.length)).trim(); tasks = data; } var _mem = 'KiB Mem :' if(line.indexOf(_mem) >= 0) { var data = line.split(','); mem = data[2].trim().split(' ')[0]; output += time + SEPARATE + la1 + SEPARATE + la2 + SEPARATE + la3 + SEPARATE + tasks + SEPARATE + mem + '\n'; } } output = output.trimEnd(); fs.writeFileSync(process.argv[3] || (process.argv[2] + '.csv'), output); }
Пример использования:
node top.js /var/data.log /var/output.csv ,
Где:
- top.js — имя скрипта
- /var/data.log — путь к файлу, который был сформирован командой из crontab
- /var/output.csv — файл куда сохранить преобразованные данные
- , (запятая) — разделитель для CSV
Далее распарсив данные можно воспользоваться интернет ресурсом CSV Plot — Online CSV plots для построения отчета на основе CSV