Настройка ротации логов в nextcloud

Print Friendly, PDF & Email

Задача:

Настроить ведение логов в nextcloud.

---------------------------------------------------------------

После очередной проверки сервера, выяснилось что затруднительно прочесть лог-файл размером 70Мб

root@cloud:/ # ls -lh data/ | grep log
-rw-r-----   1 www  www   7.3K Feb 24 13:54 audit.log
-rw-r-----   1 www  www     0B May  3 14:47 flow.log
-rw-r-----   1 www  www    70M May 23 14:33 nextcloud.log
-rw-r-----   1 www  www   100M Jan  7 09:04 nextcloud.log.1
-rw-r-----   1 www  www   189K Apr 27 02:20 updater.log
root@cloud:/ #

В FreeBSD за ведение логов отвечает демон syslog, а вот за их ротацию – утилита newsyslog. Демон syslog работает постоянно, и запускается вместе с системой при её старте. Утилита newsyslog – запускается по cron-у, раз в час – если не настроено иначе:

root@cloud:/etc # cat /etc/crontab | grep log
# Rotate log files every hour, if necessary.
0       *       *       *       *       root    newsyslog
root@cloud:/etc #

0 * * * * – означает, что выполнятся будет в начале каждого часа

* * * * * выполняемая команда
- - - - -
| | | | |
| | | | ----- День недели (0 - 7) (Воскресенье =0 или =7)
| | | ------- Месяц (1 - 12)
| | --------- День (1 - 31)
| ----------- Час (0 - 23)
------------- Минута (0 - 59)

Настроить ротацию логов можно при помощи файла /etc/newsyslog.conf:

root@cloud:/ # cat /etc/newsyslog.conf
# configuration file for newsyslog
# $FreeBSD: releng/12.0/usr.sbin/newsyslog/newsyslog.conf 337686 2018-08-12 13:24:53Z brd $
#
# Entries which do not specify the '/pid_file' field will cause the
# syslogd process to be signalled when that log file is rotated.  This
# action is only appropriate for log files which are written to by the
# syslogd process (ie, files listed in /etc/syslog.conf).  If there
# is no process which needs to be signalled when a given log file is
# rotated, then the entry for that file should include the 'N' flag.
#
# Note: some sites will want to select more restrictive protections than the
# defaults.  In particular, it may be desirable to switch many of the 644
# entries to 640 or 600.  For example, some sites will consider the
# contents of maillog, messages, and lpd-errs to be confidential.  In the
# future, these defaults may change to more conservative ones.
#
# logfilename          [owner:group]    mode count size when  flags [/pid_file] [sig_num]
/var/log/all.log                        600  7     *    @T00  J
/var/log/auth.log                       600  7     1000 @0101T JC
/var/log/console.log                    600  5     1000 *     J
/var/log/cron                           600  3     1000 *     JC
/var/log/daily.log                      640  7     *    @T00  JN
/var/log/debug.log                      600  7     1000 *     JC
/var/log/init.log                       644  3     1000 *     J
/var/log/kerberos.log                   600  7     1000 *     J
/var/log/maillog                        640  7     *    @T00  JC
/var/log/messages                       644  5     1000 @0101T JC
/var/log/monthly.log                    640  12    *    $M1D0 JN
/var/log/devd.log                       644  3     1000 *     JC
/var/log/security                       600  10    1000 *     JC
/var/log/utx.log                        644  3     *    @01T05 B
/var/log/weekly.log                     640  5     *    $W6D0 JN

<include> /etc/newsyslog.conf.d/*
<include> /usr/local/etc/newsyslog.conf.d/*
# Nginx logs
/var/log/nginx/*.log         root:wheel      644  20    5000  *     GZ   /var/run/nginx.pid 30
# php-fpm logs
/var/log/php-fpm.log         www:www         644  3     *     @T00  JC   /var/run/php-fpm.pid
# redis logs
/var/log/redis/redis.log     redis:redis     644  5     *     *     CZN
# RSync server logs
/var/log/rsyncd.log                          600  2     500  *     ZC
root@cloud:/ # 

нам необходимо добавить

echo '# nextcloud logs' >> /etc/newsyslog.conf
echo '/usr/local/www/nextcloud/data/*.log  www:www     640  10     500    @T00  JC' >> /etc/newsyslog.conf

Проверяем, что получилось

root@cloud:/ # cat /etc/newsyslog.conf | grep nextcloud
# nextcloud logs
/usr/local/www/nextcloud/data/nextcloud.log  www:www     640  7     *    @T00  JC
root@cloud:/ #

Запустим newsyslog в режиме verbose

root@cloud:/ # newsyslog -v
Processing /etc/newsyslog.conf
Found: <include> /etc/newsyslog.conf.d/*
Found: <include> /usr/local/etc/newsyslog.conf.d/*
Processing /etc/newsyslog.conf.d/amd.conf
Processing /etc/newsyslog.conf.d/ftp.conf
Processing /etc/newsyslog.conf.d/lpr.conf
Processing /etc/newsyslog.conf.d/opensm.conf
Processing /etc/newsyslog.conf.d/pf.conf
Processing /etc/newsyslog.conf.d/ppp.conf
Processing /etc/newsyslog.conf.d/sendmail.conf
/var/log/all.log <7J>: does not exist, skipped.
/var/log/auth.log <7J>: --> will trim at Thu Dec 31 23:00:00 2020
/var/log/console.log <5J>: does not exist, skipped.
/var/log/cron <3J>: size (Kb): 34 [1000] --> skipping
/var/log/daily.log <7J>: does not exist, skipped.
/var/log/debug.log <7J>: size (Kb): 1 [1000] --> skipping
/var/log/init.log <3J>: does not exist, skipped.
/var/log/kerberos.log <7J>: does not exist, skipped.
/var/log/maillog <7J>: --> will trim at Thu May 28 00:00:00 2020
/var/log/messages <5J>: --> will trim at Thu Dec 31 23:00:00 2020
/var/log/monthly.log <12J>: does not exist, skipped.
/var/log/devd.log <3J>: size (Kb): 1 [1000] --> skipping
/var/log/security <10J>: size (Kb): 1 [1000] --> skipping
/var/log/utx.log <3>: --> will trim at Mon Jun  1 05:00:00 2020
/var/log/weekly.log <5J>: does not exist, skipped.
/var/log/php-fpm.log <3J>: --> will trim at Thu May 28 00:00:00 2020
/var/log/redis/redis.log <5Z>: --> skipping
/var/log/rsyncd.log <2Z>: size (Kb): 6 [500] --> skipping
/mnt/da1p1/data/nextcloud.log <10J>: size (Kb): 73866 [500] --> trimming log....
Executing: /usr/bin/bzip2 -f /mnt/da1p1/data/nextcloud.log.2

Проверяем что получилось

root@cloud:/ # ls -lh /usr/local/www/nextcloud/data/ | grep log
-rw-r-----   1 www  www   7.3K Feb 24 13:54 audit.log
-rw-r-----   1 www  www     0B May  3 14:47 flow.log
-rw-r-----   1 www  www   1.7K May 27 21:03 nextcloud.log
-rw-r-----   1 www  www   474B May 27 21:00 nextcloud.log.0.bz2
-rw-r-----   1 www  www   1.4M May 27 21:00 nextcloud.log.1.bz2
-rw-r-----   1 www  www   1.5M Jan  7 09:04 nextcloud.log.2.bz2
-rw-r-----   1 www  www   1.5M Jan  7 09:04 nextcloud.log.3.bz2
-rw-r-----   1 www  www   189K Apr 27 02:20 updater.log
root@cloud:/ #

Посмотрим как пишет nextcloud логи

root@cloud:/ # head /mnt/da1p1/data/nextcloud.log
May 27 21:00:00 cloud newsyslog[86820]: logfile turned over due to size>500K
{"reqId":"neXPMDKHjtaDhU51nd","level":2,"time":"2020-05-27T19:01:10+00:00","remoteAddr":"","user":"--","app":"news","method":"","url":"--","message":"http://localhost/rss.php?f=1368 read error : Server error: `GET http://localhost/rss.php?f=1368` resulted in a `522 Origin Connection Time-out` response:\n<html>\r\n<head><title>522 Origin Connection Time-out</title></head>\r\n<body bgcolor=\"white\">\r\n<center><h1>522 Origin Conne (truncated...)\n","userAgent":"--","version":"18.0.4.2"}
{"reqId":"neXPMDKvLHjtaDhU51nd","level":2,"time":"2020-05-27T19:02:14+00:00","remoteAddr":"","user":"--","app":"news","method":"","url":"--","message":"http://localhost/blog/2447804/rss/ read error : cURL error 28: Connection timed out after 60001 milliseconds (see http://localhost/libcurl/c/libcurl-errors.html)","userAgent":"--","version":"18.0.4.2"}
{"reqId":"neXPMDKvLaDhU51nd","level":2,"time":"2020-05-27T19:02:45+00:00","remoteAddr":"","user":"--","app":"news","method":"","url":"--","message":"http://localhost/rss.php?f=123 read error : Server error: `GET http://localhost/rss.php?f=123` resulted in a `522 Origin Connection Time-out` response:\n<html>\r\n<head><title>522 Origin Connection Time-out</title></head>\r\n<body bgcolor=\"white\">\r\n<center><h1>522 Origin Conne (truncated...)\n","userAgent":"--","version":"18.0.4.2"}
{"reqId":"neXPMDKvaDhU51nd","level":2,"time":"2020-05-27T19:03:52+00:00","remoteAddr":"","user":"--","app":"news","method":"","url":"--","message":"http://localhost/blog/2447804/rss/ read error : cURL error 28: Connection timed out after 60037 milliseconds (see http://localhost/libcurl/c/libcurl-errors.html)","userAgent":"--","version":"18.0.4.2"}
{"reqId":"neXPMDKvLHjtaDhU51nd","level":2,"time":"2020-05-27T19:04:23+00:00","remoteAddr":"","user":"--","app":"news","method":"","url":"--","message":"http://localhost/rss.php?f=1368 read error : Server error: `GET http://localhost/rss.php?f=1368` resulted in a `522 Origin Connection Time-out` response:\n<html>\r\n<head><title>522 Origin Connection Time-out</title></head>\r\n<body bgcolor=\"white\">\r\n<center><h1>522 Origin Conne (truncated...)\n","userAgent":"--","version":"18.0.4.2"}
root@cloud:/ #

Логи созданные при обновлении версии имеют немного другой вид

root@cloud:/ # head /mnt/da1p1/data/updater.log
2019-05-06T19:00:36+0000 0hsiKxHTzq [info] updater cli is executed
2019-05-06T19:00:36+0000 0hsiKxHTzq [info] currentStep()
2019-05-06T19:00:36+0000 0hsiKxHTzq [info] current version: 15.0.7 build time: 2019-04-08T21:25:55+00:00 e578672704cc159694dc2cd8e77c208ae84b35d6
2019-05-06T19:00:36+0000 0hsiKxHTzq [info] getUpdateServerResponse()
2019-05-06T19:00:36+0000 0hsiKxHTzq [info] updaterServer: https://updates.nextcloud.org/updater_server/
2019-05-06T19:00:36+0000 0hsiKxHTzq [info] releaseChannel: stable
2019-05-06T19:00:36+0000 0hsiKxHTzq [info] internal version: 15.0.7.0
2019-05-06T19:00:36+0000 0hsiKxHTzq [info] updateURL: https://updates.nextcloud.org/updater_server/?version=15x0x7x0xxxstablexx2019-04-08T21%3A25%3A55%2B00%3A00+e578672704cc159694dc2cd8e77c208ae84b35d6x7x3x4
2019-05-06T19:01:44+0000 0hsiKxHTzq [info] getUpdateServerResponse response: Array
(
root@cloud:/ #

Настроить ведение логов можно в файле /usr/local/www/nextcloud/config/config.php

  • log_type – Этот параметр определяет, куда отправляются журналы Nextcloud. Есть несколько вариантов:
    • file – лог пишется в файл nextcloud.log в каталоге данных Nextcloud. Это значение по умолчанию. Место хранения можно изменит параметром logfile
    • syslog – журналы отправляются в системный журнал. Конечно демон syslog должен быть включённым.
    • errorlog – журналы отправляются в функцию PHP (error_log)
    • systemd – логи отправляются в Systemd. Для этого требуется расширение (extension) PHP “systemd”
  • logfile – путь до лог-файла, при значении log_type = file. По умолчанию используется значение [datadirectory]/nextcloud.log
  • logfilemode – права доступа на лог-файл
  • loglevel – детализация логов. Warning – это значение по умолчанию. Допустимые значения:
    • 0 = Debug – все действия; наиболее подробное ведение журнала.
    • 1 = Info – действия, такие как входы пользователей и действия с файлами, а также предупреждения, ошибки и фатальные ошибки.
    • 2 = Warning – операции выполняются успешно, но с предупреждениями о потенциальных проблемах, а также об ошибках и фатальных ошибках
    • 3 = Error – операция завершается неудачно, но другие службы и операции продолжаются, плюс фатальные ошибки.
    • 4 = Fatal – только критические ошибки.
  • syslog_tag – при значении log_type = syslog или systemd. Записи nextcloud можно помечать уникальным тегом. Значение по умолчанию – “Nextcloud”.
  • log.condition – Этот параметр позволяет отлаживать определенные запросы, пользователей или приложения. Nextcloud может автоматически изменять детализацию лога на Debug, при выполнении одного из выбранных условий.
  • logdateformat – формат даты в логах (PHP.date formatting). По умолчанию используется ISO 8601
  • logtimezone – Временная зона
  • log_query – активирует добавление всех запросов и параметров базы данных в файл журнала. Рекомендуется использовать только для отладки.
  • log_rotate_size – Включает ротацию логов и ограничивает общий размер файлов журналов. Иначе говоря, это максимальный размер лог-файла в байтах. (По умолчанию 100 МБ = 104857600 байт = 100 * 1024 * 1024 байт)

Пример конфига

root@cloud:/ # cat /usr/local/www/nextcloud/config/config.php
<?php
$CONFIG = array (
  'instanceid' => 'ocf5bcvbnegso4j5',
  'passwordsalt' => 'jZOv+Tzrty1Ze1iJP17utOQEN',
  'secret' => 'dcQWpqM/l9TIg8dfgh25dvTzSVN/brEuNa5ucGKAYDvh2O',
  'trusted_domains' =>
  array (
    0 => 'nc.local',
    1 => 'nextcloud.ddns.net',
    2 => '192.168.177.130',
  ),
  'memcache.local' => '\\OC\\Memcache\\APCu',
  'memcache.distributed' => '\\OC\\Memcache\\Redis',
  'filelocking.enabled' => 'true',
  'memcache.locking' => '\\OC\\Memcache\\Redis',
  'redis' =>
  array (
    'host' => '/tmp/redis.sock',
    'port' => 0,
    'dbindex' => 0,
    'password' => '5e49d5aa132cc5e855hjd339ba6c62c295730dbac10',
    'timeout' => 1.5,
  ),
  'datadirectory' => '/usr/local/www/nextcloud/data',
  'dbtype' => 'mysql',
  'version' => '18.0.4.2',
  'overwrite.cli.url' => 'https://nextcloud.ddns.net',
  'dbname' => 'nextcloud_dbname',
  'dbhost' => 'localhost_dbhost',
  'dbport' => '',
  'dbtableprefix' => 'oc_',
  'mysql.utf8mb4' => true,
  'dbuser' => 'nextcloud_dbuser',
  'dbpassword' => 'nextcloud_dbpassword',
  'installed' => true,
  'updater.release.channel' => 'stable',
  'maintenance' => false,
  'log_type' => 'file',
  'logfile' => '/usr/local/www/nextcloud/data/nextcloud.log',
  'logfilemode' => 0640,
  'loglevel' => 3,
  'syslog_tag' => 'Nextcloud',
  'log.condition' => [
        'shared_secret' => '57b58edb6637fe3059b3595cf9c41b9',
        'users' => ['sample-user'],
        'apps' => ['files'],
  ],
  'logdateformat' => 'F d, Y H:i:s',
  'logtimezone' => 'Europe/Moscow',
  'log_query' => false,
  'log_rotate_size' => 3145728‬,
  'theme' => '',
  'twofactor_enforced' => 'false',
  'twofactor_enforced_groups' =>
  array (
  ),
  'twofactor_enforced_excluded_groups' =>
  array (
  ),
);
root@cloud:/ #

в итоге существует два варианта ротации логов

  1. nextcloud
  2. newsyslog

Помогла статья? Есть возможность отблагодарить автора

Читайте также:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *