|
網(wǎng)絡(luò)技術(shù)是從1990年代中期發(fā)展起來的新技術(shù),它把互聯(lián)網(wǎng)上分散的資源融為有機整體,實現(xiàn)資源的全面共享和有機協(xié)作,使人們能夠透明地使用資源的整體能力并按需獲取信息。資源包括高性能計算機、存儲資源、數(shù)據(jù)資源、信息資源、知識資源、專家資源、大型數(shù)據(jù)庫、網(wǎng)絡(luò)、傳感器等。 當(dāng)前的互聯(lián)網(wǎng)只限于信息共享,網(wǎng)絡(luò)則被認為是互聯(lián)網(wǎng)發(fā)展的第三階段。 首先考慮了apache/bin目錄下自帶的一個輪循工具:rotatelogs 這個工具基本是用來按時間或按大小控制日志的,無法控制何時截斷和如何按天歸檔。然后考慮logrotate后臺服務(wù):logrotate是一個專門對各種系統(tǒng)日志(syslogd,mail)進行輪循的后臺服務(wù),比如SYSTEM LOG,但其配置比較復(fù)雜,放棄,實際上它也是對相應(yīng)服務(wù)進程發(fā)出一個-HUP重啟命令來實現(xiàn)日志的截斷歸檔的。 在apache的FAQ中,推薦了經(jīng)過近2年發(fā)展已經(jīng)比較成熟的一個工具cronolog:安裝很簡單: configure=>make=> make install 他的一個配置的例子會讓你了解它有多么適合日志按天輪循:對httpd.conf做一個很小的修改就能實現(xiàn): TransferLog "|/usr/sbin/cronolog /web/logs/%Y/%m/%d/access.log" ErrorLog "|/usr/sbin/cronolog /web/logs/%Y/%m/%d/errors.log" 然后:日志將寫入 /web/logs/2002/12/31/access.log /web/logs/2002/12/31/errors.log 午夜過后:日志將寫入 /web/logs/2003/01/01/access.log /web/logs/2003/01/01/errors.log 而2003 2003/01 和 2003/01/01 如果不存在的話,將自動創(chuàng)建 所以,只要你不在0點調(diào)整系統(tǒng)時間之類的話,日志應(yīng)該是完全按天存放的(00:00:00-23:59:59),后面日志分析中:[31/Mar/2002:15:44:59這個字段就和日期無關(guān)了,只和時間有關(guān)。 測試:考慮到系統(tǒng)硬盤容量,決定按星期輪循日志 apache配置中加入: #%w weekday TransferLog "|/usr/sbin/cronolog /path/to/apache/logs/%w/accesserials_log" 重啟apache后,除了原來的CustomLog /path/to/apche/logs/accesserials_log繼續(xù)增長外,系統(tǒng)log目錄下新建立了 3/目錄(測試是在周3),過了一會兒,我忽然發(fā)現(xiàn)2個日志的增長速度居然不一樣! 分別tail了2個日志才發(fā)現(xiàn): 我設(shè)置CustomLog使用的是combined格式,就是包含(擴展信息的),而TransferLog使用的是缺省日志格式,看了apache的手冊才知道,TransferLog是用配置文件中離它自己最近的一個格式作為日志格式的。我的httpd.conf里寫的是: LogFormat ..... combined LogFormat ... common ... CustomLog ... combined TransferLog ... 所以TrasferLog日志用的是缺省格式,手冊里說要讓TRANSFER日志使用指定的格式需要: LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" TransferLog "|/usr/local/sbin/cronolog /path/to/apache/logs/%w/accesserials_log" 重啟,OK,日志格式一樣了。 這樣的設(shè)置結(jié)果其實是同時在logs目錄下分別記錄2個日志accesserials_log和%w/accesserials_log,能不能只記錄%w/下的日志那? 查apache手冊,更簡單的方法:直接讓CustomLog輸出到cronolog歸檔日志,并且還能指定格式。 CustomLog "|/usr/local/sbin/cronolog /path/to/apache/logs/%w/accesserials_log" combined 最后是一個日志同步的問題。 任務(wù):每天凌晨找到前1天的日志,另存一個文件準(zhǔn)備發(fā)送到服務(wù)器上。 比如我要保留前1周的日志:每天復(fù)制前1天的日志到指定目錄,等待日志服務(wù)器來抓取: /bin/cp /path/to/logs/`date -v-1d +%w`/accesserials_log /path/to/sync/logs/accesserials_yesterday 在FREEBSD上使用以下命令 date -v-1d +%w 注釋: -v-1d: 前1天,而在LINUX上這個選項應(yīng)該是date -d yesterday +%w: weekday,由于使用的都是標(biāo)準(zhǔn)時間函數(shù)庫,所有工具中的WEEKDAY定義都是一樣的 0-6 => 周日-周六 注意:寫到CRONTAB里的時候"%"前面需要加一個""轉(zhuǎn)義:每天0點5分進行一次日志歸檔 5 0 * * * /bin/cp /path/to/logs/`date -v-1d +%w`/accesserials_log /path/to/for_sync/logs/accesserials_yesterday 首次開始cronolog日志統(tǒng)計是周3,一周以后日志又將輪循回3/accesserials_log 但這次日志是追加到3/accesserials_log還是重新創(chuàng)建一個文件呢?>>accesserials_log or >accesserials_log? 我測試的結(jié)果是日志將被追加: [01/Apr/2002:23:59:59 +0800] [01/Apr/2002:23:59:59 +0800] [08/Apr/2002:00:00:00 +0800] [08/Apr/2002:00:00:00 +0800] 肯定是不希望每次日志還帶著上周的數(shù)據(jù)的并重復(fù)統(tǒng)計一次的(雖然對結(jié)果沒影響),而且這樣%w/下的日志不是也越來越多了嗎? 解決方法1 把每天的cp改成mv 解決方法2 每天復(fù)制完成后:刪除6天以前的accesserials_log日志 find /path/to/apache/logs -name accesserials_log -mtime +6 -exec rm -f {}; 多保留幾天的日志還是有必要的:萬一日志分析服務(wù)器壞了一天呢? 總結(jié): 1 用 cronolog 干凈,安全地輪循日志 2 用 sort -m 排序合并多個日志 參考資料: 日志分析統(tǒng)計工具: http://directory.google.com/Top/Computers/Software/ Internet/Site_Management/Log_Analysis/ Apche的日志設(shè)置: http://httpd.apache.org/docs/mod/mod_log_config.html apache的日志輪循: http://httpd.apache.org/docs/misc/FAQ.html#rotate cronolog:http://www.cronolog.org 網(wǎng)絡(luò)的神奇作用吸引著越來越多的用戶加入其中,正因如此,網(wǎng)絡(luò)的承受能力也面臨著越來越嚴峻的考驗―從硬件上、軟件上、所用標(biāo)準(zhǔn)上......,各項技術(shù)都需要適時應(yīng)勢,對應(yīng)發(fā)展,這正是網(wǎng)絡(luò)迅速走向進步的催化劑。 |
溫馨提示:喜歡本站的話,請收藏一下本站!