Log တွေကို အချိန်တစ်ခု့သက်မှတ်ပြီး rotate လုပ်လို့ရတဲ့ service တခု့ကို sharing လုပ်ပေးသွားပါမယ်။ ဒါ့ကြောင့် demonstration အနေနဲ့ website ကို request လိုက်တဲ့အခါ မှတ်ထားတဲ့ access.log ကိုcustom path တစ်ခု့မှာသိမ်းပြီး log တွေကို rotate လုပ် တဲ့ အကြောင်းလေးကို ပြောပြသွားမှာဖြစ်ပါတယ်။
Step1:
အရင်ဆုံး nginx config ထဲမှာ
/etc/nginx/conf.d/အောက်ကဖြစ်စေ sites-available အောက်ကဖြစ်စေ config file မှာ log ကို ဘယ်နေရာမှာသိမ်းမလဲ သက်မှတ်ပေးပါမယ်။
$mkdir /home/ubuntu/web_log
$touch /home/ubuntu/web_log/access.log
$sudo vim /etc/nginx/sites-available/default
access_log /home/ubuntu/web_log/access.log;
$sudo nginx -t
ဒီအဆင့်မှာ OK ရင် အောက်က command ကိုဆက် run ပါမယ်။
$sudo nginx -s reload
ဒါဆိုရင်ပထမအဆင့်ပြီးပါပြီ။
Step2:
ကိုယ့်ရဲ့ server မှာ log rotate service ရှိမရှိစစ်ကြည့်ပါမယ်။
$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
တကယ်လို့မရှိခဲ့ဘူးဆိုရင် ဒီ command နဲ့သွင်းယူနိုင်ပါတယ်။
$sudo apt update
$sudo apt install logrotate
log rotate service ရှိသွားပြီဆိုရင် ဘယ်လို custom log rotation လုပ်ရမလဲဆိုတာစပါမယ်။ custom ဆိုတာက linux os ရဲ့ ဘယ် path မှာမဆို ကိုယ့်ရဲ့ log rotate config ကိုထားနိုင်တာလို့ generally ပြောလို့ရပါတယ်။
Ubuntu OS ရဲ့ home directory အောက်မှာ directory တစ်ခု့သက်မှတ်ပြီးfile လေးတခု့ ဆောက်လိုက်ပါမယ်။
$mkdir /home/ubuntu/logrotate
$touch /home/ubuntu/logrotate/logrotate.conf
ဒီ file မှာ log rotation config တွေရေးမှာပါ။စပြီးရေးပါမယ်။
$vim /home/ubuntu/logrotate/logrotate.conf
/home/ubuntu/web_log/access.log {
hourly
missingok
rotate 24
notifempty
dateext
dateformat .%Y-%m-%d-%H-%M-%S
compress
create 0644 ubuntu ubuntu
sharedscripts
postrotate
sudo /usr/sbin/service nginx reload > /dev/null
endscript
}
Home directory အောက်မှာ ရှိတဲ့ web_log directory ထဲက access.log ကို rotation လုပ်ပါမယ်။
#hourly ကlog rotate ကို တနာရီတစ်ခါလုပ်ပါမယ်လို့သက်မှတ်တာပါ။
#missingok က သက်မှတ်ထားတဲ့ log file တခု့ခု့ကြောင့် error တက်ခဲ့ရင် report မလုပ်ပဲ log rotation ကိုပဲ ဆက်သွားဖို့ သက်မှတ်ထားတာပါ။
#rotate 24 ဆိုတာက rotate လုပ်ပြီးသား file ကို 24 ခု့ထားမယ်လို့ပြောတာပါ။24 ခု့ပြည့်တာနဲ့ oldest log file က expire ဖြစ်သွားပါမယ်။hourly ထားပြီး rotate 24 ထားခြင်းက log file တွေကို တရက်ပဲ သိမ်းမယ်လို့ သက်မှတ်တာနဲ့ အတူတူပဲဖြစ်ပါတယ်။
#notifempty က အကယ်၍ access.log ဆိုတဲ့ file လေးက empty ဖြစ်နေရင် log rotation မလုပ်ပါဘူးလို့သက်မှတ်ပေးတာပါ။
#dateext
#dateformat .%Y-%m-%d-%H-%M-%S
ဆိုတာကတော့ log rotate လုပ်လို့ထွက်လာတဲ့ file ကို date format ပါ ထပ်ပေါင်းပေးမယ်လို့ပြောတာပါ။ဒီလိုပုံစံမျိုးလေးဖြစ်ပါမယ်။
access.log.2023-03-14-09-59-60
#compress ကတော့ log rotate ပြီးရလာတဲ့ access.log.*date* ဆိုတဲ့ fileလေးကို gzip နဲ့ compress လုပ်ပေးဖို့သက်မှတ်လိုက်တာပါ။
access.log.2023-03-14-09-59-60.gz
#create 0644 ubuntu ubuntu
log file ကို user ubuntu group ubuntu permission 0644 နဲ့ဆောက်ပါမယ်လို့သက်မှတ်ပေးတာပါ။
#sharedscripts ကတော့ ဒီ log rotae config ထဲမှာပဲ command run မယ်လို့သက်မှတ်ပေးတာဖြစ်ပါတယ်။
#postrotate က log rotate လုပ်ပြီးမှပဲ အောက် command ကို run မယ်လို့သက်မှတ်ပေးတာပါ။
sudo /usr/sbin/service nginx reload > /dev/null
ဒီ command လေးကတော့ log rotate လုပ်ပြီးသွားလျှင် nginx service ကို reload လုပ်ပေးမှာဖြစ်ပြီး အသစ် create လုပ်ထားတဲ့ access.log file လေးထဲကို log တွေဝင်မှာဖြစ်ပါတယ်။
အခု့ configure လုပ်ထားတဲ့ log file လေးအလုပ် လုပ်ရဲ့လားစစ်ကြည့်ပါမယ်။
$logrotate /home/ubuntu/logrotate/logrotate.conf --state /home/ubuntu/logrotate/logrotate-state --verbose
Output
reading config file /home/ubuntu/logrotate/logrotate.conf
Handling 1 logs
rotating pattern: /home/ubuntu/web_log/access.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
#logrotate-state ဆိုတာက log rotate service ကို ဘယ် log file မှာ နောက်ဆုံး run သွားလဲဆိုတာ မှတ်ထားပေးတာပါ။
$cat /home/ubuntu/logrotate/logrotate-state
Output
logrotate state -- version 2
"/home/ubuntu/web_log/access.log" 2023-03-14-19:0:0
ဒါက log rotate ကို ဘယ်အချိန်မှာ runလဲ မှတ်ထားပေးပြီး
log rotate service ကို force ပေးပြီး ထပ် run ခြင်တယ်ဆိုရင်တော့ဒီ command လေးသုံးလို့ရပါတယ်။
$logrotate /home/ubuntu/logrotate/logrotate.conf --state /home/ubuntu/logrotate/logrotate-state --verbose --force
Step3:
နောက်ဆုံးအဆင့်အနေနဲ့ cron job သက်မှတ်ထားပေးပြီး log rotate service ကို တစ်နာရီ တစ်ကြိမ် run နေအောင်သက်မှတ်ပေးပါမယ်။
$crontab -e
1 * * * * /usr/sbin/logrotate /home/ubuntu/logrotate/logrotate.conf --state /home/ubuntu/logrotate/logrotate-state
နာရီတိုင်းရဲ့ 1 min မှာ log rotate service run မယ်လို့သက်မှတ်ပေးတာဖြစ်ပါတယ်။