服務(wù)器的日志系統(tǒng)

日志基礎(chǔ)

首先我們要明確的是所謂的服務(wù)器日志系統(tǒng)到底是幫助我們做什么的
其實(shí)這也沒(méi)有什么好說(shuō)的, 你會(huì)告訴我日志無(wú)非就是幫助我們快速定位服務(wù)器發(fā)生的錯(cuò)誤或者問(wèn)題, 當(dāng)然這也是日志眾多目的中最重要的一種
簡(jiǎn)單來(lái)說(shuō) 就是我們到底應(yīng)該如何寫(xiě)出 干凈有用的日志

一些應(yīng)該記錄日志的地方

  • 調(diào)用外部接口前后
  • 系統(tǒng)狀態(tài)發(fā)生變化的時(shí)候
  • 發(fā)生不正常錯(cuò)誤的時(shí)候/業(yè)務(wù)異常
  • 系統(tǒng)的入口與出口
  • 非預(yù)期執(zhí)行
  • 很少出現(xiàn)的 else

一些原則

  • 輸出Log時(shí)避免自己出錯(cuò)
  • 過(guò)多的日志會(huì)拖慢系統(tǒng)
  • 日志至少應(yīng)該包含描述和數(shù)據(jù)
  • 重要的日志應(yīng)該添加特殊的可搜索字符
  • 不要輸出密碼、個(gè)人信息、信用卡信息等敏感數(shù)據(jù)
  • 輸出重要方法的參數(shù)和返回值
  • 輸出重要方法的開(kāi)始和結(jié)束(異常時(shí)是否輸出結(jié)束日志?)
  • 如果和外部系統(tǒng)鏈接,需要輸出INPUT和OUTPUT
  • 合理輸出異常信息(不要主動(dòng)輸出異常,合理通過(guò)框架、共通代碼輸出;避免異常被輸出多次)
  • 考慮數(shù)據(jù)的輸出格式,最好輸出多種格式利用人看或者工具分析
  • 合理輸出二進(jìn)制文件信息(name、size)
  • 不要在循環(huán)中記錄日志

日志格式

一般分為 鍵值對(duì) 和 json 兩種 當(dāng)然因項(xiàng)目而異

apache 引用
192.168.56.6 - - [24/Sep/2012:11:11:11 +0900] "GET /info.php HTTP/1.0" 200 9 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:10.0.7) Gecko/20120829 Firefox/10.0.7"
ngnix 引用
192.168.21.198 - - [06/Mar/2015:18:19:06 +0900] "GET /index.php HTTP/1.1" 200 87243 "-" "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Maxthon/4.4.3.4000 Chrome/30.0.1599.101 Safari/537.36"

日志級(jí)別

日志級(jí)別根據(jù)不同的日志系統(tǒng),級(jí)別也不同,大體上分為5種
借用其他博客看到的總結(jié) 每種不同級(jí)別的錯(cuò)誤大概可以這么來(lái)說(shuō)明

  • ERROR:系統(tǒng)發(fā)生了嚴(yán)重的錯(cuò)誤, 必須馬上進(jìn)行處理, 否則系統(tǒng)將無(wú)法繼續(xù)運(yùn)行. 比如, NPE, 數(shù)據(jù)庫(kù)不可用等.
  • WARN:系統(tǒng)能繼續(xù)運(yùn)行, 但是必須引起關(guān)注. 對(duì)于存在的問(wèn)題一般可以分為兩類(lèi): 一種系統(tǒng)存在明顯的問(wèn)題(比如, 數(shù)據(jù)不可用), 另一種就是系統(tǒng)存在潛在的問(wèn)題, 需要引起注意或者給出一些建議(比如, 系統(tǒng)運(yùn)行在安全模式或者訪問(wèn)當(dāng)前系統(tǒng)的賬號(hào)存在安全隱患). 總之就是系統(tǒng)仍然可用, 但是最好進(jìn)行檢查和調(diào)整.
  • INFO:重要的業(yè)務(wù)邏輯處理完成. 在理想情況下, INFO的日志信息要能讓高級(jí)用戶和系統(tǒng)管理員理解, 并從日志信息中能知道系統(tǒng)當(dāng)前的運(yùn)行狀態(tài). 比如對(duì)于一個(gè)機(jī)票預(yù)訂系統(tǒng)來(lái)說(shuō), 當(dāng)一個(gè)用戶完成一個(gè)機(jī)票預(yù)訂操作之后, 提醒應(yīng)該給出"誰(shuí)預(yù)訂了從A到B的機(jī)票". 另一個(gè)需要輸出INFO信息的地方就是一個(gè)系統(tǒng)操作引起系統(tǒng)的狀態(tài)發(fā)生了重大變化(比如數(shù)據(jù)庫(kù)更新, 過(guò)多的系統(tǒng)請(qǐng)求).
  • DEBUG:主要給開(kāi)發(fā)人員看, 下面會(huì)進(jìn)一步談到.
  • TRACE: 系統(tǒng)詳細(xì)信息, 主要給開(kāi)發(fā)人員用, 一般來(lái)說(shuō), 如果是線上系統(tǒng)的話, 可以認(rèn)為是臨時(shí)輸出, 而且隨時(shí)可以通過(guò)開(kāi)關(guān)將其關(guān)閉. 有時(shí)候我們很難將DEBUG和TRACE區(qū)分開(kāi), 一般情況下, 如果是一個(gè)已經(jīng)開(kāi)發(fā)測(cè)試完成的系統(tǒng), 再往系統(tǒng)中添加日志輸出, 那么應(yīng)該設(shè)為T(mén)RACE級(jí)別.

日志系統(tǒng)

好的日志系統(tǒng)有很多 有很多現(xiàn)成的解決方案
一個(gè)好的日志系統(tǒng) 不僅包括日志系統(tǒng)的基礎(chǔ)功能(快速的記錄收集日志,按不同級(jí)別輸出日志,性能高) 還應(yīng)該能夠快速的分析日志(分析/模式匹配/關(guān)聯(lián)分析) 以及最后的監(jiān)控和報(bào)警功能
日志系統(tǒng)大概分三類(lèi):集中日志系統(tǒng)/分布式日志系統(tǒng)/開(kāi)源日志系統(tǒng)

分布式日志系統(tǒng)

分布式日志 一個(gè) PPT

開(kāi)源日志

開(kāi)源日志系統(tǒng)比較

Scribe

facebook 的開(kāi)源日志系統(tǒng),可以存分布式文件系統(tǒng),也可以存數(shù)據(jù)庫(kù)
比較大的優(yōu)勢(shì)是容錯(cuò)性好,數(shù)據(jù)庫(kù)掛了可以存儲(chǔ)在本地
是一個(gè)thrift client 簡(jiǎn)介 初窺

ChukWa

Yahoo 開(kāi)發(fā)的 Hadoop 的日志分析系統(tǒng)

Flume

日志收集系統(tǒng)

Kafka

Linkin 的開(kāi)源消息系統(tǒng)

kids:知乎日志系統(tǒng)

kids 想做出什么樣的東西

  • 分布式收集
  • 集中存儲(chǔ)
  • 實(shí)時(shí)訂閱
  • 不丟(或者盡量不丟)
  • 對(duì)應(yīng)用性能影響盡量小
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容