XI. 日志
把日志當(dāng)作事件流
日志 使得應(yīng)用程序運(yùn)行的動(dòng)作變得透明。在基于服務(wù)器的環(huán)境中,日志通常被寫(xiě)在硬盤(pán)的一個(gè)文件里,但這只是一種輸出格式。
日志應(yīng)該是 事件流 的匯總,將所有運(yùn)行中進(jìn)程和后端服務(wù)的輸出流按照時(shí)間順序收集起來(lái)。盡管在回溯問(wèn)題時(shí)可能需要看很多行,日志最原始的格式確實(shí)是一個(gè)事件一行。日志沒(méi)有確定開(kāi)始和結(jié)束,但隨著應(yīng)用在運(yùn)行會(huì)持續(xù)的增加。
12-factor應(yīng)用本身從不考慮存儲(chǔ)自己的輸出流。 不應(yīng)該試圖去寫(xiě)或者管理日志文件。相反,每一個(gè)運(yùn)行的進(jìn)程都會(huì)直接的標(biāo)準(zhǔn)輸出(stdout)事件流。開(kāi)發(fā)環(huán)境中,開(kāi)發(fā)人員可以通過(guò)這些數(shù)據(jù)流,實(shí)時(shí)在終端看到應(yīng)用的活動(dòng)。
在預(yù)發(fā)布或線上部署中,每個(gè)進(jìn)程的輸出流由運(yùn)行環(huán)境截獲,并將其他輸出流整理在一起,然后一并發(fā)送給一個(gè)或多個(gè)最終的處理程序,用于查看或是長(zhǎng)期存檔。這些存檔路徑對(duì)于應(yīng)用來(lái)說(shuō)不可見(jiàn)也不可配置,而是完全交給程序的運(yùn)行環(huán)境管理。類(lèi)似 Logplex 和 Fluent 的開(kāi)源工具可以達(dá)到這個(gè)目的。
這些事件流可以輸出至文件,或者在終端實(shí)時(shí)觀察。最重要的,輸出流可以發(fā)送到 Splunk 這樣的日志索引及分析系統(tǒng),或 Hadoop/Hive 這樣的通用數(shù)據(jù)存儲(chǔ)系統(tǒng)。這些系統(tǒng)為查看應(yīng)用的歷史活動(dòng)提供了強(qiáng)大而靈活的功能,包括:
- 找出過(guò)去一段時(shí)間特殊的事件。
- 圖形化一個(gè)大規(guī)模的趨勢(shì),比如每分鐘的請(qǐng)求量。
- 根據(jù)用戶(hù)定義的條件實(shí)時(shí)觸發(fā)警報(bào),比如每分鐘的報(bào)錯(cuò)超過(guò)某個(gè)警戒線。