2016-12-14 3 views
1

セイルをAWS XRAYにインストールするにはどうすればいいですか?AWSとセイルXRAY

私はinstallation instructionsをSailsのExpressミドルウェアを使用するのに適した方法に変換しようとしていますが、私は平らになっています。

ほとんどの人は、「config/http.jsを使用」から即座にミドルウェアを構成します。私のAPIはSails.io(ソケット)だけで消費されるので、私の場合はうまくいきません。そのため、httpミドルウェアの設定は使用されません。

これで、論理的なステップはポリシーを使用することです。もしあなたがXRAY命令を読んでいれば、彼らはアプリケーションのすべての要求をキャプチャしようとしていることを知っています。これは、ルートが設定された前後に "start"と "stop"したがって、ポリシーは機能しません。

私の次のステップはapp.jsとconfig/bootstrap.jsファイルを無駄にしようとしていたことでしょう.Sailsが使っているExpressインスタンスを簡単に手に入れることができないからです。ですから、Sailsの現在の設定オプションでも可能ですか?誰でもこれを達成するための手がかりがありますか?このつまずく必要があります誰にも

答えて

2

、Sails.jsにAWS X線を統合しようとする:

私は最終的にそれはそれのために、プロジェクトのフックを構築することにより、作業しまいました。誰かが十分に意欲的であれば、彼らはそれをインストール可能なフックにすることは大歓迎です。

重要事項

  • は、フックをするとき、環境変数AWS_XRAY === 'はい' のみ実行するように設計されています。これは、ローカルマシンとCIマシンがXRAYを実行するのを防ぐための安全トラップです。

  • フックは、ルート設定の「前」部分にタップします。これは、 "ルートがインスタンス化される前に、このミドルウェアを使用する"ことを意味します。

  • このコードはルート「/ _ping」を無視するように設定されているELBヘルスチェックのため 使用され、(X-Rayのために、それは通常、完全な要求をもらおう)。これらはX線で記録する必要はありません。 はちょうどお金の無駄です。この コードを読んで、必要に応じて調整することを強くお勧めします。特にreq.headers.hostreq.connection "修正"です。これは、レコのコードを変更することなく、 にX線を送ることができる唯一の方法でした(まだGithub レポが見つかりません)。

  • req.connection.encrypted注射は、X線がURLをhttpsとして報告することです。 トレースに正しいURLが反映されない限り、重要ではありません。

  • CloudFlareを使用しているため、リクエストのエンドユーザーのIPアドレスを収集する追加のキャッチがあります。これは、CFを使用していない場合は何の変更も必要ありません。しかし、私はCFを使用しない理由は何ですか?

  • これはこれまでのところ私にしか聞こえませんでしたが、 リクエストの基本データはX-Rayコンソールでしか見ることができません。私はまだデータベースクエリ、または使用中の 他のサービスを見ることができません。

結果は

異なる場合があり忘れてはいけません!

  • npm i aws-xray-sdk --save

    var AWSXRay = require('aws-xray-sdk'); 
    
    module.exports = function setupAwsXray(sails){ 
        var setupXray = false; 
    
        function injectXrayIfRequested(req, res, next){ 
         if (
          setupXray 
           && !req.segment 
           && req.path !== '/_ping' 
         ) { 
          req.headers.host = (sails.config.environment === 'production') 
           ? 'myapp.com' 
           : 'dev.myapp.com'; 
          req.connection = { 
           remoteAddress: req.headers['http_cf_connecting_ip'] 
            || req.headers['HTTP_CF_CONNECTING_IP'] 
            || req.headers['X-Real-IP'] 
            || req.ip, 
           encrypted: true 
          }; 
    
          AWSXRay.express.openSegment()(req, res, next); // not a mistake 
         } else { 
          next(); 
         } 
        } 
    
        // This just allows us to get a handle on req.segment. 
        // This is important if you want to add annotations/metadata. 
    
        // Despite AWS's documentation, you DO NOT need to close segments 
        // when using manual mode and express.openSegment, it will 
        // do this for you automatically. 
        AWSXRay.enableManualMode(); 
    
        return { 
         configure: function(){ 
          if (process.env.AWS_XRAY && process.env.AWS_XRAY === 'yes') { 
           setupXray = true; 
    
           AWSXRay.setDefaultName('myapp_' + sails.config.environment); 
          } 
         }, 
         routes: { 
          before: { 
           '/*': injectXrayIfRequested 
          } 
         } 
        }; 
    }; 
    
  • は、私が一緒にapi/hooks/setup-aws-xray.js置くこれはコードですX-Ray Daemon

をインストールして実行するには

関連する問題