FreeBSD - чтение логов в броузере средствами log.io

Появилась задача - дать доступ для чтения логов (журналов системы) для субъекта, при этом максимально ограничив его полномочия в системе. Сначала думал дать доступ по SSH и вместо bash при авторизации запускать простое приложение на Pytnon, использовав библиотеку xmenu.
Но потом наткнулся на клиент-серверное приложение log.io, написанное на node.js, позволяющее читать произвольные логи в вашем броузере в режиме реального времени. По этой ссылке можно попробовать log.io в работе - выглядит здорово и удобно.

Установка log.io

portmaster www/npm
npm install -g node-gyp
npm install -g log.io

Настройка log.io

Требования следующие:

  • возможность читать логи ISPmanager, BILLmanager
  • для чтения логов требуется аутентификация пользователя

/root/.log.io/harvester.conf

exports.config = {
  nodeName: "XXX",
  logStreams: {
    ispmgr: [
      "/usr/local/ispmgr/var/ispmgr.log"
    ],
    billmgr: [
      "/usr/local/ispmgr/var/billmgr.log"
    ]
  },
  server: {
    host: '127.0.0.1',
    port: 28777
  }
}

/root/.log.io/log_server.conf

exports.config = {
  host: '127.0.0.1',
  port: 28777
}

/root/.log.io/web_server.conf

exports.config = {
  host: '127.0.0.1',
  port: 1111
}

Создадим скрипт запуска log.io

chmod 755 /usr/local/etc/rc.d/log_io

/usr/local/etc/rc.d/log_io

#!/bin/sh
# PROVIDE: log_io
# REQUIRE: LOGIN
# KEYWORD: SHUTDOWN
#
# Add the following lines to /etc/rc.conf to enable log.io-server and log.io-harvester at startup
# log_io (bool): Set to "NO" by default.
#                Set it to "YES" to enable log.io-server and log.io-harvester

. /etc/rc.subr

name="log_io"
rcvar=`set_rcvar`

load_rc_config $name

: ${log_io_enable:=NO}

start_cmd="${name}_start"
stop_cmd="${name}_stop"


log_io_start()
{
echo "Starting log.io-server."
/usr/local/bin/log.io-server 2>&1 >/dev/null &
echo "Starting log.io-harvester."
/usr/local/bin/log.io-harvester 2>&1 >/dev/null &
}

log_io_stop()
{
echo "Stoping log.io-server."
echo "Stoping log.io-harvester."
/usr/bin/killall node 2>&1 >/dev/null
}
run_rc_command "$1"

Запишем в автозагрузку и запустим log.io

echo 'log_io_enable="YES"' >> /etc/rc.conf
service log_io start

Настройка аутентификации

Из примеров конфигурации log.io я сделал вывод, что аутентификация в log.io реализована, но к сожалению, мне не удалось настроить данный пункт. По данной проблеме заведена issue.
Поэтому было решено фронт-ендом поставить nginx с настроенной аутентификацией и проксировать все запросы авторизованных пользователей на log.io.

Установка nginx

portmaster www/nginx

Настройка nginx

Посадим nginx на порт 9999 и настроим базовую аутентификацию в nginx.conf

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       XX:9999;
        server_name  XXX;

        charset utf-8;

        location / {
                auth_basic           "restricted access to log.io";
                auth_basic_user_file /usr/local/etc/nginx/htpasswd;
                proxy_pass   http://127.0.0.1:1111/;
        }
    }
}

Создадим пользователя для доступа к log.io

htpasswd -c /usr/local/etc/nginx/htpasswd имя
chgrp www /usr/local/etc/nginx/htpasswd
chmod 640 /usr/local/etc/nginx/htpasswd

Запишем в автозагрузку и запустим nginx

echo 'nginx_enable="YES"' >> /etc/rc,.conf
service nginx start

Результат

Чтение логов доступно по адресу http://XX:9999/

Ссылки

Комментарии

 
blog/2013/05/14-freebsd_-_чтение_логов_в_броузере_средствами_log.io.txt · Последние изменения: 2013/05/14 11:43 — Антон Бугреев · []