日志那些事兒

一窍帝、什么是日志

在計算機領域狈涮,日志是一個記錄了發(fā)生在運行中的操作系統(tǒng)或其他軟件中的事件授帕,或者記錄了在網(wǎng)絡聊天軟件的用戶之間發(fā)送的消息。在任何系統(tǒng)中晶丘,日志都是非常重要的組成部分黍氮,它是反映系統(tǒng)運行情況的重要依據(jù),也是排查問題時的必要線索浅浮。

二沫浆、日志的用處

好的日志可以幫助我們

  • 了解線上系統(tǒng)的運行狀態(tài)
  • 快速準確定位線上問題
  • 發(fā)現(xiàn)系統(tǒng)瓶頸
  • 預警系統(tǒng)潛在風險
    挖掘產(chǎn)品最大價值
    ……

三、日志的類型

  • 訪問日志

訪問日志一般是記錄了所有對web服務器的訪問請求滚秩,這樣網(wǎng)絡管理員就可以分析用戶的瀏覽行為件缸,找到熱點,找到待優(yōu)化的地方叔遂。

  • 行為日志

行為日志是用來記錄記錄和統(tǒng)計用戶觸發(fā)的各種行為他炊。
是網(wǎng)站運營人員統(tǒng)計、分析用戶的重要依據(jù)

  • 應用日志

應用日志包含應用程序編寫的各種錯誤消息已艰、警告或其他事件痊末。這些消息可以提供連接到特定用例的邏輯、高級信息哩掺。這些消息可以幫助我們了解應用程序的行為凿叠。常見的一些應用日志內(nèi)容為:

  1. 調(diào)用依賴的外部第三方系統(tǒng)的消息提示
  2. 業(yè)務異常的堆棧跟蹤。
  3. 重要的狀態(tài)變化嚼吞。
  • 系統(tǒng)日志

系統(tǒng)日志是記錄系統(tǒng)中硬件盒件、軟件和系統(tǒng)問題的信息,同時還可以監(jiān)視系統(tǒng)中發(fā)生的事件舱禽。用戶可以通過它來檢查錯誤發(fā)生的原因炒刁,或者尋找受到攻擊時攻擊者留下的痕跡。

日志格式

每種類型的日志都有一些自己的日志格式誊稚,這里我們推薦一個行業(yè)標準的日志格式:

Common Log Format(access log)

它又稱The NCSA Common Log,是web服務器產(chǎn)生訪問日志的標準格式

下列是一個日志示例以及各字段的說明:

125.125.125.125 - dsmith [10/Oct/1999:21:15:05 +0500] "GET /index.html HTTP/1.0" 200 1043

下列是對這個例子中的字段解釋:

字段 說明
host (125.125.125.125 in the example) 發(fā)出這次HTTP請求的客戶端主機的IP地址
rfc931 ("-" in the example) 用于標識發(fā)出HTTP請求的客戶端的標識符翔始。如果不存在值罗心,則替換“ - ”
username (dsmith in the example) 用戶名/用戶ID,主要用于客戶端的認證城瞎。如果不存在值渤闷,則替換“ - ”
date:time timezone ([10/Oct/1999:21:15:05 +0500] in the example) 這次HTTP請求的日期以及時間戳
request ("GET /index.html HTTP/1.0" in the example) HTTP請求。請求字段包含三條信息脖镀。主要部分是請求的資源(index.html)飒箭。請求字段還包含HTTP方法(GET)和HTTP協(xié)議版本(1.0)
statuscode (200 in the example) 狀態(tài)碼,標識此次請求是失敗還是成功
bytes (1043 in the example) 一次Http請求中蜒灰,所傳輸?shù)臄?shù)據(jù)大小补憾,不包括Http頭

日期/時間字段里的具體格式是:

[dd/MMM/yyyy:hh:mm:ss +-hhmm]

字段 說明
dd 是當月所在的日子
MMM 月份
yyy
:hh 小時
:mm 分鐘
:ss
+-hhmm 時區(qū)

實際上,即使是一位數(shù)天卷员,這一天通常也會以兩位數(shù)格式記錄盈匾。例如,該月的第二天將表示為02毕骡。但是削饵,某些HTTP服務器會將單個數(shù)字日記錄為單個數(shù)字,所以在看日志的時候未巫,要知道這兩種日期格式的存在窿撬。

日志等級

DEBUG:該級別日志的主要作用是對系統(tǒng)每一步的運行狀態(tài)進行精確的記錄⌒鸱玻可以將各類詳細信息記錄到DEBUG里劈伴,起到調(diào)試的作用,包括參數(shù)信息握爷、調(diào)試細節(jié)信息跛璧、返回值信息等。

INFO:該種日志記錄系統(tǒng)的正常運行狀態(tài)新啼,通過查看INFO級別的日志追城,可以很快地對系統(tǒng)中出現(xiàn)的 WARN,ERROR,FATAL錯誤進行定位≡镒玻可以將初始化系統(tǒng)配置座柱、業(yè)務狀態(tài)變化信息,或者用戶業(yè)務流程中的核心處理記錄到INFO日志中物舒,方便日常運維工作以及錯誤回溯時上下文場景復現(xiàn)色洞。

WARN:該日志表示系統(tǒng)可能出現(xiàn)問題,也可能沒有冠胯。

ERROR:該級別的錯誤也需要馬上被處理火诸,但是緊急程度要低于FATAL級別。ERROR應該盡量詳細記錄涵叮。

FATAL:需要立即被處理的系統(tǒng)級錯誤惭蹂。系統(tǒng)需要將錯誤相關痕跡以及錯誤細節(jié)記錄FATAL日志中,方便后續(xù)人工回溯解決割粮。

日志系統(tǒng)

在Unix系統(tǒng)上盾碗,有兩類常用的日志系統(tǒng),很多日志系統(tǒng)都是基于他們做了具體的實現(xiàn):

1.syslog

Syslog常被稱為系統(tǒng)日志或系統(tǒng)記錄舀瓢,是一種用來在互聯(lián)網(wǎng)協(xié)議(TCP/IP)的網(wǎng)上中傳遞記錄檔消息的標準廷雅。這個詞匯常用來指涉實際的syslog協(xié)議,或者那些提交syslog消息的應用程序或數(shù)據(jù)庫京髓。常見的應用場景是網(wǎng)絡管理工具航缀、安全管理系統(tǒng)、日志審計系統(tǒng)堰怨。

完整的syslog日志中包含產(chǎn)生日志的程序模塊(Facility)芥玉、嚴重性(Severity或 Level)、時間备图、主機名或IP灿巧、進程名、進程ID和正文揽涮。在Unix類操作系統(tǒng)上抠藕,能夠按Facility和Severity的組合來決定什么樣的日志消息是否需要記錄,記錄到什么地方蒋困,是否需要發(fā)送到一個接收syslog的服務器等盾似。

下面是一個syslog消息:

<30>Oct 9 22:33:20 hlfedora auditd[1787]: The audit daemon is exiting.

其中“<30>”是PRI部分,“Oct 9 22:33:20 hlfedora”是HEADER部分雪标,“auditd[1787]: The audit daemon is exiting.”是MSG部分零院。

具體syslog的格式可參考 RFC3164:https://www.ietf.org/rfc/rfc3164.txt

2.journald

與傳統(tǒng)日志系統(tǒng)syslog相對應的,是二進制日志格式的journalctl村刨。
關于jornalctl是什么门粪,可以看看鳥哥寫的這篇簡介:systemd-journald.service 簡介

為什么出現(xiàn)journalctl?

以往烹困,日志往往被分散在整套系統(tǒng)當中玄妈,由不同的守護進程及進程負責處理,這就讓我們很難跨越多種應用程序?qū)ζ鋬?nèi)容進行解讀髓梅。而從Centos7開始拟蜻,
systemd嘗試提供一套集中化管理方案,從而統(tǒng)一打理全部內(nèi)核及用戶級進程的日志信息枯饿。這套系統(tǒng)能夠收集并管理日志內(nèi)容酝锅,而這也就是我們所熟知的journal。

Journal的實現(xiàn)歸功于journald守護進程奢方,其負責處理由內(nèi)核搔扁、initrd以及服務等產(chǎn)生的信息爸舒。你可以看下這篇文章,看看如何使用journalctl來查看日志:https://www.linode.com/docs/quick-answers/linux/how-to-use-journalctl/

作為一個二進制格式的日志稿蹲,網(wǎng)上對此有很多爭議和討論扭勉,Douglas DeMaio在文章syslog-ng vs. systemd’s journald中認為syslog比journalctl的更好,他認為syslog在多機器下性能表現(xiàn)更好苛聘,并且可以支持更多的輸入/輸出源涂炎;但也有人認為journatl 更好,因為它可以讓開發(fā)者更容易檢索到他們要查看的應用日志设哗,而且這些日志是結構化的唱捣。 比如這篇Why journal?就描述了另一種觀點网梢。

分布式系統(tǒng)日志:zipkin調(diào)用鏈服務日志

分布式系統(tǒng)日志統(tǒng)一的手段有很多震缭,比如常見的ELK,但這些日志都是文本战虏,不太容易做分析蛀序。我們遇到問題時,更多的想查看從上至下的的關鍵點的入?yún)⒒罾印⒊鰠⑿炻恪惓#P鍵節(jié)點的響應時間等等啸盏,將分散的請求串聯(lián)在一起重贺,查看整個調(diào)用鏈數(shù)據(jù)。在這里常用的工具便是zipkin了回懦。

Zipkin是一款開源的分布式實時數(shù)據(jù)追蹤系統(tǒng)(Distributed Tracking System)气笙,基于 Google Dapper的論文設計而來,由 Twitter 公司開發(fā)貢獻怯晕。其主要功能是聚集來自各個異構系統(tǒng)的實時監(jiān)控數(shù)據(jù)潜圃。了解zipkin之前,你可以先了解下Google Dapper舟茶,這是它的論文:https://ai.google/research/pubs/pub36356
對于zipkin谭期,你需要了解以下概念:

  • Brave:
    提供了面向 Standard Servlet、Spring MVC吧凉、HTTP Client隧出、JAX RS、Jersey阀捅、Resteasy 和 MySQL等接口的裝備能力胀瞪,可以通過編寫簡單的配置和代碼,讓基于這些框架構建的應用可以向 Zipkin 報告數(shù)據(jù)饲鄙。同時 Brave 也提供了非常簡單且標準化的接口凄诞,在以上封裝無法滿足要求的時候可以方便擴展與定制圆雁。
    - traceId: 一次請求全局只有一個traceId。用來在海量的請求中找到同一鏈路的幾次請求帆谍。
  • spanId: 每個請求都有一個獨立的spanId,例如一次RPC伪朽,一次SQL均會產(chǎn)生
  • cs: 客戶端發(fā)起請求的時間
  • cr: 客戶端收到處理完請求的時間
  • ss: 服務端處理完邏輯的時間
  • sr: 服務端接受請求的時間

日志的歸檔

日志在運行過程中,增長會越來越快既忆,服務器會很快消耗磁盤空間驱负。Linux下有個logrotate工具嗦玖,可以幫助我們進行日志的滾動歸檔等日志操作患雇。logrotate是個十分有用的工具,它可以自動對日志進行截斷(或輪循)宇挫、壓縮以及刪除舊的日志文件苛吱。我們只需要在/etc/logrotate.conf這個目錄下配置logrotate的配置文件即可。

logrotate的使用

一般會定時運行 logrotate器瘪,通常是每天一次翠储;當然也可以定時任務contrab配合使用,直接運行 /etc/cron.daily/logrotate 腳本橡疼。詳細的使用辦法可以去官網(wǎng)上查看

日志的最佳實踐

對于如何更好地打log這件事援所,網(wǎng)上有不少最佳實踐,這里你可以看看這幾篇文章:

Reference:

  1. Log File Formats: NCSA Common.IBM

  2. The Ins and Outs of System Logging Using Syslog

  3. https://www.loggly.com/ultimate-guide/linux-logging-with-systemd/

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末欣除,一起剝皮案震驚了整個濱河市住拭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌历帚,老刑警劉巖滔岳,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異挽牢,居然都是意外死亡谱煤,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門禽拔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來刘离,“玉大人,你說我怎么就攤上這事睹栖×壬粒” “怎么了?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵磨淌,是天一觀的道長疲憋。 經(jīng)常有香客問我,道長梁只,這世上最難降的妖魔是什么缚柳? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任埃脏,我火速辦了婚禮,結果婚禮上秋忙,老公的妹妹穿的比我還像新娘彩掐。我一直安慰自己,他們只是感情好灰追,可當我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布堵幽。 她就那樣靜靜地躺著,像睡著了一般弹澎。 火紅的嫁衣襯著肌膚如雪朴下。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天苦蒿,我揣著相機與錄音殴胧,去河邊找鬼。 笑死佩迟,一個胖子當著我的面吹牛团滥,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播报强,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼灸姊,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了秉溉?” 一聲冷哼從身側響起力惯,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎坚嗜,沒想到半個月后夯膀,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡苍蔬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年诱建,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片碟绑。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡俺猿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出格仲,到底是詐尸還是另有隱情押袍,我是刑警寧澤,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布凯肋,位于F島的核電站谊惭,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜圈盔,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一豹芯、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧驱敲,春花似錦铁蹈、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至娩梨,卻和暖如春沿腰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背姚建。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工矫俺, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留吱殉,地道東北人掸冤。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓,卻偏偏與公主長得像友雳,于是被迫代替她去往敵國和親稿湿。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內(nèi)容