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

Задача:
---------------------------------------------------------------Настроить ведение логов в 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:/ #
в итоге существует два варианта ротации логов
- nextcloud
- newsyslog

Свежие комментарии