日志系統(tǒng)rsync和日志切割logrotate-Linux每日一練(9)
上一節(jié)留的問題本來是網(wǎng)絡(luò)的,但是我還是打算把網(wǎng)絡(luò)留到最后一次來更新,因為我任性~
我發(fā)現(xiàn)了一些公眾號大號整天轉(zhuǎn)發(fā)垃圾文章引發(fā)焦慮,讓看得人懷疑自己,讀者越是焦慮他們就越是開心,方便做廣告賣課程,賺錢也沒錯,賣廣告也是為了恰飯,但是一周推兩三次廣告誰能受得了啊。
說真的,買課程的人大多也看不完,就是買個安心,買了就相當(dāng)于學(xué)了,然后繼續(xù)心安理得的玩,其實現(xiàn)在的線上課程完課率只有不到10%,想想我買了那么多極客時間實際上看完的也只有部分,酌情安排自己的時間才是王道。
扯遠(yuǎn)了,步入正題,Linux自帶的 日志系統(tǒng)rsync
日志系統(tǒng)rsync
Linux日志機(jī)制的核心是 rsyslog 守護(hù)進(jìn)程,該服務(wù)負(fù)責(zé)監(jiān)聽Linux下的日志信息,并把日志信息追加到對應(yīng)的日志文件中,一般在 /var/log 目錄下。
它還可以把日志信息通過網(wǎng)絡(luò)協(xié)議發(fā)送到另一臺Linux服務(wù)器上,或者將日志存儲在 MySQL 或 Oracle 等數(shù)據(jù)庫中。
對于日志收集,基本所有人都聽說過 ELK(ElasticSearch+Logstash+Kibana)的大名,其實所有的 Linux 日志管理系統(tǒng)都基于 rsyslog ,他們配置的第一步都是配置 rsyslog 發(fā)送端。
所以我們只要對這個服務(wù)進(jìn)行簡單配置,就可以把線上環(huán)境的日志集中化收集起來,不僅方便開發(fā)調(diào)試;還避免了直接到線上環(huán)境查看,發(fā)生安全隱患。
啟動停止
在centOS5及更早版本中使用的是 syslog , rsyslog 是 syslog 的增強版本。rsyslog 一般默認(rèn)都會安裝且設(shè)置為自動啟動
$?ps?-ef?|grep?rsyslogd
root?923?1?0?Aug21???00:03:02?/usr/sbin/rsyslogd?-n
$?/etc/init.d/rsyslog?start
$?/etc/init.d/rsyslog?stop
$?/etc/init.d/rsyslog?restart
配置文件寫法
可以參考官網(wǎng):https://www.rsyslog.com/doc/master/configuration/basic_structure.html
執(zhí)行文件:/sbin/rsyslogd主配置文件: /etc/rsyslog.conf自定義配置文件: /etc/rsyslog.d/*.conf修改配置文件后,重啟服務(wù):sudo /etc/init.d/rsyslog restart一份配置文件主要包括以下幾個部分:MODULES 、 RULES 、全局指令,模板,模塊參數(shù)等,回頭有機(jī)會講解 ELK 的時候再展開,這里只用關(guān)心 RULES , 他表達(dá)了三個信息,只要全部滿足就可以完成日志輸出。
在 rsyslog.conf 文件里找如下格式內(nèi)容,代表含義為:什么服務(wù). 日志等級、輸出到哪里
mail.info?/var/log/maillog_info
我們自己寫的程序根本沒有必要使用rsyslog來自定義輸出日志(個人理解,有誤請指出),因為我們會用自己的日志組件輸出的應(yīng)該輸出的位置。這里了解下日志設(shè)施有哪些即可,你可以去看這個配置文件知道這些日志被輸出到哪里了,方便運維和定位問題。
日志設(shè)施有:
auth(security), authpriv: 授權(quán)和安全相關(guān)的消息 kern: 來自Linux內(nèi)核的消息 mail: 由mail子系統(tǒng)產(chǎn)生的消息 cron: cron守護(hù)進(jìn)程相關(guān)的信息 daemon: 守護(hù)進(jìn)程產(chǎn)生的信息 news: 網(wǎng)絡(luò)消息子系統(tǒng) lpr: 打印相關(guān)的日志信息 user: 用戶進(jìn)程相關(guān)的信息 local0 to local7: 保留,本地使用
日志級別有(升序):
debug:包含詳細(xì)的開發(fā)情報的信息,通常只在調(diào)試一個程序時使用。 info:情報信息,正常的系統(tǒng)消息,比如騷擾報告,帶寬數(shù)據(jù)等,不需要處理。 notice:不是錯誤情況,也不需要立即處理。 warning:警告信息,不是錯誤,比如系統(tǒng)磁盤使用了85%等。 err:錯誤,不是非常緊急,在一定時間內(nèi)修復(fù)即可。 crit:重要情況,如硬盤錯誤,備用連接丟失。 alert:應(yīng)該被立即改正的問題,如系統(tǒng)數(shù)據(jù)庫被破壞,ISP連接丟失。 emerg:緊急情況,需要立即通知技術(shù)人員。
例如:把所有來自cron守護(hù)進(jìn)程的消息保存到/var/log/cron文件中。當(dāng)指定日志級別時,所有等于或大于該日志等級的信息都要被處理。
cron.*??/var/log/cron
日志切割
日積月累日志會越來越大,直到撐爆你的磁盤,歷史日志就沒有必要保留了,最好永遠(yuǎn)只保留近期的日志,超過某個大小或者某段保留時間的日志自動刪除。
在 python 的日志組件中支持日志滾動,可以規(guī)定每個日志文件有多大,保留多少個文件;也可以規(guī)定保留幾天內(nèi)的日志。在 Linux 里面也有類似的組件,也是自帶的:logrotate ,他本身是通過計劃任務(wù)讀取配置定時執(zhí)行的。
吶,這就是 Linux 定時任務(wù)涉及的目錄,下面的腳本會按文件名寫的時間定時執(zhí)行。
/etc/cron.daily:
logrotate??man-db.cron??mlocate
/etc/cron.hourly:
0anacron
/etc/cron.monthly:
/etc/cron.weekly:
可以看到 logrotate 在 cron.daily 下面,內(nèi)容使用到了 logrotate.conf 配置文件,這個配置文件記錄了日志滾動規(guī)則的全局配置,你可以手動執(zhí)行下面這個腳本來手動輪轉(zhuǎn)日志。
$?cat?/etc/cron.daily/logrotate
#!/bin/sh
/usr/sbin/logrotate?-s?/var/lib/logrotate/logrotate.status?/etc/logrotate.conf
....
需要注意的是這幾項全局配置,一般是無須改動的,可以打開日志壓縮減少空間占用
$?cat?/etc/logrotate.conf
weekly?????//輪轉(zhuǎn)的周期,一周輪轉(zhuǎn)
rotate?4???//保留4份
create?????//輪轉(zhuǎn)后創(chuàng)建新文件
dateext????//使用日期作為后綴
#compress??//是否壓縮
include?/etc/logrotate.d???//包含該目錄下的文件??
日志輪轉(zhuǎn)配置
假如你的服務(wù)本身不支持日志輪轉(zhuǎn),可以在/etc/logrotate.d下新增任意名稱的文件實現(xiàn)配置,舉個例子。
$?vim?/etc/logrotate.d/log-file?
/var/log/log-file?{
????monthly
????rotate?5
????compress
????delaycompress
????missingok
????notifempty
????create?644?root?root
????postrotate
????????/usr/bin/killall?-HUP?rsyslogd
????endscript
}
上面的模板是通用的,而配置參數(shù)則根據(jù)你的需求進(jìn)行調(diào)整,不是所有的參數(shù)都是必要的。也可以通過man手冊中的例子進(jìn)行配置。
monthly 每月一次,也可以改成'daily','weekly'或者'yearly' rotate 5 保留5個日志,超過刪除最老的 compress 已輪循的用gzip壓縮 delaycompress 一般和compress選項一起用,最近的歸檔不壓縮,方便查看。 missingok 在日志輪循期間忽略錯誤 notifempty 如果日志文件為空,輪循不會進(jìn)行。 create 644 root root 以指定的權(quán)限創(chuàng)建全新的日志文件,同時logrotate也會重命名原始日志文件。 postrotate/endscript 在所有其它指令執(zhí)行完后,中間包含的命令會被執(zhí)行。在這種情況下,rsyslogd 進(jìn)程將立即再次讀取其配置并繼續(xù)運行。也可以包含一些提醒服務(wù)重新讀取配置的命令
以上信息來源 "man logrotate"
手動執(zhí)行與日志驗證
可以這樣手動執(zhí)行
logrotate?/etc/logrotate.conf
也可以單獨切割某個日志
logrotate?-vf?/etc/logrotate.d/log-file?
logrotate本身的日志位于
cat?/var/lib/logrotate/logrotate.status?
logrotate?state?--?version?2
"/var/log/yum.log"?2020-1-1-3:48:1
"/var/log/boot.log"?2020-8-22-3:17:1
"/var/log/chrony/*.log"?2019-12-21-12:0:0
"/var/log/wtmp"?2019-12-21-12:0:0
"/var/log/spooler"?2019-12-21-12:0:0
"/var/log/btmp"?2020-9-1-3:16:1
"/var/log/maillog"?2019-12-21-12:0:0
"/var/log/wpa_supplicant.log"?2019-12-21-12:0:0
"/var/log/secure"?2020-8-11-3:47:1
"/var/log/messages"?2020-8-26-3:16:1
"/var/log/cron"?2020-8-13-3:19:1
引用
https://blog.csdn.net/qq_29344757/article/details/86700898 https://medium.com/pizzas/rsyslog%E4%BB%8B%E7%B4%B9%E8%88%87%E4%BD%BF%E7%94%A8-cfb36497092d https://www.cnblogs.com/sunsky303/p/7677370.html https://www.jianshu.com/p/e129ed893362
