Ghi log là một phần không thể thiếu đối với bất kì hệ thống nào. Quá trình này giúp theo dõi tình trạng hoạt động và đo lường hiệu năng của hệ thống, cũng như phát hiện được các lỗi tiềm ẩn hoặc bị bỏ sót trước đó. Trong bài viết hướng dẫn về cách quản lý Logfiles bằng Logrotate trên Ubuntu 20.04 này, Vietnix sẽ giới thiệu tới bạn cách ghi log hiệu quả và nhanh chóng bằng Logrotate, cùng tìm hiểu ngay.
Giới thiệu về Logrotate
Logrotate là một tiện ích của hệ thống giúp người dùng quản lý việc tự động rotate và nén các log file. Nếu các file log không được rotate, nén và xử lí định kỳ thì chúng có thể chiếm dụng toàn bộ dung lượng ổ đĩa trên hệ thống.
Logrotate được mặc định cài đặt trên Ubuntu 20.04 và được thiết lập để xử lý log rotation cần thiết cho các packages đã cài, bao gồm rsyslog
hay trình xử lý log hệ thống. Trong bài viết này, bạn sẽ khám phá cấu hình Logrotate mặc định và thực hiện thiết lập log rotation cho một ứng dụng tùy chỉnh.
Yêu cầu tiên quyết để cách quản lý Logfiles bằng Logrotate trên Ubuntu 20.04 được thực hiện
- Bạn cần sở hữu máy chủ Ubuntu 20.04, với người dùng không phải root đã được cấp quyền
sudo
. - Logrotate đã được cài đặt sẵn. Các bước thực hiện của hướng dẫn này vẫn chính xác, miễn là phiên bản Logrotate của bạn giống như của Ubuntu 20.04.
- Đăng nhập vào máy chủ của bạn với tư cách là người dùng có quyền
sudo
để bắt đầu.
Các bước thực hiện
Logrotate là một công cụ mạnh mẽ để quản lý logfiles trên Ubuntu 20.04. Nó giúp tối ưu hóa không gian đĩa lưu trữ, tự động hóa quy trình quản lý logfiles và bảo vệ thông tin trên hệ thống của bạn. Ngoài ra, nếu bạn đang có nhu cầu sử dụng dịch vụ VPS để phát triển website hay ứng dụng thì có thể tham khảo dịch vụ VPS tốc độ cao tại Vietnix.
Hiện tại Vietnix đang cung cấp các gói dịch vụ thuê máy chủ ảo (VPS) tốc độ cao, cấu hình đa dạng và nhiều mức giá khác nhau gồm: VPS Giá Rẻ, VPS Phổ Thông, VPS Cao Cấp, VPS GPU và VPS NVMe.
Liên hệ Vietnix để được tư vấn gói VPS phù hợp với nhu cầu nhé!
Bước 1: Kiểm tra phiên bản Logrotate
Logrotate sẽ được cài đặt mặc định trên Ubuntu. Tuy nhiên, nếu bạn muốn tự mình cài đặt thì hãy chạy các lệnh sau để cập nhật danh sách packages và truy xuất logrotate
:
sudo apt update
sudo apt install logrotate
Nếu bạn đang sử dụng máy chủ không phải Ubuntu, trước tiên hãy đảm bảo rằng Logrotate đã được cài đặt bằng cách kiểm tra thông tin về phiên bản hiện tại:
logrotate --version
Output
logrotate 3.14.0
Default mail command: /usr/bin/mail
Default compress command: /bin/gzip
Default uncompress command: /bin/gunzip
Default compress extension: .gz
Default state file path: /var/lib/logrotate/status
ACL support: yes
SELinux support: yes
Nếu Logrotate được cài đặt nhưng ở phiên bản quá cũ thì bạn có thể sẽ gặp rắc rối ở một số bước trong bài hướng dẫn dưới đây. Hãy tham khảo document về phiên bản Logrotate cụ thể trên máy của bạn bằng lệnh man
:
man logrotate
Ngoài ra, bạn cũng có thể tham khảo trên trang document chính thức của Logrotate. Tiếp theo, bạn sẽ thiết lập cấu hình mặc định của Logrotate trên Ubuntu.
Bước 2: Tìm hiểu về cấu hình của Logrotate
Thông tin cấu hình của logrotate có thể được tìm thấy ở hai nơi trên Ubuntu:
/etc/logrotate.conf
: Tệp này chứa một số cài đặt mặc định và thiết lập rotation cho một số logs không thuộc sở hữu của bất kỳ hệ thống packages nào. Tệp này cũng sử dụng câu lệnhinclude
để lấy cấu hình từ các tệp khác trong thư mục/etc/logrotate.d
./etc/logrotate.d/
: Đây là nơi đặt cấu hình Logrotation của bất cứ packages đã cài đặt nào cần tới sự trợ giúp của log rotation. Trên bản cài đặt tiêu chuẩn, bạn phải có các tệp tương ứng với các công cụ cốt lõi của hệ thống nhưapt
,dpkg
,rsyslog
, v.v.
Theo mặc định, logrotate.conf
là nơi chứa cấu hình của log rotations theo tuần, với các log files thuộc quyền sở hữu của người dùng root và nhóm syslog. Trong cùng thời điểm sẽ có bốn log files được giữ (rotate 4
) và các log files mới chỉ được tạo ra sau khi tệp hiện tại được rotate (create
).
Bạn hãy xem tệp cấu hình Logrotate của package trong /etc/logrotate.d
. cat
tệp cho package apt
:
cat /etc/logrotate.d/apt
Output
/var/log/apt/term.log {
rotate 12
monthly
compress
missingok
notifempty
}
/var/log/apt/history.log {
rotate 12
monthly
compress
missingok
notifempty
}
Tệp này chứa cấu hình cho hai log files khác nhau trong thư mục /var/log/apt/
: term.log
và history.log
. Cả hai đều có những tùy chọn giống nhau. Bất cứ tùy chọn nào không được thiết lập trong các block cấu hình này sẽ kế thừa giá trị mặc định hoặc giá trị đã được thiết lập trong /etc/logrotate.conf
. Đồng thời, mọi tùy chọn cài đặt trong tệp logrotate sẽ ghi đè giá trị mặc định của logrotate (được cấu hình trong /etc/logrotate.conf
).
Các tùy chọn được đặt cho apt
logs mà bạn cần chú ý là:
rotate 12
: Giữ mười hai log files cũ. Điều này mặc định sẽ ghi đè lênrotate 4
.monthly
: Luân phiên mỗi tháng một lần. Điều này mặc định sẽ ghi đè lênweekly
.compress
: Nén các tệp đã được rotate. Quá trình này sử dụnggzip
theo mặc định và tạo thành các tệp có đuôi kết thúc bằng.gz
sau khi nén xong. Lệnh nén có thể được thay đổi bằng cách sử dụng tùy chọncompresscmd
.missingok
: Không viết thông báo lỗi nếu log files bị thiếu.notifempty
: Không rotate log files nếu tệp trống.
Các tệp cấu hình này cũng kế thừa hành vi create
mặc định – ra lệnh cho Logrotate tạo các log files mới sau khi xoay. Hành động này có thể được ghi đè bằng nocreate
, mặc dù điều đó sẽ vô hiệu hóa hầu hết các chức năng khác.
Có rất nhiều tùy chọn cấu hình. Và bạn có thể đọc về tất cả chúng bằng cách gõ man logrotate
trên command line để hiển thị tài liệu hướng dẫn của Logrotate.
Bước tiếp theo, bạn sẽ thiết lập tệp cấu hình để xử lý các logs cho một dịch vụ. Giả sử trong bài này có tên là your-app
.
Bước 3: Thiết lập cấu hình mẫu
Để có thể quản lý các log files bằng cách sử dụng logrotate cho các ứng dụng khác (ngoài các dịch vụ hệ thống được đóng gói và cấu hình sẵn) bạn có hai lựa chọn như sau:
- Tạo một tệp cấu hình Logrotate mới và đặt vào
/etc/logrotate.d/
. Quá trình này sẽ được chạy hàng ngày với tư cách là người dùng root cùng với tất cả các công việc Logrotate tiêu chuẩn khác. - Tạo một file cấu hình mới và chạy bên ngoài thiết lập Logrotate mặc định của Ubuntu. Quá trình này chỉ thực sự cần thiết nếu bạn chạy Logrotate với tư cách là người dùng non-root hoặc nếu bạn muốn việc log rotations diễn ra thường xuyên hơn trong ngày (cấu hình hàng giờ
hourly
trong/etc/logrotate.d/
sẽ không hiệu quả, vì thiết lập Logrotate của hệ thống chỉ chạy một lần trên ngày).
Sau đây, bạn sẽ xem qua hai lựa chọn trên trong những ví dụ cụ thể:
Thêm cấu hình vào /etc/logrotate.d/
Ví dụ này sẽ nói về việc cấu hình log rotations cho một máy chủ web có access.log
và error.log
được đặt trong /var/log/your-app/
. Tất cả đang chạy dưới dạng người dùng và nhóm www-data
.
Để thêm cấu hình cho các log files của your-app
vào /etc/logrotate.d/
, trước tiên hãy mở một tệp mới trong thư mục /etc/logrotate.d
bằng cách sử dụng nano
hoặc text editor tùy ý:
sudo nano /etc/logrotate.d/your-app
Thêm các dòng sau vào tệp:
/var/log/your-app/*.log {
daily
missingok
rotate 14
compress
notifempty
create 0640 www-data www-data
sharedscripts
postrotate
systemctl reload your-app
endscript
}
Một số chỉ thị cấu hình mới trong tệp này bao gồm:
create 0640 www-data www-data
: Tạo một log files trống mới sau mỗi lần rotate, với các quyền được chỉ định (0640
), chủ sở hữu (www-data
) và nhóm (cũng làwww-data
).sharedscripts
: Bất kỳ script nào được thêm vào tệp cấu hình sẽ chỉ thực thi 1 lần trong mỗi lần chạy, thay vì mỗi tệp đều được rotate. Vì đường dẫn/var/log/your-app/*.log
bao gồm ký tự*
, nên cấu hình này sẽ khớp với tất cả các log files trong thư mụcyour-app
. Nếu không có tùy chọnsharedscripts
, script được chỉ định trongpostrotate
sẽ chạy mỗi khi logrotate xử lý một log files.postrotate
toendscript
: Khối lệnh này chứa một script để chạy sau khi log files được rotate. Trong trường hợp này, bạn đang tải lại ứng dụng của mình. Đôi khi, việc này là cần thiết để ứng dụng có thể chuyển sang log files mới được tạo. Bạn cần lưu ý rằngpostrotate
sẽ chạy trước khi nén log. Quá trình nén có thể mất nhiều thời gian và phần mềm sẽ có thể chuyển sang log files mới ngay lập tức. Còn đối với các tác vụ cần chạy sau khi log đã được nén, bạn có thể dùng lệnhlastaction
để thay thế.
Sau khi bạn đã hoàn thành hãy lưu và thoát khỏi nano
bằng cách nhấn Ctrl + X
. Khi được nhắc, hãy nhấn Y
rồi Enter
.
Bạn có thể kiểm tra lại tệp cấu hình bằng cách chạy lệnh sau:
sudo logrotate /etc/logrotate.conf --debug
Lệnh này gọi logrotate
và trỏ chúng tới tệp cấu hình tiêu chuẩn cũng như bật chế độ debug.
Thông tin được in ra sẽ bao gồm những log files mà Logrotate đang xử lý và các thao tác sẽ được thực hiện với chúng. Sau kiểm tra nếu mọi thứ đều không có vấn đề thì đến đây công việc đã hoàn tất. Logrotate tiêu chuẩn sẽ chạy mỗi ngày một lần với cấu hình mới của bạn.
Tiếp theo, bạn sẽ thử thiết lập mà hoàn toàn không sử dụng đến cấu hình mặc định của Ubuntu.
Bước 4: Tạo một cấu hình độc lập cho Logrotate
Bài hướng dẫn này sẽ sử dụng ứng dụng với sammy
để làm ví dụ, bạn có thể thay bằng tên ứng dụng của bạn vào các vị trí tương ứng. Log files sẽ được lưu trữ trong /home/sammy/logs/
. Để có thể rotate các log này hàng giờ, bạn cần thiết lập chúng ở bên ngoài cấu trúc /etc/logrotate.d
do Ubuntu cung cấp.
Đầu tiên, tạo một tệp cấu hình trong thư mục chính bằng lệnh sau:
nano /home/sammy/logrotate.conf
Sau đó dán những dòng sau vào tệp:
/home/sammy/logs/*.log {
hourly
missingok
rotate 24
compress
create
}
Lưu và đóng tập tin. Bạn đã thiết lập tùy chọn này ở những bước trước đó: Cấu hình này sẽ rotate các tệp hàng giờ, nén và giữ 24 log cũ, đồng thời tạo một log files mới để thay thế file đã được rotate.
Bạn có thể sẽ cần phải tùy chỉnh cấu hình sao cho phù hợp với ứng dụng của mình.
Để kiểm tra xem cấu hình có hoạt động hay không, hãy tạo một log files. Đầu tiên cd
vào thư mục home
của người dùng bằng cách sử dụng lệnh cd ~
. Sau đó, tạo một thư mục logs
bằng lệnh mkdir
. Cuối cùng, tạo một tệp trống tên access.log
trong thư mục logs
bằng lệnh touch trong Linux.
Chạy các lệnh sau để hoàn thành các bước đã nêu trên:
cd ~
mkdir logs
touch logs/access.log
Bây giờ bạn có một log files trống ở đúng vị trí cần có, tiếp theo hãy chạy lệnh logrotate
.
Vì log thuộc sở hữu của sammy
nên bạn không cần quyền sudo
. Tuy nhiên, vẫn cần chỉ định một state file. Tệp này giúp ghi lại những gì logrotate
tìm thấy và các hành động đã được thực hiện trong lần chạy cuối cùng trước đó để giúp nó biết phải làm gì trong lần chạy tiếp theo.
Quá trình theo dõi trạng thái này sẽ diễn ra tự động khi sử dụng cấu hình mặc định /etc/logrotate.conf
. State file được lưu trữ trong /var/lib/logrotate/status
. Ngoài ra vì không sử dụng cấu hình mặc định nên bạn sẽ cần phải tự tay cấu hình vị trí của state file.
Tiếp theo, bạn sẽ yêu cầu Logrotate đặt state file ngay trong thư mục home để có di chuyển tới bất cứ nơi nào khác trên hệ thống. Chạy lệnh sau để sử dụng /home/sammy/logrotate.conf
mà bạn đã tạo để ghi lại trạng thái của logrotate:
logrotate /home/sammy/logrotate.conf --state /home/sammy/logrotate-state --verbose
Output
reading config file /home/sammy/logrotate.conf
Handling 1 logs
rotating pattern: /home/sammy/logs/*.log hourly (24 rotations)
empty log files are rotated, old logs are removed
considering log /home/sammy/logs/access.log
log does not need rotating
Cờ --verbose
sẽ in ra thông tin chi tiết về những gì Logrotate đang thực hiện. Trong ví dụ này không rotate bất cứ thứ gì vì đây là lần đầu tiên Logrotate gặp log files và log file này mới chạy 0 giờ nên không có rotate.
Nếu kiểm tra tệp trạng thái bằng lệnh cat
, bạn sẽ thấy rằng Logrotate đã ghi lại một số thông tin về lần chạy đó:
cat /home/sammy/logrotate-state
Output
logrotate state -- version 2
"/home/sammy/logs/access.log" 2021-12-3-19:0:0
Logrotate ghi lại các log mà Logrotate đã nhìn thấy và thời điểm lần cuối cùng chúng được Logrotate xem xét để rotate. Nếu chạy cùng lệnh này vào một giờ sau đó, log sẽ được rotate như những gì đã cấu hình.
Nếu muốn buộc Logrotate phải rotate log files không sở hữu, hãy sử dụng cờ --force
:
logrotate /home/sammy/logrotate.conf --state /home/sammy/logrotate-state --verbose --force
Điều này rất hữu ích khi kiểm tra postrotate
và các scripts khác.
Cuối cùng, bạn cần thiết lập một tác vụ định kỳ để chạy Logrotate mỗi giờ. Hãy mở crontab:
crontab -e
Lệnh trên sẽ mở một tệp văn bản. Nếu đây là lần đầu tiên sử dụng cron
, bạn sẽ được nhắc nhở để chọn trình soạn thảo văn bản mặc định. Ở đây, Vietnix khuyến khích dùng nano
. Khi mở tệp, có thể sẽ có một số ghi chú hướng dẫn, giải thích cú pháp của cron
. Bạn hãy di chuyển con trỏ xuống một dòng trống mới ở cuối tệp và thêm vào như sau:
crontab
14 * * * * /usr/sbin/logrotate /home/sammy/logrotate.conf --state /home/sammy/logrotate-state
Tác vụ này sẽ chạy mỗi ngày và vào phút thứ 14 trong một giờ. Cách chạy gần giống với lệnh logrotate
chạy trước đó. Ngoài ra, bạn cũng mở rộng logrotate thành đường dẫn đầy đủ /usr/sbin/logrotate
để đảm bảo an toàn. Lưu ý rằng bạn nên sử dụng các đường dẫn đầy đủ khi viết tác vụ định kỳ cho cron
.
Lưu file và thoát. Thao tác này sẽ cài đặt crontab và tác vụ của bạn sẽ chạy theo lịch trình đã chỉ định.
Nếu bạn xem lại thư mục log của mình sau khoảng một giờ, sẽ tìm thấy log files được rotate và nén access.log.1.gz
(hoặc .2.gz
nếu bạn đã chạy Logrotate với cờ --force
).
Vietnix đang là một trong những nhà cung cấp VPS tốc độ cao,… uy tín, chất lượng hàng đầu với hơn 50.000 khách hàng. Với tỷ lệ 97% khách hàng đã sử dụng, tiếp tục giới thiệu đến bạn bè, người thân, đồng nghiệp về dịch vụ tại đây, phần nào thể hiện được chất lượng và sự hiệu quả của dịch vụ tại Vietnix đem đến cho khách hàng.
Với hơn 100.000 dịch vụ đã được kích hoạt, Vietnix cam kết sẽ đem đến cho khách hàng những trải nghiệm tốt nhất cho quá trình đăng ký và quản lý tên miền của mình.
Nếu có nhu cầu đăng ký tên miền bạn có thể hiên hệ trực tiếp đến Vietnix thông qua thông tin dưới đây.
- Địa chỉ: 265 Hồng Lạc, Phường 10, Quận Tân Bình, Thành Phố Hồ Chí Minh.
- Hotline: 1800 1093 – 07 088 44444
- Email: sales@vietnix.com.vn
Lời kết
Như vậy với hướng dẫn về cách quản lý Logfiles bằng Logrotate trên Ubuntu 20.04 này, bạn đã thực hiện các hoạt động kiểm tra phiên bản Logrotate trên máy, khám phá cấu hình Logrotate mặc định của Ubuntu và thiết lập hai loại cấu hình tùy chỉnh khác nhau. Đừng quên theo dõi những bài viết chia sẻ kiến thức, hướng dẫn cách thực hiện các cài đặt, thiết lập trên Ubuntu tiếp theo của Vietnix nhé.