Pupergrep или tail -f для веб-разработчиков
В данный момент практически все прогеры работают через git, пушат и сразу код попадает в предпродакшн, который реализуется хуками. И у них соответственно отсутствует возможность смотреть логи, а иногда при пуше что-то отваливается и они каждый раз дергают меня. Дабы избавиться от этого, необходимо было найти какой-то аналог
Нужен только
Второй
Далее все согласно руководству на сайте, конфиг прост как пробка
pupergrep.js
Ничего умней придумать не смог кроме как пройтись
Все решение уместилось в одну строку:
Приобретает вид
Далее необходимо было добавить авторизацию и https, для этого на фронт поставил
/etc/nginx/conf.d/log.example.com.conf
Ну и дабы совсем было кошерно запилил скрипт в
/etc/init.d/pupergrep
tail -f через веб. Гугление показало 2 варианта: Pupergrep и Log.io. Последний вроде и хорош, но завести нормально не удалось, но тут скорее руки крюки. На сайте, как по мне, убогая дока, в итоге завел, а он показывал только один лог access, когда error не хотел выводить, обратная ситуация с pupergrep который завелся сразу.Нужен только
nodejs и npm, первый ставил отсюда.apt-get install nodejs-legacyВторой
wget npmjs.org/install.sh && sh install.shДалее все согласно руководству на сайте, конфиг прост как пробка
pupergrep.js
(function() {
var PuperGrep = require("pupergrep"),
puper = new PuperGrep();
puper.add("dev.example.com-CustomLog", "/var/log/apache2/dev.example.com-access.log", "ansi");
puper.add("dev.example.com-ErrorLog", "/var/log/apache2/dev.example.com-error.log", "ansi");
puper.listen(8888, "127.0.0.1");
})();
После того как завелось с одним хостом надо было придумать как выковырять из конфигов хостов адреса и логи, дабы не заниматься копипастом.Ничего умней придумать не смог кроме как пройтись
egrep'ом и далее пропустить нужные строки через sedВсе решение уместилось в одну строку:
egrep -r ErrorLog /etc/apache2/sites-enabled/ | sed 's/\/etc\/apache2\/sites-enabled\//puper.add("/g' | sed 's/: /-/g' | sed 's/ErrorLog/ErrorLog",/g' | sed 's/\/var/"\/var/g' | sed 's/\.log/\.log", "ansi");/g'
В итоге строка видаErrorLog /var/log/apache2/dev.example.com-error.logПриобретает вид
puper.add("dev.example.com-ErrorLog", "/var/log/apache2/dev.example.com-error.log", "ansi");Далее необходимо было добавить авторизацию и https, для этого на фронт поставил
nginx/etc/nginx/conf.d/log.example.com.conf
server {
listen *:443 ssl;
server_name log.example.com;
include /etc/nginx/ssl.conf;
auth_basic "closed site";
auth_basic_user_file /etc/nginx/htpasswd;
location / {
index index.html;
root /usr/local/src/node_modules/pupergrep/public;
}
location /socket.io/ {
proxy_http_version 1.1;
proxy_pass http://127.0.0.1:8888/socket.io/;
proxy_redirect off;
}
}
Ну и дабы совсем было кошерно запилил скрипт в
init.d предварительно перенес все в /usr/local/src//etc/init.d/pupergrep
#!/bin/sh
### BEGIN INIT INFO
# Provides: pupergrep
# Required-Start: $local_fs $network $syslog
# Required-Stop: $local_fs $network $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start pupergrep
### END INIT INFO
SCRIPT=/usr/local/src/pupergrep.js
PIDFILE=/var/run/pupergrep.pid
LOGFILE=/var/log/pupergrep.log
start() {
if [ -f "$PIDFILE" ] && kill -0 $(cat $PIDFILE); then
echo 'Service already running' >&2
return 1
fi
echo 'Starting service…' >&2
local CMD="node $SCRIPT &> \"$LOGFILE\" & echo \$!"
su -c "$CMD" > "$PIDFILE"
echo 'Service started' >&2
}
stop() {
if [ ! -f "$PIDFILE" ] || ! kill -0 $(cat "$PIDFILE"); then
echo 'Service not running' >&2
return 1
fi
echo 'Stopping service…' >&2
kill -15 $(cat "$PIDFILE") && rm -f "$PIDFILE"
echo 'Service stopped' >&2
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
echo "Usage: $0 {start|stop|restart}"
esac
Запилен на основе этого