簡體   English   中英

如何在NodeJ中使用AWS X-Ray?

[英]How to use AWS X-Ray in NodeJs?

我正在嘗試使用aws-xray-sdk來獲取我的應用程序的蹤跡,
我已經編寫了三個API,
1.調用AWS S3服務( / traceS3
2.對外部端點進行HTTP調用,即 google.com( / traceHttp
3.對本地安裝的MySql DB( / traceMysql )進行數據庫調用

還在本地安裝了AWS X-Ray守護程序
並使用aws-cli進行AWS配置,然后使用以下命令運行守護程序(我正在使用Ubuntu)-

/usr/bin/xray -o -n ap-southeast-2

我指的是以下資源-
1. AWS X射線跟蹤在Node.js中的傳出請求上中斷
2. https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-nodejs-httpclients.html

守護程序可以成功運行,但是不會發送所有API的數據,
它僅發送/traceS3/traceMysql API的數據。

以下是運行代碼-

var AWSXRay = require('aws-xray-sdk');
var AWS = AWSXRay.captureAWS(require('aws-sdk'));
var mysql = AWSXRay.captureMySQL(require('mysql'));

var express = require('express');
var app = express();

var http = AWSXRay.captureHTTPs(require('http'));
app.use(AWSXRay.express.openSegment('X-Ray-Node-Example'));

AWS.config.update({region: 'ap-southeast-2'});
s3 = new AWS.S3({apiVersion: '2006-03-01'});

var con = mysql.createConnection({
    host: "localhost",
    user: "root",
    password: "root",
    database: "nodejs",
    port: 3306
});

con.connect(function (err) {
    if (err) throw err

});

app.get('/traceS3', function(req,res){

    // Call S3 to list current buckets
    s3.listBuckets(function(err, data) {
        if (err) {
            console.log("Error", err);
            res.send(err);
        } else {
            res.send(data.Buckets);
        }
    });
});

app.get('/traceHttp', function (req, res) {
    console.log("traceHttp called!\n"+req);

    http.get("http://jsonplaceholder.typicode.com/todos/1", (resp) => {
        console.log(resp);
        res.send("googlefetched")
    });
});

app.get('/traceMysql', function (req, res) {
    console.log("traceMysql called!\n"+req);

    var start = Date.now();

    var query = con.query('SELECT * FROM customer', function (err, rows, fields) {
        if (err) {
            console.log("Error Selecting : %s ", err);
        }
        else {
            var resp = [];
            function Person(id, name) {
                this.id = id;
                this.name = name;
            }

            for (var i = 0; i < rows.length; i++) {
                var id = rows[i].id;
                var name = rows[i].name;
                resp.push(new Person(id, name));
            }
            var end = Date.now();
            res.send(JSON.stringify({ "status": 200, "error": null, "response": resp, "requestTime": end - start }));
        }
    });
});

app.use(AWSXRay.express.closeSegment());
var server = app.listen(8085, function () {
    var host = server.address().address
    var port = server.address().port
    console.log("Example app listening at http://%s:%s", host, port)
});

有人可以幫忙修復代碼嗎?

症狀似乎類似於據報道已在v1.2.0中修復的錯誤的症狀。

如果未提供其他響應偵聽器,則HTTP Patcher泄漏響應並停止段

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM