aws xray 使用ecs集成xray追踪请求

参考资料

  • https://github.com/aws-samples/aws-xray-fargate
  • https://aws.amazon.com/cn/blogs/mt/configure-aws-x-ray-tracing-aws-batch-jobs/
  • https://docs.amazonaws.cn/xray/latest/devguide/xray-daemon-ecs.html

创建业务webserveer,文件结构如下

$ tree -L 1
├── Dockerfile
├── package.json
└── server.js

这里使用example中的代码

// server.js
var AWSXRay = require('aws-xray-sdk');
// xray将aws sdk包装
var AWS = AWSXRay.captureAWS(require('aws-sdk'));
// var AWS = require('aws-sdk');

AWS.config.update({ region: 'cn-north-1' });

// 指定xray守护进程监听地址
AWSXRay.setDaemonAddress('127.0.0.1:2000');

const express = require('express')
const app = express()
const port = 3000

app.use(AWSXRay.express.openSegment('MyApp'));

app.get('/', (req, res) => {
    var document = AWSXRay.getSegment();
    // 添加注释和元数据
    document.addAnnotation("mykey", "my value");
    document.addMetadata("my key", "my value", "my namespace");
    res.send('Hello World!')
    var s3 = new AWS.S3();
    var params = {};
    s3.listBuckets(params, function (err, data) {
        if (err) console.log(err, err.stack);
        else console.log(data);
    });
})
app.use(AWSXRay.express.closeSegment());


app.listen(port, () => {
    console.log(`Example app listening on port ${port}`)
})

node的依赖如下

// package.json
{
  "name": "aws-xray",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "type": "commonjs",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "repository": {
    "type": "git",
    "url": "ssh://git-codecommit.cn-north-1.amazonaws.com.cn/v1/repos/aws-xray"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "aws-sdk": "^2.1255.0",
    "aws-xray-sdk": "^3.4.0",
    "express": "^4.18.2"
  }
}

构建业务image

$ docker build -t demoserver:latest .
// Dockerfile
FROM public.ecr.aws/bitnami/node:16
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY package.json /usr/src/app/
RUN npm install
COPY . /usr/src/app
EXPOSE 3000
CMD [ "node", "server.js" ]

创建任务定义,将xray守护进行作为sidecar加入,这里xray监听2000的udp端口

需要向xray守护进程授权

https://docs.amazonaws.cn/xray/latest/devguide/xray-daemon.html#xray-daemon-permissions

在这里插入图片描述

查看业务日志

在这里插入图片描述

查看xray日志

在这里插入图片描述

尝试访问webserver,继续查看xray日志

在这里插入图片描述

查看xray控制台,已经能收到结果

在这里插入图片描述

posted @ 2023-03-03 12:04  zhaojie10  阅读(13)  评论(0)    收藏  举报  来源