|
網(wǎng)絡(luò)技術(shù)是從1990年代中期發(fā)展起來的新技術(shù),它把互聯(lián)網(wǎng)上分散的資源融為有機(jī)整體,實現(xiàn)資源的全面共享和有機(jī)協(xié)作,使人們能夠透明地使用資源的整體能力并按需獲取信息。資源包括高性能計算機(jī)、存儲資源、數(shù)據(jù)資源、信息資源、知識資源、專家資源、大型數(shù)據(jù)庫、網(wǎng)絡(luò)、傳感器等。 當(dāng)前的互聯(lián)網(wǎng)只限于信息共享,網(wǎng)絡(luò)則被認(rèn)為是互聯(lián)網(wǎng)發(fā)展的第三階段。 內(nèi)容摘要:你完全不必耐心地看完下面的所有內(nèi)容,因為結(jié)論無非以下2點:1 用 cronolog 干凈,安全地輪循apache“日”志 2 用 sort -m 合并排序多個日志 根據(jù)個人的使用經(jīng)歷: 1 先介紹apache日志的合并方法; 2 然后根據(jù)由此引出的問題說明日志輪循的必要性和解決方法,介紹如何通過cronolog對apache日志進(jìn)行輪循; 中間有很多在設(shè)計日志合并過程中一些相關(guān)工具的使用技巧和一些嘗試的失敗經(jīng)歷…… 我相信解決以上問題的路徑不止這一條途徑,以下方案肯定不是最簡便或者說成本最低的,希望能和大家有更多的交流。 {0} 多服務(wù)器日志合并統(tǒng)計的必要性: 越來越多大型的WEB服務(wù)使用DNS輪循來實現(xiàn)負(fù)載均衡:使用多個同樣角色的服務(wù)器做前臺的WEB服務(wù),這大大方便了服務(wù)的分布規(guī)劃和擴(kuò)展性,但多個服務(wù)器的分布使得日志的分析統(tǒng)計也變得有些麻煩。如果使用webalizer等日志分析工具對每臺機(jī)器分別做日志統(tǒng)計: 1 會對數(shù)據(jù)的匯總帶來很多麻煩,比如:統(tǒng)計的總訪問量需要將SERVER1 SERVER2...上指定月份的數(shù)字相加。 2 會大大影響統(tǒng)計結(jié)果中唯一訪客數(shù)unique visits,唯一站點數(shù)unique sites的等指標(biāo)的統(tǒng)計,因為這幾個指標(biāo)并非幾臺機(jī)器的代數(shù)相加。 統(tǒng)一日志統(tǒng)計所帶來的好處是顯而易見的,但如何把所有機(jī)器的統(tǒng)計合并到一個統(tǒng)計結(jié)果里呢? 首先也許會想:多個服務(wù)器能不能將日志記錄到同一個遠(yuǎn)程文件里呢?我們不考慮使用遠(yuǎn)程文件系統(tǒng)記錄日志的問題,因為帶來的麻煩遠(yuǎn)比你獲得的方便多的多…… 因此,要統(tǒng)計的多個服務(wù)器的日志還是:分別記錄=>并通過一定方式定期同步到后臺=>合并=>后用日志分析工具來進(jìn)行分析。 首先,要說明為什么要合并日志:因為webalizer沒有將同一天的多個日志合并的功能 先后運行 webalizer log1 webalizer log2 webalizer log3 這樣最后的結(jié)果是:只有l(wèi)og3的結(jié)果。 能不能將log1< 因為一個日志的分析工具不是將日志一次全部讀取后進(jìn)行分析,而且流式的讀取日志并按一定時間間隔,保存階段性的統(tǒng)計結(jié)果。因此時間跨度過大(比如2條日志間隔超過5分鐘),一些日志統(tǒng)計工具的算法就會將前面的結(jié)果“忘掉”。因此, log1< {1} 日志合并問題 多個服務(wù)的合并統(tǒng)計就是要把日志按時間排序后合并成一個文件 典型的多個日志文件的時間字段是這樣的: log1 log2 log3 00:15:00 00:14:00 00:11:00 00:16:00 00:15:00 00:12:00 00:17:00 00:18:00 00:13:00 00:18:00 00:19:00 00:14:00 14:18:00 11:19:00 10:14:00 15:18:00 17:19:00 11:14:00 23:18:00 23:19:00 23:14:00 日志合并必須是按時間將多個日志的交叉合并。合并后的日志應(yīng)該是: 00:15:00 來自log1 00:15:00 來自log2 00:16:00 來自log1 00:17:00 來自log3 00:18:00 來自log2 00:19:00 來自log1 .... 如何合并多個日志文件? 下面以標(biāo)準(zhǔn)的clf格式日志(apache)為例: apche的日志格式是這樣的: %h %l %u %t "%r" %>s %b 具體的例子: 111.222.111.222 - - [03/Apr/2002:10:30:17 +0800] "GET /index.html HTTP/1.1" 200 419 最簡單的想法是將日志一一讀出來,然后按日志中的時間字段排序 cat log1 log2 log3 |sort -k 4 -t " " 注釋: -t " ": 日志字段分割符號是空格 -k 4: 按第4個字段排序,也就是: [03/Apr/2002:10:30:17 +0800] 這個字段 -o log_all: 輸出到log_all這個文件中 但這樣的效率比較低,要知道。如果一個服務(wù)已經(jīng)需要使用負(fù)載均衡,其服務(wù)的單機(jī)日志條數(shù)往往都超過了千萬級,大小在幾百M,這樣要同時對多個幾百M的日志進(jìn)行排序,機(jī)器的負(fù)載可想而之…… 其實有一個優(yōu)化的途徑,要知道:即使單個日志本身已經(jīng)是一個“已經(jīng)按照時間排好序“的文件了,而sort對于這種文件的排序合并提供了一個優(yōu)化合并算法:使用 -m merge合并選項, 因此:合并這樣格式的3個日志文件log1 log2 log3并輸出到log_all中比較好方法是: sort -m -t " " -k 4 -o log_all log1 log2 log3 注釋: -m: 使用 merge優(yōu)化算法 注意:合并后的日志輸出最好壓縮以后再發(fā)給webalizer處理 有的系統(tǒng)能處理2G的文件,有的不能。有的程序能處理大于2G的文件,有的不能。盡量避免大于2G的文件,除非確認(rèn)所有參與處理的程序和操作系統(tǒng)都能處理這樣的文件。所以輸出后的文件如果大于2G,最好將日志gzip后再發(fā)給webalizer處理:大于2G的文件分析過程中文件系統(tǒng)出錯的可能性比較大,并且gzip后也能大大降低分析期間的I/O操作。 日志的按時間排序合并就是這樣實現(xiàn)的。 網(wǎng)絡(luò)的神奇作用吸引著越來越多的用戶加入其中,正因如此,網(wǎng)絡(luò)的承受能力也面臨著越來越嚴(yán)峻的考驗―從硬件上、軟件上、所用標(biāo)準(zhǔn)上......,各項技術(shù)都需要適時應(yīng)勢,對應(yīng)發(fā)展,這正是網(wǎng)絡(luò)迅速走向進(jìn)步的催化劑。 |
溫馨提示:喜歡本站的話,請收藏一下本站!