《squid無故自殘...》續緣篇之玩轉日誌!

《squid無故自殘...》續緣篇之玩轉日誌!


      前幾天偶被squid日誌玩轉了,奮發圖強了幾天,現在輪到偶來玩轉squid日誌了,咩哈哈哈!!(偶的痛苦經歷詳見《squid無故自殘,只留下”Exiting due to repeated. frequent failures“之箴言...》

      鑑於在下公司的代理服務器功能單一、機構簡單,本想省事而爲之,每天丟棄一次已有日誌文件就完事了,但前輩們對偶提出了更高的要求,丟棄和分割都要有!!所以潛心研究一下(其實也就是略懂皮毛...),做出了一個squid的日誌管理方案(不含日誌分析)。如有錯誤,請大家指正!

     
一、逍遙派--直接丟棄日誌文件

/var/log/squid裏的日誌文件根據squid的配置文件squid.conf的設置默認生成,如果確定不需要保留現有日誌,可以全部直接刪除,squid重啓後這些日誌文件會再次生成。

我們來看一下squid.conf文件裏關於日誌的配置項

#vi /etc/squid/squid.conf



cache和cahce_dir             //網頁緩存的相關設置

cache_access_log            //設置squid訪問日誌access.log的存放路徑

cache_log                        //設置squid運行狀態記錄日誌cache.log的存放路徑

cache_store_log              //設置緩存動作記錄日誌store.log的存放路徑

備註:
access.log作爲squid的訪問日誌,記錄每個終端客戶發起的具體請求,是squid的核心日誌,體積會隨着訪問量的增多越變越大。

cache.log記錄了squid運行狀態和調試信息,squid意外不能啓動時可以參考一下該日誌文件,一般情況下體積很小,忽略不計。

store.log,我個人認爲是一個比較傻冒的日誌文件,它只記錄每個進入和離開緩存的目標信息,沒有什麼參考價值而且體積很大!
可以通過修改cache_store_log丟棄store.log日誌
cache_store_log none

      偶不太贊成全部取消squid的記錄日誌功能,山水有相逢,或許某些疑難雜症就在日誌中找到答案。

所以逍遙派的方案就是一週清理一次squid日誌記錄。

1.手動清理
#cd /var/log/squid
進入squid默認日誌目錄(如果更改了位置請進入自定義的目錄)

#rm -rf *
刪除所有squid的日誌文件(當然刪除前先ls一下,避免錯刪其他文件)

#service squid restart
重啓squid


2.自動執行
將我們手動執行的步驟添加到cron(關於cron的詳細配置請參考偶的另一篇文章《Linux計劃任務工具cron用法詳解》)自動執行

#crontab -e
編輯cron

輸入以下語句,完了保存退出。

* 23  *  *  0 rm -rf /var/log/squid/*
10 23 * * 0 /etc/init.d/squid restart

首先在每週日的23點整刪除squid所有日誌文件
然後在每週日的23點10分重啓squid

      這樣就可以達到每週自動丟棄squid當前日誌文件的目的,如果對日誌文件依賴性不高,不需要做系統的訪問分析,這種方法還是比較省事的,至少達到了目的,呵呵~~
      另外如果是大型網絡,很有可能一週不到日誌已經爆滿了,可以根據實際情況縮短刪除日誌的時間間隔。

      夠逍遙~~哥的最愛!!!(懶人的藉口...)


二、謹慎派--通過rotate對日誌進行分割

      squid也挺具前瞻性的,知道日誌文件的瘋漲總會導致程序崩潰,所以提供了日誌分割命令rotate,完全自帶的,無需安裝第三方軟件,操作上也非常簡單,下面介紹一下步驟。

1.logfile_rotate
logfile_rotate是squid配置文件中的的一項,用來設置rotate(分割)後保留日誌的份數。

#vi /etc/squid/squid.conf



如圖所示,logfile_rotate字段後面的數字值表示保留分割日誌的份數,例子中的值=5,即如果已經存在5份日誌分割文件,就算再執行rotate命令也不會新增加分割文件,而是輪換、滾動更新這5份分割文件。
如果硬盤空間足夠可以多保留幾分,偶硬盤空間很小,所以只保留5份。

2.執行rotate對日誌進行分割

#cd /usr/sbin
進入啓動程序目錄,squid的啓動腳本也放在這裏(如果是默認安裝的話)

#squid -k rotate
執行日誌分割



日誌分割後,會在/var/log/squid目錄各生成一個分割出來的access.log.0cache.log.0store.log.0的日誌文件



如上圖所示,是日誌分割前squid日誌的情況



如上圖所示,是執行rotate分割後的日誌情況,生成了access.log.0、cache.log.0和store.log.0文件,同時也將數據量分割出去了,可以見access.log和store.log的已經變小了很多,暫時不會對squid的穩定性造成影響。



如上圖所示,再次執行squid -k rotate之後繼續產生新的分割後的日誌文件



如上圖所示,因爲logfile_rotate的設置值爲5,所以無論執行多少次rotate,最終在/var/log/squid目錄下只會亂換保留5個分割後的日誌文件。

      總結一下:
      這個謹慎派的方案可以一定程度上保證了squid日誌的完整性,如果服務器的硬盤空間足夠,而又有翻查日誌需求的話,可以考慮一下這個做法~~~


三、學院派--利用newsyslog進行分割日誌管理

      學院的東西,最重要流程清晰,穩定可靠。
      所以這個方案是通過第三方軟件newsyslog對squid的日誌進行分割,可以按日期保留所有squid的訪問日誌,適合需要長期對日誌進行分析、統計、跟蹤的環境,配置上稍微複雜一點,但也算是一個比較一勞永逸的方案。
 
      首先到官網下載一個新版的newsyslog的安裝包,本文以newsyslog-1.8做實例。

#tar xzvf newsyslog-1.8.tar.gz
加壓安裝包

#cd newsyslog-1.8
進入安裝包目錄

##########
./configure
make
make install
##########
安裝newsyslog
安裝完成後默認在/usr/local/sbin生成一個可執行的程序啓動文件newsyslog,其他配置完成後通過執行該文件來分割squid日誌。

#cd /usr/local/etc
#touch newsyslog.conf
進入/usr/local/etc目錄,如果沒有etc目錄,可以手動新建一個
然後手動創建newsyslog的配置文件newsyslog.conf
(配置newsyslog需要手動的地方比較多)

#vi newsyslog.conf
編輯配置文件,輸入以下內容,完了保存退出。

#########################################
set squid_logpath = /var/log/squid
set squid_log = /var/log/squid/access.log
set date_squid_log = /var/log/squid/access%Y%M%D.log

SQUID{
        restart: run /usr/sbin/squid -k rotate
        log:  SQUID squid_log squid squid 644
        archive: SQUID date_squid_log 0

}
#########################################

squid_logpath            //本機squid日誌存放目錄,這裏是默認
squid_log                   //本機squid訪問日誌(access.log)存放的絕對路徑,也是默認
date_squid_log          //通過系統日期來命名分割出來的日誌文件
restart:run                 //本機squid程序啓動腳本的絕對路徑,默認too

#cd /usr/local/sbin
完成對newsyslog.conf的配置後返回到該目錄

#./newsyslog
執行newsyslog對squid日誌進行分割



如上圖所示,分割出了一個以服務器當前日期命名的日誌文件“access20100413.log.gz”

newsyslog按系統日期當天只能生成一個分割文件,如果同一天內再次執行newsyslog則會有以下提示:




同樣,我們可以將newsyslog添加到cron讓其定時執行:

#crontab -e

30 23 * * * /usr/local/sbin/newsyslog

     學院派的作風相對要條條框框一些,和謹慎派相比更加全面。
     當然,如果要保留從古到今所有的日誌記錄,還是得將這些分割出來的日誌文件轉移到一個足夠大的空間進行存儲,呵呵~~

     這幾天和squid搏鬥的經歷,讓偶發覺自己實在太菜了,果然是學無止境,繼續努力加油,感謝各位捧場!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章