Goaccess: в режиме реального времени с несколькими журналами

Созданный на 23 дек. 2016  ·  3Комментарии  ·  Источник: allinurl/goaccess

Всем привет,

Есть ли способ иметь режим реального времени с журналом в нескольких файлах (ротация журналов), например, access.log.0, access.log.1, ...? Я использую nginx, но это не относится к нему и должно быть общей проблемой.

Это легко без реального времени, так как мы можем просто агрегировать весь журнал и запустить программу на нем.

Проблема в том, что если я просто использую -f access.log.0, у меня не будет моих старых данных (и я не уверен, что при выполнении ротации журнала он сохранит текущие данные?). Или, если я перезапущу goaccess, я потеряю старые данные.

Один из способов, который я нашел, состоял в том, чтобы загрузить агрегацию старых файлов с --keep-db, а затем запустить goaccess с --read-from-disk и --keep-db, но если я перезапущу его несколько раз в один и тот же день, данные из acess.log.0 повторно считываются и сохраняются несколько раз. Так что все еще не решение.

Другой способ - постоянно запускать внешнюю программу, которая берет все старые файлы и следит за текущим. Но это кажется немного лишним.

Спасибо,
Том

duplicate enhancement

Самый полезный комментарий

Я отправил фиксацию , которая позволяет выводить статистику в реальном времени из потока или незакрытого STDIN, т. е. tail -f, а также анализировать несколько журналов в режиме реального времени:

goaccess --log-format=COMBINED access.log access.log.1

или

tail -f access.log | goaccess --log-format=COMBINED -

или даже

tail -f access.log | goaccess --log-format=COMBINED -o report.html --real-time-html -

Это также открывает возможность фильтрации данных в реальном времени из канала, например:

tail -f access.log | grep -i --line-buffered 'firefox' | goaccess --log-format=COMBINED -

Следует отметить, что tail -f будет держать канал открытым, даже если goaccess уже вышел. Например, tail -f syslog | grep -q 'cron' tail завершится на SIGPIPE, однако он получит только SIGPIPE до тех пор, пока в файл tail'а не будет записан лишний байт. Однако SIGTERM, SIGINT должен нормально закрыть хвост.

Не стесняйтесь собирать из мастера , чтобы проверить это, иначе он будет удален в следующем выпуске. Спасибо.

Все 3 Комментарий

В настоящее время нет возможности использовать функции реального времени при передаче нескольких файлов журналов. Это будет рассмотрено в #428 и #459. Как вы сказали, обходным путем было бы собрать несколько журналов, добавить их в новый файл журнала и передать его в GoAccess.

Однако просто для того, чтобы прояснить ротацию журналов, GoAccess отобразит содержимое нового файла журнала, как в случае tail -F .

Ok ! Ждет его.

Тем временем для людей с такой же проблемой я нашел обходной путь. Мой служебный скрипт содержит первую строчку для разбора старых файлов и сохранения их в БД, а вторая запускает goaccess в реальном времени:

zcat /var/log/nginx/access.log*gz | goaccess -p /etc/goaccess.conf -a -o /dev/null --keep-db-files
goaccess -p /etc/goaccess.conf -f /var/log/nginx/access.log --real-time-html -a -o /usr/share/nginx/html/goaccess.html --load-from-disk

С помощью этого метода я могу перезапустить службу (или перезагрузить) без двойного разбора, и в реальном времени тоже работает со старыми данными.

Я отправил фиксацию , которая позволяет выводить статистику в реальном времени из потока или незакрытого STDIN, т. е. tail -f, а также анализировать несколько журналов в режиме реального времени:

goaccess --log-format=COMBINED access.log access.log.1

или

tail -f access.log | goaccess --log-format=COMBINED -

или даже

tail -f access.log | goaccess --log-format=COMBINED -o report.html --real-time-html -

Это также открывает возможность фильтрации данных в реальном времени из канала, например:

tail -f access.log | grep -i --line-buffered 'firefox' | goaccess --log-format=COMBINED -

Следует отметить, что tail -f будет держать канал открытым, даже если goaccess уже вышел. Например, tail -f syslog | grep -q 'cron' tail завершится на SIGPIPE, однако он получит только SIGPIPE до тех пор, пока в файл tail'а не будет записан лишний байт. Однако SIGTERM, SIGINT должен нормально закрыть хвост.

Не стесняйтесь собирать из мастера , чтобы проверить это, иначе он будет удален в следующем выпуске. Спасибо.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги