性能监控之Python实战SkyWalking链路追踪

文章目录

  • 一、介绍
  • 二、SkyWalking支持的语言
  • 三、SkyWalking安装
    • 3.1 前提准备
    • 3.2 先安装ElasticSearch7.X
    • 3.3 Skywalking-OAP 安装
    • 3.4 Skywalking-UI 界面安装
    • 3.5 访问页面检查SkyWalking是否可以访问
  • 四、Python 项目接入SkyWalking
    • 4.1 演示项目代码
    • 4.2 验证 sw-python
    • 4.3 配置依赖
    • 4.4 启动fastapi 项目
    • 3.5 发送请求
    • 4.6 SkyWalking 查看请求信息

一、介绍

SkyWalking 是一款APM工具,Apache 基金会,开源,社区支持,可用于代码调用链路分析以及性能测试中接口调用链路的分析。使用 SkyWalking 可以帮助您快速定位系统的性能瓶颈和异常情况,提高系统的可靠性和稳定性。

二、SkyWalking支持的语言

Java,Python,Go, .Net,C#,NodeJS,Rust,PHP,JavaScript 等等。

地址介绍支持的编程语言:https://skywalking.apache.org/downloads/
在这里插入图片描述

三、SkyWalking安装

版本:SkyWalking-8.5

3.1 前提准备

这里演示的环境为 CentOS7.9 版本,机器4C8G的环境。

机器上安装 Docker, 演示机器的 Docker version 24.0.7 版本

准备1台4C4G的机器,当然机器资源越大越好,Skywalking也更顺畅的运行。

安装 Python3 环境,创建 MySQL 5.7的数据库,推荐使用 Docker 方式安装,方便快捷。

官网对安装机器的条件:https://skywalking.apache.org/docs/skywalking-showcase/next/readme/

使用端口说明:

  • ES 9200, 9300
  • SkyWalking-oap 12800,11800, 应用程序上报使用的端口 gRPC 使用
    • 11800 端口 与 SkyWalking的 gRPC 通信
    • 12800 端口 与 SkyWalking的 HTTP 通信
  • SkyWalking-UI 8085

3.2 先安装ElasticSearch7.X

ElasticSearch 简称ES。

安装ES7版本,docker容器化部署-单节点。

mkdir -p /mydata/es/config  # 创建 es配置目录
mkdir -p /mydata/es/data    # 创建数据存储目录
chmod 777 -R /mydata/es     # 给文件赋权,这里演示使用,真实环境不建议使用777权限
echo "http.host: 0.0.0.0" >> /mydata/es/config/elasticsearch.yml # 创建es yml配置文件
echo "7dgroup.test_interval: 2000" >> /mydata/es/config/elasticsearch.yml # 控制刷新频率 2000
echo "7dgroup.query.bool.max_clause_count: 1024" >> /mydata/es/config/elasticsearch.ymldocker run -d --name es7 \-p 9200:9200 -p 9300:9300 \-e "discovery.type=single-node" \-e ES_JAVA_OPTS="-Xms512m -Xmx512m" \-v /mydata/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \-v /mydata/es/data:/usr/share/elasticsearch/data \-v /mydata/es/plugins:/usr/share/elasticsearch/plugins elasticsearch:7.6.2

参数说明

  • -e “discovery.type=single-node” 设置为单节点
  • -e ES_JAVA_OPTS=“-Xms512m -Xmx512m” 设置ES的初始内存和最大内存,否则过大启动不了ES

注意:这时候会提示权限不够需要开启权限:

  • chmod 777 -R /mydata/es
  • 登录http://ip:9200/_cat/nodes?v=true&pretty
  • 记得开放网络安全组 9200 9300,因为我这里是演示机器,端口全开。

在这里插入图片描述
访问 http://ip:9200/_cat/nodes?v=true&pretty ES验证是否安装成功。
在这里插入图片描述
验证是否已经安装成功:
在这里插入图片描述

出现图片以上的内容,说明ES安装成功。

3.3 Skywalking-OAP 安装

docker run --name oap \--restart always -d \-e TZ=Asia/Shanghai \-p 12800:12800 \-p 11800:11800 \--link es7 \-e SW_STORAGE=elasticsearch7 \-e SW_STORAGE_ES_CLUSTER_NODES=es7:9200 apache/skywalking-oap-server:8.5.0-es7

参数:

  • –link :alias ,添加到另一个容器的链接,可以添加别名或者不加
  • –link后面的参数和elasticsearch容器名一致;
  • SW_STORAGE=elasticsearch7 是固定的,使用es7;
  • SW_STORAGE_ES_CLUSTER_NODES:es7 也可改为 es 服务器部署的Ip地址,比如ip:9200

3.4 Skywalking-UI 界面安装

docker run -d --name skywalking-ui \--restart always \-e TZ=Asia/Shanghai \-p 9000:8080 \--link oap \-e SW_OAP_ADDRESS=zt_oap:12800 \apache/skywalking-ui:8.5.0

查看 SkyWalking-UI,SkyWalking-oap, ES 在 docker 容器里面都起来了

3.5 访问页面检查SkyWalking是否可以访问

Google 浏览器可以正常访问,Egde浏览器,却访问不了,需要注意避坑,能看到 ip:9000 端口访问到SkyWalking可以正常打开,接下来需要在项目里面插入 SkyWalking 插桩就能上报数据到 SkyWalking 监控中。
在这里插入图片描述

四、Python 项目接入SkyWalking

4.1 演示项目代码

这里演示使用,使用 Python fastapi 【注册,登录,查询用户列表】功能来演示。

# -*- coding: UTF-8 -*-from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmakerfrom SkyWalkingimport agent, configconfig.init(agent_collector_backend_services="10.249.29.16:11800",agent_name="fastapi",
)
#config.SW_AGENT_LOGGING_LEVEL = "DEBUG"
config.plugin_fastapi_collect_http_params = True
#agent.start()app = FastAPI()# 创建数据库连接
# SQLALCHEMY_DATABASE_URL = "sqlite:///users.db"
SQLALCHEMY_DATABASE_URL = "mysql+pymysql://root:abc123456@10.249.29.16:3306/users" # 这里的数据库用于测试engine = create_engine(SQLALCHEMY_DATABASE_URL)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base = declarative_base()# 定义数据模型
class User(Base):__tablename__ = "users"id = Column(Integer, primary_key=True, index=True)username = Column(String(100), unique=True, index=True)password = Column(String(50))# 创建数据库表
Base.metadata.create_all(bind=engine)# 注册(Create User)
class CreateUserRequest(BaseModel):username: strpassword: str@app.post("/register")
def register(user: CreateUserRequest):db = SessionLocal()db_user = db.query(User).filter(User.username == user.username).first()if db_user:raise HTTPException(status_code=409, detail="Username already registered")new_user = User(username=user.username, password=user.password)db.add(new_user)db.commit()db.refresh(new_user)return {"message": "User registered successfully"}# 登录(User Login)
class UserLoginRequest(BaseModel):username: strpassword: str@app.post("/login")
def login(user: UserLoginRequest):db = SessionLocal()db_user = db.query(User).filter(User.username == user.username).first()if not db_user or db_user.password != user.password:raise HTTPException(status_code=401, detail="Invalid username or password")return {"message": "Login successful"}# 查询全部用户(Get All Users)
@app.get("/users")
def get_all_users():db = SessionLocal()users = db.query(User).all()return users# if __name__ == "__main__":
#     import uvicorn
#
#     uvicorn.run("main:app", host="127.0.0.1", port=8085, reload=True)

先上传代码至服务器上,安装依赖包。

Dockerfile:

pip3 install fastapi pydantic sqlalchemy pymysql apache-skywalking

4.2 验证 sw-python

验证环境是否可用,先验证 SkyWalking 的 Python 包是否安装成功。

4.3 配置依赖

官网介绍:https://skywalking.apache.org/docs/skywalking-python/next/en/setup/cli/

配置环境变量

Dockerfile:

export SW_AGENT_COLLECTOR_BACKEND_SERVICES=10.249.29.16:11800

4.4 启动fastapi 项目

Dockerfile:

sw-python run -p uvicorn main:app --host '0.0.0.0' --port 8083 --reload

在这里插入图片描述

访问ip:8083/docs。
在这里插入图片描述

3.5 发送请求

发送请求,注册,登录,查询用户列表,以下是命令行请求,也可以访问 ip:8083/docs swagger 接口去请求。

Dockerfile:

# 注册时需要注意 username 不能重复
curl -X 'POST' \'http://10.249.29.16:8083/register' \-H 'accept: application/json' \-H 'Content-Type: application/json' \-d '{"username": "test3","password": "123456"
}'# 登录
curl -X 'POST' \'http://10.249.29.16:8083/login' \-H 'accept: application/json' \-H 'Content-Type: application/json' \-d '{"username": "test3","password": "123456"
}'# 查询用户列表
curl -X 'GET' \'http://10.249.29.16:8083/users' \-H 'accept: application/json'

4.6 SkyWalking 查看请求信息

在这里插入图片描述
在这里插入图片描述

到这里已经全部演示完毕,看会不等于学会,实操才能战胜恐惧。

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

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

相关文章

AI会议时代:企业如何搭上快车?

“我 们认为,AI绝不仅是会议的辅助工具,而更会是重塑会议流程的关键力量。通过AI的个性化定制、大规模支持、智能分析这些技术,AI会议将大大提升会议的智能化与高效性,进而成为企业数字化转型的核心驱动力。” 作者|斗斗 编辑…

webdav解说

WebDAV(Web Distributed Authoring and Versioning)是一种基于HTTP/1.1协议的扩展,它允许用户通过网络进行文件的上传、删除、编辑等操作,从而实现远程文件管理。 WebDAV 是一种网络文件共享协议,它扩展了HTTP协议&am…

THREE.JS法线Shader

以普通情况而论 vNormal normal;//...gl_FragColor vec4( vNormal, 1. );vNormal normal;//...gl_FragColor vec4( normalize( vNormal ) * 0.5 0.5, 1. );vNormal normalMatrix * normal;//...gl_FragColor vec4( normalize( vNormal ) * 0.5 0.5, 1. );normalMa…

【Java异常】(简简单单拿捏)

【Java异常】(简简单单拿捏) 1. 异常的简单介绍2. 异常的抛出2.1 语法 3. 异常的处理3.1 异常声明throws3.2 try-catch捕获并处理 4. 例子(try-catch自定义异常) 1. 异常的简单介绍 程序员在运行代码时会遇到很多异常&#xff0c…

Linux系统安装MySQL8.40(保姆级教程)

前言: 说明:本文章是在阿里云ecs上安装MySQL,即:Linux是在联网状态下。 一、安装前环境准备 1.查看MySQL应用是否已存在 rpm -qa |grep mysql说明:若返回空信息,就说明当前环境没有安装MySQL。 2.查看ma…

解决方案:如何区分python里面绝对路径跟相对路径的不同

文章目录 一、现象二、解决方案 一、现象 在工作中,会经常混淆绝对路径跟相对路径的区别,我也是找了资料之后就懂了,但时间一长就混淆了,于是,我在这里记录下 二、解决方案 在Python中,绝对路径和相对路…

关于el-card的height设置100%后, el-card内容超出高度后,内容被隐藏这件事

1. 解决方法 全局样式添加以下代码 .el-card__body{height: 100%;width: 100%; }2. 问题原因 代码 <el-card style"height: 100%"><!-- ... --> </el-card>选中.el-card 元素发现这里的 .el-card 的 overflow:hidden 而内部 .el-card__body除…

WiFi无线连接管理安卓设备工具:WiFiADB

介绍 WiFi ADB 使您能够通过 WiFi TCP/IP 连接直接在设备上轻松调试和测试 Android 应用&#xff0c;无需使用 USB 数据线。在启用 WiFi 上的 ADB 后&#xff0c;打开控制台将电脑连接到设备。 手机和电脑在同一个WiFi然后电脑上运行adb connect x.x.x.x:x命令即可 下载 谷…

七段 LED 显示器(7段数码管)

7 段 LED 显示器, 通常简称为 LED 数码管 或 数码管. 通过 菜单--绘制--数字芯片--添加 7 段 LED 显示器 可以引入它. 普通模式 它内部其实就是七盏长条状的 LED 灯, 有的横着放, 有的竖着放. 七个灯用 a b c d e f g 分别表示. 灯的位置从上到下, 从里到外顺时针下来, 如上图…

青年女演员白澜闪耀亮相第五届庐山电影节红毯

2024年9月25日&#xff0c;演员白澜受邀出席了第五届庐山电影节盛典晚会&#xff0c;在这个星光熠熠的夜晚&#xff0c;青年演员白澜以一袭精心设计的礼服惊艳亮相&#xff0c;成为红毯瞩目的焦点。 整个第五届庐山国际爱情电影周以“庐山&#xff0c;你的爱情靠山”为主题&…

帆软通过JavaScript注入sql,实现数据动态查询

将sql语句设置为参数 新建数据库查询 设置数据库查询的sql语句 添加控件 JavaScript实现sql注入 添加事件 编写JavaScript代码 //获取评价人id var pjrid this.options.form.getWidgetByName("id").getValue();//显示评价人id alert("评价人&#xff1a;&…

re轻松拆分四则运算expression(^从头匹配、(?:xxxx)非捕获组、| 交替运算符联合演习)

与ai对抵聊“算式匹配”&#xff0c;发现^从头匹配、(?:xxxx)非捕获组、| “交替”运算符联合使用的妙处。 (笔记模板由python脚本于2024年09月27日 18:35:32创建&#xff0c;本篇笔记适合喜欢python喜欢正则的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;…

【RabbitMQ】死信队列、延迟队列

死信队列 死信&#xff0c;简单理解就是因为种种原因&#xff0c;无法被消费的消息。 有死信&#xff0c;自然就有死信队列。当一个消息在一个队列中变成死信消息之后&#xff0c;就会被重新发送到另一个交换器中&#xff0c;这个交换器就是DLX&#xff08;Dead Letter Excha…

连锁收银系统的五大功能 选择开源收银系统三要素

连锁收银系统的五大功能&#xff0c;很多新手是不清楚的&#xff0c;老手也只是知道一些大概&#xff0c;今天&#xff0c;商淘云为大家分享收银系统的五大功能&#xff0c;尤其是第五个&#xff0c;大部分人不清楚&#xff0c;有的企业前面选了不合适的收银系统&#xff0c;导…

如何在iPad上设置Chrome为默认浏览器

将Chrome设置为iPad上的默认浏览器&#xff0c;不仅能够享受到谷歌强大的搜索功能和丰富的扩展生态&#xff0c;还能通过一系列自定义设置来进一步提升浏览体验。本文将详细介绍如何在iPad上完成这一设置&#xff0c;并探讨如何通过优化Chrome浏览器的相关功能&#xff0c;让您…

c语言200例 64

大家好&#xff0c;欢迎来到无限大的频道。 今天带领大家来学习c语言。 题目要求&#xff1a; 设计一个进行候选人的选票程序。假设有三位候选人&#xff0c;在屏幕上输入要选择的候选人姓名&#xff0c; 有10次投票机会&#xff0c;最后输出每个人的得票结果。好的&#xff…

【LLM多模态】视频理解模型Cogvlm-video和MVBench评测基准

note Cogvlm-video模型通过视频抽帧&#xff08;24帧&#xff0c;每帧大小为224 x 224&#xff09;后经过ViT进行图像编码&#xff08;ViT中添加了2x2的卷积核更好的压缩视觉信息&#xff09;&#xff0c;使用adapter模块更好的将视觉特征和文本特征对齐&#xff0c;得到的图像…

5--苍穹外卖-SpringBoot项目中菜品管理 详解(一)

目录 公共字段自动填充 问题分析 实现思路 代码开发 步骤一 步骤二 功能测试 新增菜品 需求分析和设计 代码开发 文件上传接口 功能测试 1--苍穹外卖-SpringBoot项目介绍及环境搭建 详解-CSDN博客 2--苍穹外卖-SpringBoot项目中员工管理 详解&#xff08;一&#…

python绘制图像

柱状图 import os# 输入想要存储图像的路径 os.chdir(D:)import matplotlib.pyplot as plt import numpy as np # 改变绘图风格 import seaborn as snssns.set(color_codesTrue)cell [gen7, xgspon, 3081GB, vettel, totalplay, other] pvalue [21, 20, 18, 13, 7, 34]width…

【GUI设计】基于图像分割的GUI系统(6),matlab实现

博主简介&#xff1a; 如需获取设计的完整源代码或者有matlab图像代码项目需求/合作&#xff0c;可联系主页个人简介提供的联系方式或者文末的二维码。博客内容有疑问可联系沟通&#xff08;博主邮箱&#xff1a;3249726188qq.com&#xff09;。 ~~~~~~~~~~~~~~~~~~~~~~~…