回覆列表
  • 1 # Feng_風語Yuci

    首先給出個人絕對最好的工具:ELK

    Elasticsearch+Logstash+Kibana

    收集日誌

    日誌管理的第一件事,就是日誌的收集。日誌收集是開發者必備的技巧,不管是哪個開發語言,哪個開發平臺,日誌收集的外掛都是有很多選擇的。例如:

    .net 平臺大家鍾愛的log4net,支援多種儲存方式(檔案、資料庫),多種格式,多種日誌拆分方式。

    java 平臺主流的log4j、slf4j、logback,多種選擇。

    日誌收集的元件這裡就不一一說明了,使用都是很簡單的,這裡重點說明一下,日誌我們收集應該注意的地方:

    1. 日誌等級一定要規範

    等級說明debug除錯資訊info用來收集關注的資訊warn警告資訊error錯誤資訊

    好多開發工程師記錄日誌總是喜歡用info級別來記錄日誌,一般的元件預設級別都是info,所有info預設都是會被記錄的,而debug資訊釋出後,是不會被記錄的。這是一種偷懶的做法,但這也是很普遍的做法。正確的方式應該根據日誌本身的特性去設定日誌的級別,其實規範的日誌級別是非常重要的:

    正確的級別便於運維。便於統一調整系統日誌級別,如特殊情況可以只記錄error錯誤沒有正確的級別,對後期日誌分析和處理是留下很大的隱患。error是需要去關注,並且處理掉的問題。info是普通日誌的記錄,大部分時候是無需關注的。

    2. error日誌內容一定要詳實 ,info日誌要簡潔易懂

    運營過大型系統的人都知道,除了資料庫儲存外,日誌、圖片、附件是儲存的三大債主,他們是會佔用非常非常大的空間,所有記錄info的日誌,要簡潔易懂,避免空間浪費。 而對於error級別的錯誤,記錄一定要詳實,因為error的所有問題,是後期都要去解決的。

    請求的地址請求的引數請求的ip請求的使用者error具體資訊輸出的內容......

    為了能很好的反饋當時error產生場景,以上的這些內容都應該被記錄,而且越詳細越好。

    3. error日誌一定是全域性統一收集的

    前文說過,error的日誌,不僅是我們需要關注的,還是我需要解決掉的問題,所有error日誌非常重要。錯誤日誌的收集,必須是全域性統一收集的,AOP是你最好的夥伴,如果你發現你的errorr日誌收集是在每個類中,到處是

    這個一定要避免,不管你用那種語言,錯誤的處理,都是可以透過全域性進行統一的處理,錯誤日誌也要透過全域性統一收集。

    管理日誌

    每個開發人員對日誌的收集,都是非常熟悉的,基本都是將日誌按照日期的方式進行儲存,日常使用日誌的時候,也是有一些要求:

    1. 單個檔案的大小要控制

    因為大家都是透過日期方式儲存的,但是因為有的人不重視日誌,經常會看到有的系統單個日誌檔案上百M,有的甚至是幾G,而實際大家處理問題關注的都是最近的日誌,所以控制單個日誌檔案的大小,對日誌的效能以及後期的運維都是非常便利的。

    2. 日誌要便於瀏覽

    日誌檔案小才便於瀏覽,日誌最好能透過網址直接訪問到,而不需要一波三折登入伺服器,花10分鐘下載下來,再來分析。

    3. 日誌的安全性要得到保障

    日誌內容有時會包含敏感資訊,特別是error日誌,直接把系統的具體錯誤丟擲來,所以日誌除了檢視方便,還需要確保日誌檔案的安全。如果是日誌檔案是html或者txt,請一定記得把你的日誌檔案許可權修改下,特定使用者才能訪問,不要隨便開放,所有人都能訪問。

    4. 日誌要定期清理

    日誌是非常佔用儲存的空間,日誌太大對儲存的效能也有一定的影響,所有日誌要定期進行清理。

    空間充足可以保留半年空間不足最少也要保留3個月

    當然,這個也不是一定的,根據每個系統的情況去制定清理計劃就可以了。

    如果大家是小型網站,一個系統一臺伺服器,日誌管理就簡單了。如果系統是做了高可用,後端用了均衡負載,那麼,日誌存在當前伺服器是不太明智的做法,日誌一定要統一儲存,因為均衡負載隨時都可能會切換伺服器,當出現故障,你需要去找日誌究竟存在哪個伺服器,也是件很浪費時間的事情。日誌檔案也可以透過:

    共享虛擬目錄來儲存定時進行檔案同步來儲存日誌儲存也是對效能有一定影響的,檔案同步雖然看起來麻煩一定,但是比共享虛擬目錄的方式來說,效能會好,推薦使用這種方式。

    說到日誌的同步,就不得不提Logstash這個日誌元件。Logstash是現在應用最廣的日誌收集元件,基於java平臺。其實很多java平臺的元件,是不用去了解java開發的,只要簡單的配置就能使用。

    Logstash支援檔案同步,也可以結合rsyslog進行檔案同步,當然,也支援透過tcp協議,與第三方對接,好夥伴當然是Elasticsearch。Elasticsearch下文也會做簡單的介紹。

    分析日誌

    日誌的分析也是一個很大的概念,可能對於運維和安全人員關注的是系統的所有日誌,包括訪問日誌、系統監測的日誌等,但是開發人員對於日誌更多的是:

    監控系統執行錯誤,並獲取錯誤時的相關資料包記錄重要的資訊,某些時候便於後期檢查

    所以,開發人員對日誌的需求相對而言簡單一點,但是處理不當也會面臨挑戰。如果要根據某些關鍵字找日誌,沒有一個靠譜的系統處理,那麼大家只能一直在ctrl+f 或者 find 命令中來回查詢自己需要的資訊,使用過的人都知道,這絕對不是一個很好的體驗。那麼是否有很好的工具來處理呢?有,這裡就介紹另外的兩個工具:

    Elasticsearch——一個基於lucene的搜尋引擎工具,解決日誌的搜尋問題。當然,也能解決系統的搜尋問題,而且是分散式的哦。Kibana——一個視覺化的日誌操作引擎,結合Elasticsearch可以達到更好的效果。

    Kibana 介面預覽

    Elasticsearch+Logstash+Kibana 就是傳說中的ELK了,應該是現在最流行的日誌處理平臺。

    尾聲

    這裡簡單說明一下,自己心目中的日誌管理系統。 整體流程如圖:

    推薦的幾個工具雖然是java平臺的工具,但是日誌處理的思路不管是哪個平臺都是一樣的。ELK如果只是作為日誌管理的工具,也可以應用到.net平臺,無需再進行二次開發就可以很好的使用。ELK的使用是有一定的學習成本的,如有時間可以另起一文探討,但是,這個學習成本是可以忽略語言之間的差異。當然,如果大家願意使用指令碼同步或者rsyn檔案同步進行日誌處理也是可以的。

  • 中秋節和大豐收的關聯?
  • 有沒有勸人嘴上積德的句子?