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í)信息的問題。