日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

使用 StatsD + InfluxDB + Grafana 搭建 Node.js 监控系统 (二)

發布時間:2025/3/15 windows 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用 StatsD + InfluxDB + Grafana 搭建 Node.js 监控系统 (二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章來源:zhuanlan.zhihu.com/p/26981364?…

上一篇主要講了 StatsD + InfluxDB + Grafana 的搭建并用 Grafana 創建了兩種圖表(Graph):

  • api 每個接口的請求量
  • api 每個接口的響應時間
  • 這一篇主要講講兩個深入使用 Grafana 的方式:

  • 如何將 Grafana 跟 ELK 緊密的結合起來
  • Grafana 監控報警
  • Grafana + ELK

    在觀察 Grafana 監控時,發現某個 api 接口響應時間突然有一個尖刺,這個時候的表情是:

    不過別急,我之前寫過一篇《Koa 請求日志打點工具》講了如何打點 Koa 應用,將慢日志收集到 ELK,可以看到具體某個請求每一步 yield 表達式的執行耗時。那如何將 Grafana 和 ELK 中的打點日志結合起來呢?我們深入研究下 Grafana,會發現一個可用的功能:Grafana 的圖表可以添加 link,如下:

    上圖選項的意思是:當鼠標懸浮在圖表的左上角時,會彈出一個名為 Go to shimo 的鏈接,點擊會跳轉到 shimo.im。記住勾選上 Include time range,這是關鍵所在。

    Kibana-RequestId-Link

    勾選 Include time range 會在 querystring 里添加 from=xxx&to=xxx,而且當選取范圍時 Grafana 的 time range 格式跟 Kibana 的還不太一樣。于是我寫了一個 Chrome 插件 kibana-requestId-link,解決了兩個問題:

  • 轉換 time range 格式。即從 Grafana 帶到 Kibana 的 time range(from 和 to)轉化成 Kibana 認識的 time range,并重定向。
  • 給 requestId 添加 link。點擊后跳轉到限定在相同時間范圍內通過該 requestId 查詢的結果,省了自己再粘貼復制到 Kibana 查詢一遍的過程。
  • 該插件已發布到 Chrome App Store,下載地址。

    安裝完插件后,我們還需要修改初始化 Grafana 響應時間圖表的腳本,將:

    links: [] 復制代碼

    改為:

    "links": [ { "title": "Go to kibana", "type": "absolute", "keepTime": true, "targetBlank": true, "url": "http://你的kibana地址/app/kibana#/discover?_g=(refreshInterval:(display:Off,pause:!f,value:0),time:(from:now-1h,mode:quick,to:now))&_a=(columns:!(routerName,sumOfTake,requestId),index:'logstash-*',interval:auto,query:(query_string:(analyze_wildcard:!t,query:'app:%22api%22%20AND%20routerName:%22<%= action %>%22%20AND%20_exists_:%22sumOfTake%22')),sort:!('@timestamp',asc))" } ] 復制代碼

    這里有兩點需要說明:

  • url 里默認 time:(from:now-1h,mode:quick,to:now),kibana-requestId-link 插件會將這個值替換掉。
  • query_string 里查詢語句為:app:"api" AND routerName:"xxx" AND _exists_:"sumOfTake" 復制代碼這里是針對我們業務 api 的 lucene 查詢語句。app 限定為 api 的日志,routerName 表明是哪個接口,_exists_:"sumOfTake" 表明是請求最后一步的 log(因為只有慢日志和錯誤日志的最后一步才加了 sumOfTake 字段)。一句話解釋:查詢某個時間段內, api 某個接口的所有慢請求和錯誤請求。
  • 舉個真實的例子,過去一小時 file.star 這個接口的響應時間圖表:

    可以看出,在 09:17 和 09:19 左右分別有一個尖刺(響應時間大于500ms),點擊 Go to kibana 跳轉到 Kibana,如下:

    有兩條慢日志,且時間點和響應時間都吻合(這里沒有錯誤請求日志)。我們點擊第二條慢日志的 requestId,跳轉到如下:

    可以看出從請求到來到結束執行了 18 步,大部分 step 執行時間都很短,但在 step=17 這一步執行了 1190ms,點擊左邊展開查看具體信息:

    url 表明是哪個接口,fn 表明 yield 表達式是 this.me.addStarredFile(file, { individualHooks: true }),filename 表明代碼在 /data/app/api/controllers/file.js:439:4,status 是 afterYield 表明這個 yield 表達式執行的時間(beforeYield 表示上個 yield 表達式執行之后到這個 yield 表達式執行之前),take 表明執行了 1190ms。

    Grafana 監控報警

    Grafana v4 版本加入了報警(Alert)功能。

    首先,點擊左上角圖標彈出選項菜單->Alerting->Alert List->Configure notifications。如果沒有 channel,點擊 New Channel 創建一個。創建或修改 channel 都如下所示:

    Email addresses 中 email 地址以分號隔開。點擊 Send Test 測試是否能收到郵件。

    注意:需要配置 Grafana 的使用郵箱地址。

    回到具體的監控圖表,進入編輯頁面,有一個 Alert tab 頁,如下:

    上圖選項的意思是:給 file.star 接口加一個監控報警,每 60s 檢查一次,如果過去 5m 平均響應時間大于 500ms 則發送報警郵件。Notifications 可以設置發送到哪些 channel,這里設置只發送到 admin 這個 channel,可以在 Message 里填寫詳細的描述,State history 保存了所有報警歷史。

    對應的我們需要修改創建響應時間圖表的腳本,添加 alert 字段:

    { "alert": { "conditions": [ { "evaluator": { "params": [ 500 ], "type": "gt" }, "operator": { "type": "and" }, "query": { "params": [ "A", "5m", "now" ] }, "reducer": { "params": [], "type": "avg" }, "type": "query" } ], "executionErrorState": "alerting", "frequency": "60s", "handler": 1, "name": "<%= action %> 響應時間", "noDataState": "no_data", "notifications": [] }, ... "id": <%= panelId %> } 復制代碼注意:這里的 A 即之前 mean 的 refId。

    收到的報警郵件會帶有當前監控圖表的 screenshot,如下所示:

    最后

    我們正在招聘!

    [北京/武漢] 石墨文檔 做最美產品 - 尋找中國最有才華的工程師加入

    總結

    以上是生活随笔為你收集整理的使用 StatsD + InfluxDB + Grafana 搭建 Node.js 监控系统 (二)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。