Linux: log.io – мониторинг логов через веб

Автор: | 11/11/2014
 

linux_logoПеревод статьи отсюда>>>, с небольшими дополнениями.

Установка выполняется на CentOS 6.5.

Для установки потребуется репозиторий Epel.

Устанавливаем Node.js и NPM:

# yum -y install npm nodejs

Далее, с помощью NPM устанавливаем сам Log.io:

# npm install -g log.io
npm http GET https://registry.npmjs.org/log.io
npm http 200 https://registry.npmjs.org/log.io
npm http GET https://registry.npmjs.org/log.io/-/log.io-0.3.4.tgz
npm http 200 https://registry.npmjs.org/log.io/-/log.io-0.3.4.tgz
...

Файлы конфигурации Log.io помещаются в директорию пользователя, который запустил NPM.

# cd ~/.log.io/
# ls -l
total 12
-rw-r--r-- 1 root root 222 Nov  9 11:13 harvester.conf
-rw-r--r-- 1 root root  54 Nov  9 11:13 log_server.conf
-rw-r--r-- 1 root root 510 Nov  9 11:13 web_server.conf

Как работает Log.io.

  • harvester.conf – утилита /usr/bin/log.io-harvester наблюдает за файлами, указанными в файле harvester.conf, и пересылает данные через сокет локальному или удалённому серверу Log.io;
  • log_server.conf – сервер /usr/bin/log.io-server прослушивает все сетевые интерфейсы (если не указан конкретный в файле конфигурации), и ожидает сообщений от локального или удалённого harverster;
  • web_server.conf – сервер Log.io ожидает обращений веб-клиентов на порт 28778, и передаёт им данные.

Сначала – открываем для редактирования файл harvester.conf. По умолчанию – в нём описан мониторинг только файлов сервер Apache HTTP.

Замените строку:

nodeName: "application_server"

на имя вашего хоста:

nodeName: "cent_1"

И в блоке logStreams добавьте файлы логов, которые необходимо наблюдать (обращайте внимание на запятые):

exports.config = {
  nodeName: "cent_1",
  logStreams: {
    nginx: [
      "/var/log/nginx/project-access.log",
      "/var/log/nginx/project-error.log"
    ],
    messages: [
      "/var/log/messages"
    ],
    secure: [
      "/var/log/secure"
    ]
  },
  server: {
    host: '127.0.0.1',
    port: 28777
  }
}

Так как мы будем использовать только локальный Log.io – замените host на 127.0.0.1.

Пример файла конфигурации с реального сервера:

exports.config = {
  nodeName: "venti",
  logStreams: {
    NGINX: [
      "/var/log/nginx/postfixadmin.domain.org.ua-access.log",
      "/var/log/nginx/webmail.domain.org.ua-access.log",
      "/var/log/nginx/webmail.domain.org.ua-error.log",
    ],
    NGINXRtfm: [
      "/var/log/nginx/rtfm.co.ua-access.log",
      "/var/log/nginx/rtfm.co.ua-error.log",
      "/var/log/nginx/rtfm.co.ua-slow.log",
    ],
    messages: [
      "/var/log/messages"
    ],
    secure: [
      "/var/log/secure"
    ],
    cron: [
      "/var/log/cron"
    ],
    MariaDB: [
      "/var/log/mysql.log",
      "/var/log/mysql-slow-query.log"
    ],
    Exim: [
      "/var/log/exim/main.log",
    ]
  },
  server: {
    host: '127.0.0.1',
    port: 28777
  }
}

То же самое сделаем для log_server.conf:

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

Для ограничения доступа к данным – зададим логин и пароль в файле web_server.conf.

Меняем:

  /*
  // Enable HTTP Basic Authentication
  auth: {
    user: "admin",
    pass: "1234"
  },
  */

на:

  // Enable HTTP Basic Authentication
  auth: {
    user: "root",
    pass: "p@ssw0rd"
  },

Открываем порт 28778 в IPTABLES.

Проверяем список правил INPUT:

# iptables -L -n --line-numbers -v
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp dpt:1194
2      242 22659 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
3        0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0
4        1    56 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
5        1    40 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
6       32  2078 LOG        all  --  *      *       0.0.0.0/0            0.0.0.0/0           LOG flags 0 level 4
7       32  2078 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Добавляем строку с номером 7:

# iptables -I INPUT 7 -p tcp --dport 28778 -j ACCEPT
# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]

Запускаем harvester и сам Log.io:

# log.io-server &
[1] 2648
# log.io-harvester &
[2] 2660

После чего открываем браузер, и указываем данные доступа, которые мы задали в файле web_server.conf:

logio_1

Слева отмечаем логи, вывод которых мы хотим наблюдать – и смотрим:

logio_2

logio_3

Что бы остановить его – выполняем:

# pkill node

Для управления Log.io – создадим скрипт /usr/local/bin/log.io:

#!/bin/bash

start() {
    echo "Starting log.io process..."
    /usr/bin/log.io-server &
    /usr/bin/log.io-harvester &
}

stop() {
    echo "Stopping io-log process..."
    pkill node
}

status() {
    echo "Status io-log process..."
    netstat -tlp | grep node
}

case "$1" in
    start)
        start;;
    stop)
        stop;;
    status)
        status;;
    *)
        echo "Usage: start|stop|status";;
esac
# chmod +x /usr/local/bin/log.io

Проверяем его работу:

# # log.io statuss
Status io-log process...
tcp        0      0 localhost:28777             *:*                         LISTEN      2648/node
tcp        0      0 *:28778                     *:*                         LISTEN      2648/node
# log.io stop
Stopping io-log process...
# log.io start
Starting log.io process...