Настраиваем периодический сбор данных при помощи 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
