Node.js 全鏈路追蹤:為什么Kibana只顯示總耗時(shí)而看不到SQL和HTTP請求的細(xì)分耗時(shí)?

Node.js 全鏈路追蹤:為什么Kibana只顯示總耗時(shí)而看不到SQL和HTTP請求的細(xì)分耗時(shí)?

Node.JS 應(yīng)用全鏈路追蹤及Kibana顯示問題的解決

本文介紹如何在 Node.js 應(yīng)用中集成 Elastic APM 實(shí)現(xiàn)全鏈路追蹤,并解決一個(gè)常見問題:Kibana 界面只顯示接口總耗時(shí),而缺少 sql 查詢和 http 請求的細(xì)分耗時(shí)信息。

問題描述:

一位開發(fā)者使用 Node.js (v10)、elastic-apm-node (v3.x) 和 Elastic APM (v7.14.0) 進(jìn)行全鏈路追蹤。按照官方示例配置后,Kibana 中的追蹤結(jié)果只顯示接口總耗時(shí),無法查看 SQL 查詢和 HTTP 請求等子調(diào)用的耗時(shí)細(xì)節(jié)。Go 語言編寫的同類接口則能清晰顯示這些信息,這引發(fā)了對 Node.js 探針配置的疑問。

解決方案:

問題在于 Elastic APM agent 的初始化代碼位置。 開發(fā)者最初未將 elastic-apm-node 的初始化代碼放在所有代碼的最前面。

關(guān)鍵: require(‘elastic-apm-node’).start() 以及 serviceName 和 serverUrl 等配置選項(xiàng)必須位于所有其他代碼之前。

正確的代碼片段如下:

const agent = require('elastic-apm-node').start({   serviceName: 'apm-service-test', // 覆蓋 package.json 中的服務(wù)名   serverUrl: 'http://localhost:8200' // 自定義 APM Server URL (默認(rèn): http://localhost:8200)   // secretToken: '' // APM Server 需要令牌時(shí)使用 });

將這段代碼放在所有其他代碼之前,即可解決問題。Kibana 將正確顯示 SQL 查詢和 HTTP 調(diào)用的耗時(shí)信息,實(shí)現(xiàn)完整的全鏈路追蹤效果。 通過調(diào)整代碼位置,成功解決了 Kibana 顯示不完整耗時(shí)信息的問題。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊15 分享