2017-09-12 22 views
0

我正在調試從我的快速應用到我的網絡上的另一個微服務的呼叫。我收到了401個錯誤,我需要獲取完整的原始http日誌以提供給我的安全團隊進行分析。跟蹤和記錄從一個node.js服務器內部製作的http調用

我正在尋找一些關於跟蹤來自我在Pivotal Cloud Foundry上部署的微服務的HTTP調用的建議。我一直在做一些研究,並且跨越了Zipkin和OpenTracing等工具。但是這些似乎更多的是關於調試延遲,可能不會顯示HTTP日誌。我也嘗試過使用Morgan/Winston模塊,但他們不跟蹤內部呼叫。摩根目前正在使用註銷基本的HTTP代碼,但它不會從我的應用程序中接收我的呼叫,而只是從瀏覽器中嚮應用程序本身發出的呼叫。我需要獲得完整的原始HTTP請求來協助安全團隊。我正在使用morgan(STDOUT)的默認日誌記錄輸出。我已經使用控制檯記錄了標題以查看標題,但希望以稍微更易讀的格式將它們取出。

回答

1

要記錄從Node.js服務器發送的內部HTTP請求,您可以創建代理Node.js服務器並使用Morgan記錄所有請求。

首先,定義3個常數(或您的項目配置文件讀取):

// The real API endpoint, such as "another micro-service" in your network 
const API = http://<real_server> 
// Proxy Node.js server running on localhost 
const LOGGER_ENDPOINT=http://localhost:3010 
// Flag, decide whether logger is enabled. 
const ENABLE_LOGGER=true 

其次,當你的Node.js服務器啓動,同時啓動記錄程序服務器,如果ENABLE_LOGGER是真實的。記錄器服務器只做一件事:記錄請求並使用request模塊將其轉發給真實的API服務器。您可以使用Morgan來提供更具可讀性的格式。

const request = require('request'); 
const morgan = require('morgan')(':method :url :status Cookie: :req[Cookie] :res[content-length] - :response-time ms'); 
... 
if (ENABLE_LOGGER && LOGGER_ENDPOINT) { 
    let loggerPort = 3010; 
    const logger = http.createServer((req, res) => { 
    morgan(req, res,() => { 
     req.pipe(request(API + req.url)).pipe(res); 
    }); 
    }); 
    logger.listen(loggerPort); 
} 

三,在你的Node.js服務器,發送API請求記錄服務器時ENABLE_LOGGER是真實的,並直接發送API到真實服務器時ENABLE_LOGGER是假的。

let app = express(); // assume Express is used, but this strategy can be easily applied to other Node.js web framework. 
... 
let API_Endpoint = ENABLE_LOGGER ? LOGGER_ENDPOINT : API; 
app.set('API', API_Endpoint); 
... 
// When HTTP request is sent internally 
request(app.get('API') + '/some-url')... 
+0

非常感謝您的回覆@shaochuancs。這正是我需要的:) –

相關問題