国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 操作系統(tǒng) > 正文

簡(jiǎn)單好用的日志管理工具Logrotate

2024-06-28 14:31:37
字體:
供稿:網(wǎng)友

前言

日志就像程序的生命記錄儀,詳細(xì)記錄下了程序運(yùn)行的點(diǎn)點(diǎn)滴滴。

  1. 慎重的選擇記錄哪些日志:在茫茫日志海中尋找真正記錄問題的日志,你是不想經(jīng)歷的;
  2. 精心的定時(shí)壓縮轉(zhuǎn)移日志:故障發(fā)生了,日志卻丟了,此時(shí)的任何辯解都是蒼白無力的。

記錄哪些日志需要你在編寫應(yīng)用程序慎重決定,本文講述如何使用linux自帶的logrotate程序來精心組織我們可愛的日志文件。

簡(jiǎn)介

日志,實(shí)際就是本文文件,且是個(gè)內(nèi)容不斷在增長(zhǎng)的文件。處理通常就是按天或者按大小來備份、壓縮或轉(zhuǎn)儲(chǔ),非常簡(jiǎn)單。

/var/log/messages是大家熟悉的系統(tǒng)日志存放位置。如果該文件內(nèi)容增長(zhǎng)特別快,幾天可能就撐滿了整個(gè)硬盤,那么對(duì)該文件的備份、壓縮或轉(zhuǎn)儲(chǔ)就顯得尤為重要。

手動(dòng)怎么處理呢?可能是:

  1. 編寫日志處理腳本,腳本檢測(cè)如果日志文件大小超過10M就拷貝一份日志并壓縮轉(zhuǎn)儲(chǔ),中間還需要清空原日志;
  2. Crontab中把這個(gè)腳本作為定時(shí)任務(wù),每天執(zhí)行下。

Logrotate實(shí)際就是起著上述腳本作用的小工具,他通過讓用戶來配置規(guī)則的方式,檢測(cè)和處理日志文件。配合Cron可讓處理定時(shí)化;
Logrotate預(yù)制了大量判斷條件和處理方式,可大大降低手寫腳本的負(fù)擔(dān)和出錯(cuò)的可能;

Logrorate檢測(cè)日志文件屬性,比對(duì)用戶配置好的檢測(cè)條件,對(duì)滿足條件的再根據(jù)用戶配置的要求來處理,整個(gè)可以通過Cron來定時(shí)調(diào)度,這其實(shí)是非常經(jīng)典的Linux解決問題的思路,可以好好靜下心來品味下,簡(jiǎn)單,好用。

組成

以下是logrotate運(yùn)行的關(guān)鍵點(diǎn):

  1. /usr/bin/logrotate 程序所在位置;
  2. /etc/cron.daily/logrotate 默認(rèn)讓Cron每天執(zhí)行l(wèi)ogrotate一次;
  3. /etc/logrotate.conf 全局配置文件;
  4. /etc/logrotate.d 應(yīng)用自個(gè)的配置文件存放目錄,覆蓋全局配置;

全局配置文件/etc/logrotate.conf

# cat /etc/logrotate.conf# see "man logrotate" for details# rotate log files weeklyweekly# keep 4 weeks worth of backlogsrotate 4# create new (empty) log files after rotating old onescreate# use date as a suffix of the rotated file# dateext# uncomment this if you want your log files comPRessed#compress# RPM packages drop log rotation information into this directoryinclude /etc/logrotate.d# no packages own wtmp and btmp -- we'll rotate them here/var/log/wtmp {    monthly    create 0664 root utmp minsize 1M    rotate 1}/var/log/btmp {    missingok    monthly    create 0600 root utmp    rotate 1}# system-specific logs may be also be configured here.

查看全局配置文件cat /etc/logrotate.conf,可以發(fā)現(xiàn)#是行注釋,配置項(xiàng)都是以關(guān)鍵字形式出現(xiàn)(那么想知道每個(gè)關(guān)鍵字的作用,最簡(jiǎn)單的就是直接man查看了)。

仔細(xì)看下每個(gè)關(guān)鍵字的注釋,不難發(fā)現(xiàn),比如:

  1. weekly:表示每周處理下日志;
  2. rotate4:最多保持4個(gè)輪轉(zhuǎn)備份,關(guān)于輪轉(zhuǎn)本身后文會(huì)詳述,很有意思;
  3. create:處理完該日志文件后,新生成一個(gè)日志文件,當(dāng)然盡可能是同名同權(quán)限等;
  4. dateext:默認(rèn)未加時(shí)間戳;
  5. compress:默認(rèn)不壓縮;
  6. 對(duì)wtmp和btmp日志做了單獨(dú)處理,于是你意識(shí)到了單獨(dú)的配置可以放在/etc/logrotate.d目錄,或者直接放在全局配置里面。

于是當(dāng)logrotate程序被執(zhí)行時(shí),按照字面意思logrotate默認(rèn)是想每周處理下日志,對(duì)日志最多輪轉(zhuǎn)保留4份,處理方式是不壓縮也不加時(shí)間戳,處理完后再生成個(gè)同名文件。當(dāng)然這些是默認(rèn)設(shè)置,還對(duì)wtmp和btmp日志處理做了單獨(dú)要求并且include /etc/logrotate.d目錄下還有一大堆處理要求。該目錄下配置文件,在logrotate被執(zhí)行后,都會(huì)不一個(gè)個(gè)讀取來執(zhí)行。

自定義配置文件存放目錄/etc/logrotate.d/

# ls /etc/logrotate.d/cups  debug  dracut  httpd  iptraf  MySQLd  ppp  psacct  sssd  subscription-manager  syslog  tomcat6  up2date  vsftpd  wpa_supplicant  yum

例如查看下sssd配置文件的內(nèi)容:

# cat /etc/logrotate.d/sssd/var/log/sssd/*.log {    weekly    missingok    notifempty    sharedscripts    rotate 2    compress    postrotate        /bin/kill -HUP `cat /var/run/sssd.pid  2>/dev/null`  2> /dev/null || true    endscript}

可以發(fā)現(xiàn)基本格式與全局配置文件/etc/logrotate.conf一致,不難想象單獨(dú)為某個(gè)日志配置的要求優(yōu)先級(jí)肯定更高,如果與全局配置中出現(xiàn)相同項(xiàng)目的配置,單獨(dú)的肯定覆蓋全局的。

Cron執(zhí)行 /etc/cron.daily/logrotate

配置文件都指定完畢,logrotate可單獨(dú)執(zhí)行了,當(dāng)然也可以通過cron來定時(shí)執(zhí)行;

# cat /etc/cron.daily/logrotate#!/bin/sh/usr/sbin/logrotate /etc/logrotate.conf >/dev/null 2>&1EXITVALUE=$?if [ $EXITVALUE != 0 ]; then    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"fiexit 0

默認(rèn)的logrotate已經(jīng)放在/etc/cron.daily/logrotate目錄,很明顯是讓cron每天執(zhí)行一次logrotate程序;

當(dāng)然你也可以將該腳本放到其他時(shí)間,比如每分鐘執(zhí)行,甚至可以單獨(dú)寫crontab表達(dá)式來讓logrotate指定配置文件和指定時(shí)間執(zhí)行;

小結(jié)

至此,我們看過了logrotate的全局配置文件,單獨(dú)配置文件,已經(jīng)如何配合cront來定時(shí)執(zhí)行。
為了加深記憶,我們先小結(jié)下:

  1. logrotate是個(gè)程序,專門用來處理日志文件;
  2. 處理需要用戶配置規(guī)則,比如指定超出10M則做什么動(dòng)作;
  3. 規(guī)則可配置到獨(dú)立的配置文件中,當(dāng)然全局還有個(gè)全局默認(rèn)配置文件,要知道每個(gè)配置文件都放在哪哦;
  4. logrotate一被執(zhí)行,就會(huì)搜索所有的配置文件按要求處理日志;
  5. 可以配合cron讓logrotate定時(shí)執(zhí)行;

測(cè)試

man過logrotate的同學(xué)大概知道logrotate該怎么用了,常見的選項(xiàng)使用如下:

# 1. 調(diào)試 (d = debug)參數(shù)為配置文件,不指定則執(zhí)行全局配置文件logrotate -d /etc/logrotate.d/test.conf# 2. 強(qiáng)制執(zhí)行(-f = force),可以配合-v(-v =verbose)使用,注意調(diào)試信息默認(rèn)攜帶-v;logrotate -v -f /etc/logrotate.d/test.conf

本例通過自定義配置文件來壓縮指定日志文件來測(cè)試logrotate的使用。
注意logrotate都是需要使用root來執(zhí)行的,(但是可以通過配置項(xiàng)來指定生成的日志文件為普通用戶的)。

# 1. 生成一個(gè)日志文件man ps > test.logll -h test.log-rw-r--r-- 1 root root 54K Sep  6 11:36 test.log# 2. 編寫對(duì)該日志文件如何處理的logrotate配置文件cat /etc/logrotate.d/test.conf/var/log/test.log {compressrotate 4size 30kcreate 0600 root root}# 3. 調(diào)試是否可以按照配置文件要求生成壓縮文件logrotate -d /etc/logrotate.d/test.confreading config file /etc/logrotate.d/test.confreading config info for /var/log/test.logHandling 1 logsrotating pattern: /var/log/test.log  30720 bytes (4 rotations)empty log files are rotated, old logs are removedconsidering log /var/log/test.log  log needs rotatingrotating log /var/log/test.log, log->rotateCount is 4dateext suffix '-20150906'glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'renaming /var/log/test.log.4.gz to /var/log/test.log.5.gz (rotatecount 4, logstart 1, i 4),renaming /var/log/test.log.3.gz to /var/log/test.log.4.gz (rotatecount 4, logstart 1, i 3),renaming /var/log/test.log.2.gz to /var/log/test.log.3.gz (rotatecount 4, logstart 1, i 2),renaming /var/log/test.log.1.gz to /var/log/test.log.2.gz (rotatecount 4, logstart 1, i 1),renaming /var/log/test.log.0.gz to /var/log/test.log.1.gz (rotatecount 4, logstart 1, i 0),renaming /var/log/test.log to /var/log/test.log.1creating new /var/log/test.log mode = 0600 uid = 0 gid = 0compressing log with: /bin/gzipremoving old log /var/log/test.log.5.gzerror: error opening /var/log/test.log.5.gz: No such file or directory# 4. 調(diào)試結(jié)果正常,實(shí)際測(cè)試下logrotate -f /etc/logrotate.d/test.confll -h test.log*-rw------- 1 root root   0 Sep  6 11:44 test.log-rw-r--r-- 1 root root 14K Sep  6 11:44 test.log.1.gz

測(cè)試正常;
以上logrotate -f /etc/logrotate.d/test.conf指令完全可以寫入crontab中,按照要求時(shí)間來執(zhí)行,此處暫時(shí)不拆開講了。

輪轉(zhuǎn)

我們從上述debug信息中,摘錄輪轉(zhuǎn)部分的日志來理解下,什么叫輪轉(zhuǎn)。

rotating log /var/log/test.log, log->rotateCount is 4renaming /var/log/test.log.4.gz to /var/log/test.log.5.gz (rotatecount 4, logstart 1, i 4),renaming /var/log/test.log.3.gz to /var/log/test.log.4.gz (rotatecount 4, logstart 1, i 3),renaming /var/log/test.log.2.gz to /var/log/test.log.3.gz (rotatecount 4, logstart 1, i 2),renaming /var/log/test.log.1.gz to /var/log/test.log.2.gz (rotatecount 4, logstart 1, i 1),renaming /var/log/test.log.0.gz to /var/log/test.log.1.gz (rotatecount 4, logstart 1, i 0),renaming /var/log/test.log to /var/log/test.log.1emoving old log /var/log/test.log.5.gzerror: error opening /var/log/test.log.5.gz: No such file or directory

根據(jù)配置文件要求,輪轉(zhuǎn)4份;
以偽代碼在簡(jiǎn)寫上述日志為:

rotateCount=4mv 4 5mv 3 4mv 2 3mv 1 2rm 5

這就很容易理解了,所謂輪轉(zhuǎn),就是類似二級(jí)制向右位移一樣不斷的重命名;

例子

在弄清楚logrotate的運(yùn)作機(jī)制,又實(shí)地測(cè)試一番后,以下將通過多個(gè)例子方式來讓大家快速配置。

清空但不刪除日志文件

copytruncate的作用在于先復(fù)制一份當(dāng)前日志文件用做處理,再清空源日志文件,讓其繼續(xù)接收日志。
當(dāng)然在復(fù)制和清空的空隙可能會(huì)有若干

$ cat logrotate.conf /tmp/output.log {            size 1k            copytruncate            create 700 bala bala            rotate 4            compress }

摘自參考3;

日志處理完執(zhí)行自定義腳本

postrotate和endscript中間可以編寫自定義腳本,用來對(duì)日志或者其他其定義處理,擴(kuò)展性非常強(qiáng);
例如由于logrotate對(duì)壓縮日志可指定的時(shí)間戳只能到天,于是可以再自定義腳本里面對(duì)文件做時(shí)分等細(xì)化命名;

$ cat logrotate.conf /tmp/output.log {            size 1k            copytruncate            rotate 4            compress            postrotate                       /home/bala/myscript.sh            endscript }

摘自參考3;

更改壓縮程序

默認(rèn)壓縮程序使用.gz,當(dāng)然可以自定義,需要制定壓縮程序和后綴名;

$ cat logrotate.conf /tmp/output.log {            size 1k            copytruncate            create            compress            compresscmd /bin/bzip2            compressext .bz2            rotate 4 }

參考

  1. man logrotate
  2. 被遺忘的logrotate
  3. HowTo: The Ultimate Logrotate Command Tutorial with 10 Examples
  4. logrotate 進(jìn)行nginx日志分割

上一篇:Shell命令行操作

下一篇:命令行的使用

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 北宁市| 马鞍山市| 凤阳县| 龙州县| 恩施市| 宿迁市| 定南县| 济宁市| 十堰市| 邵武市| 西乌| 龙山县| 瓦房店市| 长宁县| 呼伦贝尔市| 家居| 建宁县| 岳阳市| 万山特区| 奈曼旗| 兰溪市| 隆尧县| 汾西县| 山丹县| 咸阳市| 剑阁县| 平江县| 鄂温| 淳安县| 若羌县| 资源县| 枣庄市| 务川| 清流县| 正阳县| 射洪县| 抚州市| 阿拉善左旗| 上杭县| 甘南县| 伊川县|