性能监控之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.xdnf.cn/news/1545114.html

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

相关文章

【最基础最直观的排序 —— 选择排序算法】

最基础最直观的排序 —— 选择排序算法 选择排序算法是一种简单直观的排序算法。其基本思想是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最小&a…

模型Alignment之RLHF与DPO

1. RLHF (Reinforcement Learning from Human Feedback) RLHF 是一种通过人类反馈来强化学习的训练方法,它能够让语言模型更好地理解和执行人类指令。 RLHF 的三个阶段 RLHF 的训练过程一般分为三个阶段: 监督微调(Supervised Fine-Tuning,…

echarts 导出pdf空白原因

问题阐述 页面样式: 导出pdf: 导出pdf,统计图部分为空白。 问题原因 由于代码中进行了dom字符串的复制,而echarts用canvas绘制,canvas内部内容不会进行复制,只会复制canvas节点,因此导出pdf空白。 解决…

1. IP地址介绍

IP地址 一、网络概述1、网络类型2、网络组成、传输介质2.1 组成2.2 传输介质 二、IP地址1、IP地址的表示方法2、IP地址的组成3、IP地址的类型3.1 根据IP地址第一个字节大小来分3.1.1 单播地址 Unicast 3.2 根据IP地址的使用 三、子网掩码 netmask1、默认的子网掩码2、判断多个I…

游戏开发2025年最新版——八股文面试题(unity,虚幻,cocos都适用)

1.静态合批与动态合批的原理是什么?有什么限制条件?为什么?对CPU和GPU产生的影响分别是什么? 原理:Unity运行时可以将一些物体进行合并,从而用一个描绘调用来渲染他们,就是一个drawcall批次。 限…

MyBatis—Plus 快速上手【后端 22】

MyBatis-Plus 使用入门指南 前言 在Java的持久层框架中,MyBatis因其灵活性和易用性而广受欢迎。然而,随着项目规模的扩大,MyBatis的一些重复性工作(如CRUD操作)开始显得繁琐。为了解决这一问题,MyBatis-Pl…

图论系列(dfs)9/24

岛屿问题: 二叉树dfs遍历的框架代码: 要有一个终止条件、访问相邻节点; public void dfs(Treenode root){if(rootnull)return;dfs(root.left);dfs(root.right);} 网格dfs遍历的框架代码: public void dfs(int[][] grid,int x,int y){//如果x、y坐标不在网格里面 …

专业学习|随机规划概观(内涵、分类以及例题分析)

一、随机规划概览 (一)随机规划的定义 随机规划是通过考虑随机变量的不确定性来制定优化决策的一种方法。其基本思想是在决策过程中,目标函数和约束条件可以包含随机因素。 (1)重点 随机规划的中心问题是选择参数&am…

学习一下怎么用git

目录 初始化操作 设置名字: 设置邮箱: 查询状态 初始化本地仓库 清空git bush控制台 git的三个区域 文件提交 将会文件提交到暂存区 暂存指定文件 暂存所有改动文件 查看暂存区里面的文件 将文件提交到版本库 git文件状态查看 ​编辑 暂存区的相关指令…

时序预测:LSTM、ARIMA、Holt-Winters、SARIMA模型的分析与比较

引言 近年来,民航旅客周转量一直是衡量国家或地区民航运输总量的重要指标之一。为了揭示民航旅客周转量背后的规律和趋势,本研究旨在综合分析1990年至2023年的相关数据。 通过单位根检验和序列分解,我们确定了民航旅客周转量数据的非平稳性&…

MySQL(面试题 - 同类型归纳面试题)

目录 一、MySQL 数据类型 1. 数据库存储日期格式时,如何考虑时区转换问题? 2. Blob和text有什么区别? 3. mysql里记录货币用什么字段类型比较好? 4. MySQL如何获取当前日期? 5. 你们数据库是否支持emoji表情存储&…

也遇到过 PIL Image “image file is truncated“的问题

背景前言 属于活久见系列,最近工作上遇了该问题! 背景:前端 APP使用 Android CameraX 的接口,拍摄并上传图片,然后 Python后端服务对图片裁剪与压缩处理。后端服务处理图片时有遇到image file is truncated的情况。还…

Leetcode 螺旋矩阵

算法思想: 这个算法的目标是按照顺时针螺旋的顺序从矩阵中取出元素。为了做到这一点,整个思路可以分成几个关键步骤: 定义边界:首先需要定义四个边界变量: left:当前左边界的索引。right:当前右…

R语言机器学习遥感数据处理与模型空间预测技术及实际项目案例分析

随机森林作为一种集成学习方法,在处理复杂数据分析任务中特别是遥感数据分析中表现出色。通过构建大量的决策树并引入随机性,随机森林在降低模型方差和过拟合风险方面具有显著优势。在训练过程中,使用Bootstrap抽样生成不同的训练集&#xff…

夜间车辆 信号灯识别检测数据集 共3500张 YOLO数据集

夜间车辆 信号灯识别检测数据集 共3500张 YOLO数据集 夜间车辆与交通信号识别检测数据集(Nighttime Vehicle & Traffic Signal Recognition Dataset) 数据集概述 这是一个专为夜间环境设计的车辆和交通信号识别检测数据集,共包含3500张…

将python代码文件转成Cython 编译问题集

准备setup.py from distutils.core import setup from Cython.Build import cythonize import glob# 指定目标目录 python setup.py build -c mingw32 target_dir "src"# 使用glob模块匹配目录中的所有.pyx文件 pyx_files glob.glob(target_dir "/**/*.py&q…

基于STM32F103C8T6单片机的农业环境监测系统设计

本设计是基于STM32F103C8T6单片机的农业环境监测系统,能够完成对作物的生长环境进行信息监测和异常报警,并通过手机APP来实现查看信息和设定阈值的功能。为了实现设计的功能,该系统应该有以下模块:包括STM32单片机模块、水环境PH值…

STM32基础学习笔记-ADC面试基础题6

第六章、ADC 常见问题 1、基本概念:什么是ADC ?作用 ?逐次逼近型 2、传感器本质 ?传感器、电压、ADC数值转化 ? 3、ADC的特征 ? 转化时间、分辨率、精度、量化误差 ? 4、ADC框图组成部分 &…

如何安全有效地进行Temu自养号测评,提升账号权重防关联

在当今市场环境中,许多现成的系统或软件包往往缺乏全面的风险控制能力。掌握自养号测评技术,确保在运营过程中减少对外部系统的依赖。以下是搭建安全、高效运营环境的详细指导,特别针对手机端与电脑端环境的设置,以及关键资源的获…

计算机毕业设计Hadoop+Spark知识图谱体育赛事推荐系统 体育赛事热度预测系统 体育赛事数据分析 体育赛事可视化 体育赛事大数据 大数据毕设

《HadoopSpark知识图谱体育赛事推荐系统》开题报告 一、研究背景及意义 随着互联网技术的迅猛发展和大数据时代的到来,体育赛事数据的数量呈爆炸式增长。用户面对海量的体育赛事信息,常常感到信息过载,难以快速找到感兴趣的赛事内容。如何高…