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