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