aws xray ec2环境搭建和基础用法

news2024/11/17 15:37:38

参考资料

  • https://docs.amazonaws.cn/en_us/xray/latest/devguide/xray-daemon.html

  • https://docs.aws.amazon.com/xray-sdk-for-nodejs/latest/reference/

  • https://github.com/aws/aws-xray-sdk-node

  • https://docs.aws.amazon.com/xray-sdk-for-python/latest/reference/basic.html

之前写过一篇eks使用xray的demo

xray daemon

xray daemon监听 UDP 端口2000上的通信量,收集原始段数据,并将其转发到 Amazon X-Ray API。xray daemon需要aws凭证才能将跟踪数据上传到xray服务。如果在ec2上运行,则获取并使用实例凭证。application的凭证由sdk确定凭证链。

xray daemon输出有关其当前配置的信息以及它发送给 X-Ray 的段。

最简单的方式是在ec2上运行xray deamon

#!/bin/bash
curl https://s3.us-east-2.amazonaws.com/aws-xray-assets.us-east-2/xray-daemon/aws-xray-daemon-3.x.rpm -o /home/ec2-user/xray.rpm
yum install -y /home/ec2-user/xray.rpm

之后查看系统进程

xray.service - AWS X-Ray Daemon
   Loaded: loaded (/etc/systemd/system/xray.service; disabled; vendor preset: disabled)
   Active: active (running) since Wed 2022-11-16 08:57:05 UTC; 18h ago
 Main PID: 12231 (xray)
    Tasks: 8
   Memory: 12.7M
   CGroup: /system.slice/xray.service
           └─12231 /usr/bin/xray -f /var/log/xray/xray.log
Nov 16 08:57:05 ip-172-31-18-4.cn-north-1.compute.internal systemd[1]: Started AWS X-Ray Daemon.

输出日志如下

$ cat /var/log/xray/xray.log
2022-11-16T08:57:05Z [Info] Initializing AWS X-Ray daemon 3.3.5
2022-11-16T08:57:05Z [Info] Using buffer memory limit of 38 MB
2022-11-16T08:57:05Z [Info] 608 segment buffers allocated
2022-11-16T08:57:05Z [Info] Using region: cn-north-1
2022-11-16T08:57:05Z [Info] HTTP Proxy server using X-Ray Endpoint : https://xray.cn-north-1.amazonaws.com.cn
2022-11-16T08:57:05Z [Info] Starting proxy http server on 127.0.0.1:2000

此时xray daemon成功运行,注意:需要确保实例具有xray相关权限,如果修改实例凭证之后仍然没有权限,需要检查是否需要重启xray进程。

simple case

不同语言对于xray的支持是不同的,xray支持aws sdk,以及部分流行的web框架和三方库,这里以nodejs和python为例。安装和配置语言可以参考这篇blog

xray会跟踪数据,包括有关应用程序提供的传入 HTTP 请求的信息,以及应用程序使用 Amazon SDK 或 HTTP 客户机对下游服务进行的调用。

nodejs 发送 segments

初始化

npm init -y
npm install aws-xray-sdk
npm intall aws-sdk
npm install express

express quick start

// app.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 app.js
curl 127.0.0.1:3000

查看xray日志,已经将分段成功发送

2022-11-16Txx:xx:xxZ [Info] Successfully sent batch of 1 segments (0.014 seconds)
2022-11-16Txx:xx:xxZ [Info] Successfully sent batch of 1 segments (0.015 seconds)
2022-11-16Txx:xx:xxZ [Info] Successfully sent batch of 1 segments (0.005 seconds)
2022-11-16Txx:xx:xxZ [Info] Successfully sent batch of 1 segments (0.006 seconds)

查看trace

在这里插入图片描述

查看定义的注释和元数据

在这里插入图片描述

python 发送 segments

初始化

pip install virtualenv
virtualenv venv
source venv/bin/activate
pip install boto3
pip install requests
pip install aws-xray-sdk
pip install Flask

使用requests

# myreq.py
import boto3
import requests
from aws_xray_sdk.core import patch, xray_recorder

## xray将aws sdk包装
SUPPORTED_MODULES = ('requests','boto3')
patch(SUPPORTED_MODULES)

# 指定xray守护进程监听地址
xray_recorder.configure(service ="my app",daemon_address="127.0.0.1:2000" )

@xray_recorder.capture('mysubfunc')
def func():
   r = requests.get('https://www.example.com/') 

if __name__ == "__main__":

    a = xray_recorder.begin_segment('myseg')
    r1 = requests.get('https://www.example.com/')
    print(r1.status_code)
    
    # test subseg
    xray_recorder.begin_subsegment('mysubs1')
    r2 = requests.get('https://www.example.com/')
    print(r2.status_code)
    xray_recorder.end_subsegment()
    # test func
    func()
    xray_recorder.end_segment()
    print(a)
    
    # test aws sdk
    xray_recorder.begin_segment('myboto3')
    s3 = boto3.resource('s3')
    # print out bucket names
    for bucket in s3.buckets.all():
        print(bucket.name)
    xray_recorder.end_segment()

发送请求测试

python myreq.py

查看自定义分段

在这里插入图片描述

查看s3调用

在这里插入图片描述

flask quick satrt

# myflask.py
from aws_xray_sdk.core import xray_recorder
# 导入xray中间件
from aws_xray_sdk.ext.flask.middleware import XRayMiddleware
from flask import Flask

app = Flask(__name__)

# 指定xray守护进程监听地址
xray_recorder.configure(service ="my app",daemon_address="127.0.0.1:2000" )
XRayMiddleware(app, xray_recorder)

@app.route("/")
def hello_world():
    return "<p>Hello, World!</p>"

启动和访问

flask --app myflask run
 * Serving Flask app 'hello'
 * Running on http://127.0.0.1:5000 (Press CTRL+C to quit)

查看xray日志

2022-11-16Txx:xx:xxZ [Info] Successfully sent batch of 1 segments (0.014 seconds)
2022-11-16Txx:xx:xxZ [Info] Successfully sent batch of 1 segments (0.015 seconds)
2022-11-16Txx:xx:xxZ [Info] Successfully sent batch of 1 segments (0.005 seconds)
2022-11-16Txx:xx:xxZ [Info] Successfully sent batch of 1 segments (0.006 seconds)

查看trace

在这里插入图片描述

查看rawdata

{
    "Id": "1-6375b820-29abfda99cb913ae91e21581",
    "Duration": 0.001,
    "LimitExceeded": false,
    "Segments": [
        {
            "Id": "3d22dba3d947cb49",
            "Document": {
                "id": "3d22dba3d947cb49",
                "name": "my_app_name",
                "start_time": 1668659232.6506412,
                "trace_id": "1-6375b820-29abfda99cb913ae91e21581",
                "end_time": 1668659232.6513555,
                "in_progress": false,
                "http": {
                    "request": {
                        "url": "http://127.0.0.1:5000/",
                        "method": "GET",
                        "user_agent": "curl/7.79.1",
                        "client_ip": "127.0.0.1"
                    },
                    "response": {
                        "status": 200,
                        "content_length": 20
                    }
                },
                "aws": {
                    "xray": {
                        "sdk_version": "2.11.0",
                        "sdk": "X-Ray for Python"
                    }
                },
                "service": {
                    "runtime": "CPython",
                    "runtime_version": "3.7.10"
                }
            }
        }
    ]
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/11797.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

联想集团:长期前景稳定,业务转型正在提高盈利能力

来源;猛兽财经 作者&#xff1a;猛兽财经 由疫情驱动的个人电脑需求正在减弱 在经历了两年的个人电脑销售强劲增长之后&#xff0c;随着全球对疫情封锁限制的放松&#xff0c;由疫情引发的远程工作和在线学习趋势带来的全球个人电脑需求正在减弱。根据IDC的数据&#xff0c;20…

文件之间的拷贝(拷贝图片实例)java.io.FileNotFoundException: G:\dad (拒绝访问。)通过绝对路径获取各种文件名

1.报错解决 :java.io.FileNotFoundException: G:\dad (拒绝访问。) 参考文献:(364条消息) java.io.FileNotFoundException:(拒接访问&#xff09;_corelone2的博客-CSDN博客_java.io.filenotfoundexception 2.code 代码参考地址:(364条消息) java中文件拷贝的几种方式_babar…

深入理解New操作符

前言 当我们对函数进行实例化时&#xff0c;需要用new操作符来实现。那么&#xff0c;对于它的底层实现原理你是否清楚呢&#xff1f;本文就跟大家分享下它的原理并用一个函数来模拟实现它&#xff0c;欢迎各位感兴趣的开发者阅读本文。 原理分析 我们通过一个具体的例子来看…

MySQL——数据库基础

文章目录什么叫做数据库&#xff1f;主流数据库基本使用服务器、数据库、表之间的关系MySQL逻辑结构MySQL架构MySQL分类存储引擎什么叫做数据库&#xff1f; 软件角度&#xff1a; 为用户或者用户程序提供更加方便的数据管理的软件&#xff0c;通过SQL语句进行&#xff01; 数…

【PostgreSQL-14版本snapshot的几点优化】

最近在分析PostgreSQL-14版本性能提升的时候&#xff0c;关注到了Snapshots的这一部分。发现在PostgreSQL-14版本&#xff0c;连续合入了好几个和Snapshots相关的patch。 并且&#xff0c;Andres Freund也通过这些改进显著减少了已确定的快照可扩展性瓶颈&#xff0c;从而改进了…

【C++】C/C++内存管理

众所周知&#xff0c;C/C没有内存&#xff08;垃圾&#xff09;回收机制&#xff0c;所以写C/C程序常常会面临内存泄漏等问题。这一节我们一起来学习C/C的内存管理机制&#xff0c;深入了解这套机制有利于我们之后写出更好的C/C程序。 在那些看不到太阳的日子里&#xff0c;别忘…

Spring(九)- Spring自定义命名空间整合第三方框架原理解析

文章目录一、Spring通过命名空间整合第三方框架1. Dubbo 命名空间2. Context 命名空间二、Spring自定义命名空间原理解析三、手写自定义命名空间标签与Spring整合一、Spring通过命名空间整合第三方框架 1. Dubbo 命名空间 Spring 整合其他组件时就不像MyBatis这么简单了&#…

电影影院购票管理系统

1、项目介绍 电影影院购票管理系统拥有两种角色&#xff1a;管理员和用户 管理员&#xff1a;用户管理、影片管理、影厅管理、订单管理、影评管理、排片管理等 用户&#xff1a;登录注册、个人中心、查看电影票、电影选座、下单支付、发布影评、查看票房统计等 2、项目技术 …

14、Horizontal Pod Autoscal

一、为何进行缩扩容&#xff1f; 在实际生产中&#xff0c;经常会遇到某个服务需要扩容的场景&#xff0c;可能会遇到由于资源紧张或者工作负载降低而需要减少服务实例数量的场景。可以利用Deployment/RC的Scale机制来完成这些工作。二、缩扩容模式 Kubernetes 对 Pod 扩容与缩…

mysql-Innodb解析

一.计算机不同介质操作速度 相对于CPU和内存操作&#xff0c; 我们可以看到磁盘的操作延时明显要大得多&#xff0c; 一次磁盘搜索的延时需要10ms。 假入我们某一个业务操作进行了大量磁盘读写&#xff0c; 那可以预料到这个服务的性能肯定是非常差的&#xff0c; 那么到底是什…

3.2文法与语言

1、文法生成语言 推导 定义&#xff1a;当αAβ直接推导出αγβ&#xff0c;即αAβ⇒αγβ&#xff0c;仅当A→γ是一个产生式&#xff0c;且α,β∈(VT∪VN)*。 注&#xff1a;按照我的理解是两个字符串的推导。如果α1⇒α2⇒…⇒αn,则我们称这个序列是从α1到αn的一个…

动态规划01 背包问题(算法)

上篇文章说了&#xff0c;查找组成一个偶数最接近的两个素数算法&#xff1a; 查找组成一个偶数最接近的两个素数https://blog.csdn.net/ke1ying/article/details/127872594 本篇文章题目是 动态规划01 背包问题&#xff1a; 背包容量5kg&#xff0c;现在有三个物体&#xf…

BVH动捕文件导入到E3D骨骼树

BVH动捕文件导入到E3D骨骼树 1. BVH动捕文件 BVH动作捕捉文件有两部分组成&#xff0c;第一部分描述了静止状态下角色的基本骨骼结构&#xff0c;角色通常处于Apose或Tpose姿态下&#xff0e;文本用树状结构描述了各个关节点的相对位置(OFFSET xyz)&#xff0c;连接两关节点的…

学好MySQL增删查改,争取不做CURD程序员【下篇(六个小时肝MySQL万字大总结)】

✨✨hello&#xff0c;愿意点进来的小伙伴们&#xff0c;你们好呐&#xff01; &#x1f43b;&#x1f43b;系列专栏&#xff1a;【MySQL初阶】 &#x1f432;&#x1f432;本篇内容&#xff1a;一套打通MySQL基础操作. &#x1f42f;&#x1f42f;作者简介:一名现大二的三非编…

解决小程序-wx.canvasGetImageData()-RGB取色盘苹果手机获取颜色慢问题

简介 最近做了一个微信小程序控制蓝牙设备&#xff0c;通过小程序中的RGB取色盘&#xff0c;获取当前的RGB颜色&#xff0c;通过蓝牙发送给设备&#xff0c;设备接收到RGB以后&#xff0c;做出相应的调整。 图1&#xff1a;RGB取色盘 在安卓手机上运行正常&#xff0c;能够迅速…

企业实战项目rsync+inotify实现实时同步

目录 一、inotify安装和介绍 1. 安装inotify 2. inotify-tools常用命令 3. rsync inotify 实践 3.1 服务端配置 3.2 客户端配置 一、inotify安装和介绍 1. 安装inotify yum install epel-release -y yum install inotify-tools -y 2. inotify-tools常用命令 inotify-to…

C++ 使用哈希表封装模拟实现unordered_map unordered_set

一、unordered_map unordered_set 和 map set的区别 1. map set底层采取的红黑树的结构&#xff0c;unordered_xxx 底层数据结构是哈希表。unordered_map容器通过key访问单个元素要比map快&#xff0c;但它通常在遍历元素子集的范围迭代方面效率较低。 2. Java中对应的容器名…

vivo和oppo通知权限弹窗

在vivo和oppo部分手机上&#xff0c;首次安装app时&#xff0c;会弹出一个系统级的通知权限弹窗&#xff0c;&#xff08;部分一加手机也会出现&#xff0c;是因为一加手机使用了OPPO的colorOS系统&#xff09;如图。 这个通知权限弹窗比较坑&#xff0c;一来可能不符合产品对…

Word控件Spire.Doc 【文本】教程(21) ;如何在 C# 中用 Word 文档替换文本

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下&#xff0c;轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具&#xff0c;专注于创建、编辑、转…

ARM pwn 入门 (4)

3. callme 本题有多个文件&#xff0c;根据题意来看是需要依次调用callme_one、callme_two、callme_three这3个库函数。这三个函数会进行flag的解密&#xff0c;但是需要满足前三个参数等于特定值。这就需要我们去elf文件中寻找合适的gadget了。 而本题正好给出了一个不能再合…