亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

Node.js+ELK日志規范的實現

2024-05-06 16:51:17
字體:
來源:轉載
供稿:網友

一般前端開發同學,對日志其實不太敏感,畢竟前端大多數情況下,不太關心日志。即使有,也可能調用一些第三方的統計,比如百度統計或者別的等。在 Node.js(下文中簡稱node) 推進過程中,也發現我們平常打日志太隨意,該打的日志沒有打,打的一些關鍵日志缺少必要上下文信息,導致在線上定位問題的時候很困難。

本文主要梳理了目前我們團隊在nodejs開發中日志方面存在的問題,以及通過統一日志規范,希望達到什么樣的效果。

問題

  • node日志不規范,打日志太隨意
  • 沒有良好的日志格式、約定的字段,在 ELK 里不能很好的解析&檢索 (PS: ELK文章在路上)
  • 由于node對接的后端服務化,調用鏈不清晰,定位問題困難
  • 數據部門對node日志的使用,沒有明確的記錄。node修改了日志,導致統計數據異常

目標

  • 規范日志打印字段&格式,便于 ELK 檢索
  • 增強node上下游(nginx/后端)日志格式,加入惟一 requestId,方便微服務下定位問題
  • 統計應用運行情況,性能數據
  • 維護數據部門對node日志的使用情況

實現方案

日志類型

參考一些日志的最佳實踐,目前將node日志分為如下幾種類型(scope):

  • desc: 系統啟動、運行過程中,打的日志,表明系統的一些啟動日志、啟動參數等,也包含在 不能 捕獲到http上下文的時候,打的日志
  • stat: 系統性能統計日志,應用會定時收集一些性能信息,便于查詢應用當前狀態
  • visit: 每個http請求相關的日志,會包含惟一的 requestId,定位該請求相關的所有日志
  • biz: 業務數據相關日志,主要提供給數據統計使用

日志級別

只使用 FATAL、ERROR、WARN、INFO 和 DEBUG 等級。

  • FATAL - 導致程序退出的嚴重系統級錯誤,不可恢復,當錯誤發生時,系統管理員需要立即介入,一般應用代碼 不 使用。
  • ERROR - 運行時異常以及預期之外的錯誤,也需要立即處理,但緊急程度低于FATAL,當錯誤發生時,影響了程序的正確執行。需要注意的是這兩種級別屬于服務自己的錯誤,需要管理員介入,用戶輸入出錯不屬于此分類,請求后端、讀文件、數據庫等超時、返回錯誤結構,屬于ERROR
  • WARN - 預期之外的運行時狀況,表示系統可能出現問題。對于那些目前還不是錯誤,然而不及時處理也會變成錯誤的情況,也可以記為WARN,如磁盤過低。
  • INFO - 有意義的事件信息,記錄程序正常的運行狀態,比如收到請求,成功執行。通過查看INFO,可以快速定位WARN,ERROR, FATAL。INFO不宜過多,通常情況下不超過 DEBUG 的10%。
  • DEBUG - 與程序運行時的流程相關的詳細信息以及當前變量狀態。

日志格式/字段

  • 日志格式統一采用 JSON ,便于 ELK 解析處理。
  • 日志中的各個字段的值,都應該盡量使用 英文 ,不使用中文。
  • 日志具體字段,分為 基礎數據 + 擴展數據。基礎數據,是底層日志框架自帶的,所有日志都會包含。擴展數據,不同類型的日志,包含不同的字段。

日志基礎數據

目前使用的 node-bunyan 日志庫,官方文檔,基礎字段包含如下:

  • v: integer 。bunyan的日志版本號
  • level: integer。日志級別對應的數字
  • name: string。服務名
  • hostname: string。主機名
  • pid: integer。進程號
  • time: string。UTC 格式的日期
  • msg: string。日志主體信息

日志擴展數據

下面定義的各個數據類型的擴展數據,不是 全部的字段,僅包含該日志類型下,必需的字段。這些必需的擴展字段,需要在 ELK 中建立索引,方便定位各種問題。

  • desc類型日志,擴展字段:TODO
  • stat類型日志,擴展字段:{ perf: {rss: xxxx, cpu: xxx} }
  • visit類型日志,擴展字段:
  • biz
{  ///////////// 基礎數據 ////////  v: 1,  level: 20,  ///////////// 擴展字段 ////////  // 標志日志類型  scope: "visit",  //事件類型:在 visit 的日志類型下,還會細分不同的事件,比如 client-req、client-res、 普通trace、請求后端service-start, service-end, service-err等。  event: "trace",  //客戶端ID,追蹤用戶、設備會話。在web端,可以是長期的cookie;在APP端,可以是device-id等  rrdid: "",  //本次請求的惟一ID,串聯本次請求的所有相關日志  req_id: "some-uuid-for-request",  //本次請求的用戶ID  uid: "",  //本次請求的客戶端相關數據,通過 ctx.logger 打日志時,自動加上  d: {    url: "/some/path?include-query",    //客戶端ip    ip: "10.138.10.1",    //客戶端的 userAgent    ua: ""  },  //本次node請求的處理時間,毫秒  tm: 500,  //該日志相關的上下文數據,盡量拼成一個字符串,放在 extra 里  extra: "",  //ERROR 級別日志,最好包含error相關信息,比如請求后端相關參數等  err: {    msg: "",    stack: ""  },  //調用后端服務相關參數和響應  service_req: {    host: "",    path: "",    payload: ""  },  service_res: {    //http狀態碼    http_code: 200,    //響應時間    tm: 100,    //響應的body    body: "",    //異常信息    err: ""  }}

什么時候打日志

開發者目前只關心 visit 類型的日志,即和某一次http請求相關聯的日志。desc和stat類型的日志,統一由開發框架封裝后實現,業務開發 不用 關心。下面講的,都是針對 visit 類型的日志。
一次http請求,會打出一系列相關聯的日志。在node層,通常一次請求,會進一步轉發給N個后端服務,然后對后端數據進行一些處理、合并等操作,最后渲染頁面或是輸出JSON。因此,一次請求相關的日志,大體分為以下幾種 event:

  • client-req: client請求到達node層,統一由框架打日志,開發 不 關心
  • service-start: node對某個后端服務發起請求,由通用請求庫負責打日志,開發 不 關心
  • service-end: node請求某個后端服務結束,由通用請求庫負責打日志,開發 不 關心
  • service-err: node請求后端服務異常,由通用請求庫負責打日志,開發 不 關心。調用后端服務異常,日志級別為 WARN,不是 ERROR
  • trace: node中業務層打的日志,如果異常,能幫助定位本次請求相關問題
  • client-res: 結束client的請求,打印本次請求的http code,本次請求處理時間等,由框架統一打,開發 不 關心

開發同學在打日志時,應該謹慎的選擇級別,INFO(含)級別以上,都應該能對定位問題、具體業務統計需求有要求,才能使用。大部分情況下,可以使用 DEBUG 級別,線上 不會 開啟DEBUG級別。

具體方法調用

針對打印 visit類型的日志,調用 ctx.logger(基于Koa的框架) 屬性打日志,推薦參數都傳遞 JSON,具體方法如下:

ctx.logger.debug({msg: "", "extra": "a=1 b=2 c=value"});ctx.logger.info({msg: "xxx", "extra": "其他的額外字段"});ctx.logger.warn({msg: "xxx", "extra": "額外上下文數據"});//ERROR級別日志,應該提供 Error 對象ctx.logger.error({msg: 'xxx', err: error, extra: ""});

注意1,額外的參數,推薦存放在 extra 字段中,統一拼成 string;如果確實有必要單獨出每個字段, 禁止 額外的參數占用上述通用字段名!!

注意2,基礎數據中的msg字段,禁止 包含具體的上下文數據,和該日志相關的上下文數據,應該拼成字符串,放在單獨的 extra 字段中。比如,某個用戶登錄接口,希望統計調用次數,可以這樣打印:

ctx.logger.info({msg: "user login", "extra": 'mobile=18712387101 code=xxxx k3=value3'});

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产91在线播放九色快色| 国产精品福利网| 夜色77av精品影院| 精品视频久久久久久久| 亚洲一区二区中文字幕| 亚洲国产精品久久久久秋霞不卡| 欧美日韩亚洲天堂| 久久的精品视频| 亚洲第一在线视频| 亚洲国模精品一区| 亚洲精品国产电影| 精品国产91乱高清在线观看| 欧美国产日本高清在线| 中文字幕av日韩| 日本免费一区二区三区视频观看| 91高潮精品免费porn| 国产精品无av码在线观看| 久久大大胆人体| 亚洲视频777| 亚洲精品乱码久久久久久金桔影视| 欧美在线视频观看| 亚洲人成在线免费观看| 九九热视频这里只有精品| 精品国内亚洲在观看18黄| 国产精品免费福利| 亚洲曰本av电影| 国产日韩精品视频| 国产精品第100页| 日本欧美国产在线| 久久影视免费观看| 国产噜噜噜噜噜久久久久久久久| 最近2019年手机中文字幕| 久久精品视频中文字幕| 亚洲欧美自拍一区| 欧美肥婆姓交大片| 精品中文字幕乱| 国产精品爱啪在线线免费观看| 在线播放日韩精品| 亚洲综合在线播放| 九色成人免费视频| 精品久久久久久久久久久久久久| 国产精品一区二区久久国产| 国产精品久久久久久五月尺| 亚洲人av在线影院| 亚洲精品天天看| 欧美黑人巨大xxx极品| 热门国产精品亚洲第一区在线| 高清日韩电视剧大全免费播放在线观看| 国产在线视频2019最新视频| 国产成人精品免高潮费视频| 国产精品普通话| 久久99热精品这里久久精品| 欧美色videos| 亚洲成av人影院在线观看| 久久亚洲精品中文字幕冲田杏梨| 国产午夜精品一区理论片飘花| 精品久久久久久久久久久久久| 搡老女人一区二区三区视频tv| 欧美在线精品免播放器视频| 国产精品久久久久7777婷婷| 亚洲精品电影网在线观看| 国产亚洲精品成人av久久ww| 国产精品视频久久| 久久久91精品| 国产成人精品999| 韩国福利视频一区| 在线看日韩av| 北条麻妃一区二区三区中文字幕| 欧美激情一级欧美精品| 欧美在线视频网站| 久热爱精品视频线路一| 黑人极品videos精品欧美裸| 欧美放荡办公室videos4k| 日韩精品免费看| 欧美黄色小视频| 精品国产拍在线观看| 日韩电影免费在线观看| 日韩欧美亚洲范冰冰与中字| 成人免费看吃奶视频网站| 91高清视频在线免费观看| 九九精品视频在线观看| 97超级碰碰碰| 久久久999精品免费| 国产精品极品美女粉嫩高清在线| 国产日韩欧美在线| 国产精品视频在线观看| 一本色道久久88精品综合| 一级做a爰片久久毛片美女图片| 国产精品福利久久久| 久久99青青精品免费观看| 久久6免费高清热精品| 91久久精品国产91久久| 国产日韩欧美综合| 日本sm极度另类视频| 欧美激情精品久久久久久| 日韩不卡中文字幕| 国产精品女主播视频| 77777少妇光屁股久久一区| 国产精品小说在线| 亚洲第一免费播放区| 欧美尺度大的性做爰视频| 久久久久久美女| 2018中文字幕一区二区三区| 亚洲电影在线观看| 日韩免费在线观看视频| 91青草视频久久| 精品一区二区亚洲| 亚洲精品免费一区二区三区| 精品久久久久久久久久久久久| 亚洲精品国产suv| 日韩精品在线观看视频| 久久999免费视频| 国产人妖伪娘一区91| 国产精品久久久久久久天堂| 亚洲免费电影一区| 亚洲欧美成人一区二区在线电影| 欧美日韩国产一区中文午夜| 中文字幕亚洲欧美在线| 国产成人一区三区| 中文字幕亚洲欧美日韩高清| 高清欧美性猛交xxxx| 欧美性20hd另类| 国产精品久久久久秋霞鲁丝| 欧美激情啊啊啊| 国产精品91在线观看| 日本sm极度另类视频| 26uuu另类亚洲欧美日本一| 久久久久久中文字幕| 丝袜美腿亚洲一区二区| 欧美日韩一区二区在线播放| 爽爽爽爽爽爽爽成人免费观看| 日韩欧美一区二区三区久久| 日韩av在线免费看| 欧美亚洲成人网| 午夜精品一区二区三区在线播放| 亚洲天堂av在线播放| 国产偷亚洲偷欧美偷精品| 久久99精品国产99久久6尤物| 国产成人avxxxxx在线看| 欧美精品免费播放| 日韩精品中文字幕在线播放| 欧美黄网免费在线观看| 国产精品极品美女粉嫩高清在线| 国产亚洲综合久久| 欧美大成色www永久网站婷| 一区三区二区视频| 久久久久久久久久av| 国产精品久久久久久久app| 亚洲黄色有码视频| 国产mv免费观看入口亚洲| 在线国产精品视频| 中文字幕国产精品久久| 精品偷拍一区二区三区在线看| 日韩美女视频免费在线观看| 欧美日韩激情网| 国产视频精品自拍| 美日韩精品视频免费看| 欧美一级黄色网| 亚洲日本中文字幕免费在线不卡| 97精品国产97久久久久久| 久久国产精品免费视频| 精品久久久久久电影| 国产成人精品电影久久久| 成人免费观看网址|