Настраиваем периодический сбор данных при помощи psql:
sudo su - postgres crontab -e # добавляем следующий код */15 * * * * psql -U postgres -d postgres -c "SELECT datname, xact_commit, now(), numbackends FROM pg_stat_database where datname = 'cic-release-db' or datname = 'hangfire'" >> /var/lib/postgresql/pg_stat_database.log
Примечание: имена таблиц в pg_stat_database указывать свои.
Далее форматируем сохраненные данные в csv:
// sudo su - postgres
//crontab -e
//# добавляем следующий код
//*/15 * * * * psql -U postgres -d postgres -c "SELECT datname, xact_commit, now(), numbackends FROM pg_stat_database where datname = 'cic-release-db' or datname = 'hangfire'" >> /var/lib/postgresql/pg_stat_database.log
/**
 * Простое применение: 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');
const pth = require('path');
var filePath = process.argv[2];
if(fs.existsSync(filePath)) {
    var data = fs.readFileSync(filePath).toString();
    var dbOut = {};
    var output = 'datname' + SEPARATE + 'xact_commit' + SEPARATE + 'now' + SEPARATE + 'numbackends\n';
    var lines = data.split('\n');
    for(var i in lines.slice(2, lines.length)) {
        var line = lines[i];
        if(line.trim() == '' || line.indexOf('(') >=0 || line.indexOf('datname') >= 0 || line.indexOf('-----') >= 0)
            continue;
        if(line) {
            var data = line.split('|');
            var name = data[0].trim();
            if(!dbOut[name]) {
                dbOut[name] = '';
            }
            dbOut[name] += data[0].trim() + SEPARATE + data[1].trim() + SEPARATE + data[2].trim() + SEPARATE + data[3].trim() + '\n';
        }
    }
    for(var i in dbOut) {
        var str = output + dbOut[i].trimEnd();
        var file = (process.argv[3] || (process.argv[2] + '.csv'));
        var dir = pth.dirname(file);
        var name = pth.basename(file);
        fs.writeFileSync(pth.join(dir, i + '_' + name), str);
    }
}
На вход принимается два параметра:
- путь к файлу для обработки
 - файл куда требуется сохранить информацию
 - разделитель для CSV
 
Пример:
psql.js data.log output.csv ,
Далее распарсив данные можно воспользоваться интернет ресурсом CSV Plot — Online CSV plots для построения отчета на основе CSV
