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Запилен на основе этого