Сбор основных показателей сервера Ubuntu

Для выполнения данной операции используется стандартная утилита top.

Выполняем crontab -e и добавляем следующую строку:

*/1 * * * * top -bi -n1 >> top.log

Указанная инструкция означает, что выполнять нужно каждую минуту команду top -bi -n1

Результат выполнения 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

csvplot.com
Print Friendly, PDF & Email

Добавить комментарий