2017-09-12 12 views
0

私のエクスプレスアプリケーションからネットワーク上の別のマイクロサービスへの呼び出しをデバッグしています。私は401エラーを受け取りました。分析のために私のセキュリティチームに提供するために完全な生のHTTPログを取得する必要があります。node.jsサーバから内部で行われたhttpコールの追跡とログ

私はPivotal Cloud FoundryにデプロイしたマイクロサービスからのHTTPコールのトラッキングに関するアドバイスを探しています。私はいくつかの調査をしていて、ZipkinやOpenTracingなどのツールを走らせていましたが、それらは遅延のデバッグやHTTPログの表示には関係ないようです。私もMorgan/Winstonモジュールを使ってみましたが、内部呼び出しを追跡しません。モーガンは現在、基本的なHTTPコードをログアウトするために使用していますが、私のアプリ内からの呼び出しでも、ブラウザからアプリ自体に行われたものだけを受け取ることはありません。私はセキュリティチームを支援するために完全な生のHTTPリクエストを取得する必要があります。私はmorgan(STDOUT)でデフォルトのログ出力を使用しています。私はコンソールにヘッダを記録するためにヘッダを記録しましたが、読みやすいフォーマットでそれらを取得したいと思います。

答えて

1

Node.jsサーバーから送信された内部HTTP要求をログに記録するには、Proxy Node.jsサーバーを作成し、そこにすべての要求をMorganで記録することができます。

まず、3つの定数を定義(またはプロジェクト設定ファイルからの読み込み):ENABLE_LOGGERがtrueの場合

// 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サーバーを起動すると、同時にロガー・サーバを起動します。ロガーサーバーは、リクエストをログに記録し、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); 
} 

第三に、ENABLE_LOGGERがtrueの場合、あなたのNode.jsサーバーで、ロガーサーバーへのAPIリクエストを送信し、ENABLE_LOGGERがfalseの場合、実サーバに直接APIを送信します。

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。これはまさに私が必要なものです:) –

関連する問題