当前位置: 首页 > article >正文

性能监控之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.yml

docker 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 sessionmaker

from SkyWalkingimport agent, config

config.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: str
    password: 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: str
    password: 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.kler.cn/a/319779.html

相关文章:

  • 【论文阅读】Virtual Compiler Is All You Need For Assembly Code Search
  • Sql server查询数据库表的数量
  • 【C++学习(37)】并发性模式:如生产者-消费者、读写锁等。 架构模式:如MVC、MVVM等。属于23 种设计模式吗? RAII 的关系?
  • C++模板特化实战:在使用开源库boost::geometry::index::rtree时,用特化来让其支持自己的数据类型
  • 【Webpack实用指南】如何拆分CSS资源(2)
  • XSS安全基础
  • [java][git]git学习
  • Linux动态库防止逆向编译参数
  • keil的debug功能
  • IT行业的未来:技术变革与创新的持续推动
  • 解决fatal: unable to access ‘https://........git/‘: Recv failure: Operation time
  • ~关于 CAS 机制、ABA问题、偏向锁、synchronized 实现原理、信号量、Callable
  • Prompt最佳实践|如何用参考文本让ChatGPT答案更精准?
  • 深入理解Kubernetes供应链安全:CKS考试核心知识点实践
  • 在 expressjs 中MySQL 的datetime类型,怎么插入数据
  • 使用java实现ffmpeg的各种操作
  • 使用现有的科技或许无法实现对人类智能的模拟
  • 从零开始,Docker进阶之路(一):Docker基础
  • LocalStorage
  • 力扣中等 33.搜索旋转排序数组
  • MySQL中的函数简单总结,以及TCL语句的简单讲解
  • 三范式,面试重点
  • 食品检测与分类系统源码分享
  • 18-pg内核之日志管理器(六)checkpoint
  • 密码管理器介绍
  • 学习篇 | Ollama 安装、运行大模型(CPU 实操版)