collect logs using a sudo script
docker logs can only be read by root
This commit is contained in:
@@ -7,53 +7,23 @@
|
||||
// !! No console.log() allowed
|
||||
// !! Do not set DEBUG
|
||||
|
||||
var supervisor = require('supervisord-eventlistener'),
|
||||
var assert = require('assert'),
|
||||
mailer = require('./src/mailer.js'),
|
||||
safe = require('safetydance'),
|
||||
assert = require('assert'),
|
||||
exec = require('child_process').exec,
|
||||
util = require('util'),
|
||||
mailer = require('./src/mailer.js');
|
||||
supervisor = require('supervisord-eventlistener'),
|
||||
path = require('path'),
|
||||
util = require('util');
|
||||
|
||||
var gLastNotifyTime = {};
|
||||
var gCooldownTime = 1000 * 60 * 5; // 5 min
|
||||
var COLLECT_LOGS_CMD = path.join(__dirname, 'src/scripts/collectlogs.sh');
|
||||
|
||||
function collectLogs(program, callback) {
|
||||
assert.strictEqual(typeof program, 'string');
|
||||
assert.strictEqual(typeof callback, 'function');
|
||||
|
||||
var logFilePath = util.format('/var/log/supervisor/%s.log', program);
|
||||
|
||||
var boxLogData = safe.fs.readFileSync(logFilePath, 'utf-8');
|
||||
if (boxLogData === null) return callback(safe.error);
|
||||
var boxLogLines = boxLogData.split('\n').slice(-100);
|
||||
|
||||
var dockerLogPath = '/var/log/upstart/docker.log';
|
||||
|
||||
var dockerLogData = safe.fs.readFileSync(dockerLogPath, 'utf-8');
|
||||
if (dockerLogData === null) return callback(safe.error);
|
||||
var dockerLogLines = dockerLogData.split('\n').slice(-100);
|
||||
|
||||
exec('dmesg', function (error, stdout /*, stderr */) {
|
||||
if (error) console.error(error);
|
||||
|
||||
var lines = stdout.split('\n');
|
||||
var dmesgLogLines = lines.slice(-100);
|
||||
|
||||
var result = '';
|
||||
result += program + '.log\n';
|
||||
result += '-------------------------------------\n';
|
||||
result += boxLogLines.join('\n');
|
||||
result += '\n\n';
|
||||
result += 'dmesg\n';
|
||||
result += '-------------------------------------\n';
|
||||
result += dmesgLogLines.join('\n');
|
||||
result += '\n\n';
|
||||
result += 'docker\n';
|
||||
result += '-------------------------------------\n';
|
||||
result += dockerLogLines.join('\n');
|
||||
|
||||
callback(null, result);
|
||||
});
|
||||
var logs = safe.child_process.execSync('sudo ' + COLLECT_LOGS_CMD + ' ' + program, { encoding: 'utf8' });
|
||||
callback(null, logs);
|
||||
}
|
||||
|
||||
supervisor.on('PROCESS_STATE_EXITED', function (headers, data) {
|
||||
|
||||
@@ -24,3 +24,6 @@ yellowtent ALL=(root) NOPASSWD: /home/yellowtent/box/src/scripts/reloadcollectd.
|
||||
|
||||
Defaults!/home/yellowtent/box/src/scripts/backupswap.sh env_keep="HOME BOX_ENV"
|
||||
yellowtent ALL=(root) NOPASSWD: /home/yellowtent/box/src/scripts/backupswap.sh
|
||||
|
||||
Defaults!/home/yellowtent/box/src/scripts/collectlogs.sh env_keep="HOME BOX_ENV"
|
||||
yellowtent ALL=(root) NOPASSWD: /home/yellowtent/box/src/scripts/collectlogs.sh
|
||||
|
||||
39
src/scripts/collectlogs.sh
Executable file
39
src/scripts/collectlogs.sh
Executable file
@@ -0,0 +1,39 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -eu -o pipefail
|
||||
|
||||
if [[ $EUID -ne 0 ]]; then
|
||||
echo "This script should be run as root." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ $# == 1 && "$1" == "--check" ]]; then
|
||||
echo "OK"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [ $# -lt 1 ]; then
|
||||
echo "Usage: collectlogs.sh <program>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
readonly program_name=$1
|
||||
|
||||
echo "${program_name}.log"
|
||||
echo "-------------------"
|
||||
tail --lines=100 /var/log/supervisor/${program_name}.log
|
||||
echo
|
||||
echo
|
||||
echo "dmesg"
|
||||
echo "-----"
|
||||
dmesg | tail --lines=100
|
||||
echo
|
||||
echo
|
||||
echo "docker"
|
||||
echo "------"
|
||||
tail --lines=100 /var/log/upstart/docker.log
|
||||
echo
|
||||
echo
|
||||
|
||||
|
||||
|
||||
@@ -16,6 +16,7 @@ scripts=("${SOURCE_DIR}/scripts/rmappdir.sh" \
|
||||
"${SOURCE_DIR}/scripts/restoreapp.sh" \
|
||||
"${SOURCE_DIR}/scripts/reboot.sh" \
|
||||
"${SOURCE_DIR}/scripts/backupswap.sh" \
|
||||
"${SOURCE_DIR}/scripts/collectlogs.sh" \
|
||||
"${SOURCE_DIR}/scripts/reloadcollectd.sh")
|
||||
|
||||
for script in "${scripts[@]}"; do
|
||||
|
||||
Reference in New Issue
Block a user