fix: logrotate for dragonfly logs (#1972)

The new logrotate settings assume that dragonfly closes a log file
once it grows to large. It never rotates file that is currently open for writing.

Specifically logrotate:

1. rotate only log files
2. skip those that are currently open by as process.
3. compresses using zstd which is more cpu efficient than gzip
4. does not truncate/create old files as 0-sized blobs - just renames them

Fixes #1935

Signed-off-by: Roman Gershman <roman@dragonflydb.io>
This commit is contained in:
Roman Gershman 2023-10-09 20:08:37 +03:00 committed by GitHub
parent 2876a9ecab
commit 6e76f8e6cc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 27 additions and 4 deletions

View File

@ -787,8 +787,11 @@ Usage: dragonfly [FLAGS]
};
absl::SetFlagsUsageConfig(config);
google::InitGoogleLogging(argv[0]);
google::SetLogFilenameExtension(".log");
MainInitGuard guard(&argc, &argv);
ParseFlagsFromEnv();
PrintBasicUsageInfo();

View File

@ -7,6 +7,6 @@ Vcs-Git: https://github.com/dragonflydb/dragonfly
Package: dragonfly
Architecture: amd64 arm64
Depends: libc6, openssl, adduser
Depends: libc6, openssl, adduser, zstd
Homepage: https://dragonflydb.io
Description: A fast in-memory store that is fully compatible with Redis™* and Memcached.

View File

@ -1,4 +1,5 @@
--pidfile=/var/run/dragonfly/dragonfly.pid
--log_dir=/var/log/dragonfly
--dir=/var/lib/dragonfly
--max_log_size=20
--version_check=true

View File

@ -1,7 +1,26 @@
/var/log/dragonfly/dragonfly* {
weekly
# installed by debhelper by convention into /etc/logrotate.d/
/var/log/dragonfly/dragonfly*.log {
daily
missingok
rotate 12
compress
compresscmd zstd
uncompresscmd unzstd
compressext .zst
notifempty
# do not create an empty file after the rotation.
nocreate
prerotate
if lsof -t $1 > /dev/null; then
# file is open. Skipping rotation."
exit 1
fi
endscript
# Possible hook to upload rotated logs to cloud storage.
postrotate
echo "TBD: POSTROTATE"
endscript
}