92569844684d8a59d2ab2db52b20cbac
image
SkyWalking 是什么?
官方摘要
SkyWalking 是一个开源的 APM 系统,为云原生架构中的分布式系统提供监控、跟踪和诊断功能。
分布式追踪
端到端分布式跟踪。服务拓扑分析、以服务为中心的可观察性和 API 仪表板。
您堆栈的代理
Java、.Net Core、PHP、NodeJS、Golang、LUA、Rust、C++、客户端 JavaScript 和 Python 代理,具有积极的开发和维护能力。
eBPF 早期采用
Rover 代理充当由 eBPF 提供支持的监视器和分析器,用于监视 Kubernetes 部署并诊断 CPU 和网络性能。
缩放
一个 SkyWalking 集群可以收集和分析超过 1000 亿个遥测数据。
支持成熟的遥测生态系统
支持来自成熟生态系统的指标、跟踪和日志,例如 Zipkin、OpenTelemetry、Prometheus、Zabbix、Fluentd
原生 APM 数据库
BanyanDB 是一个可观测性数据库,创建于 2022 年,旨在摄取、分析和存储遥测/可观测数据。
一致的指标聚合
SkyWalking 原生计量格式和众所周知的计量格式(例如 OpenTelemetry、Telegraf、Zabbix)通过相同的脚本管道进行处理。
日志管理管道
通过脚本管道高性能支持日志格式化、提取指标、各种采样策略。
警报和遥测管道
支持以服务为中心、以部署为中心、以 API 为中心的报警规则设置。支持将警报和所有遥测数据转发给第三方。
SkyWalking 介绍
Apache Skywalking 是一款开源的应用程序性能监控工具,旨在帮助开发人员和 DevOps 团队监控分布式应用程序的性能。它可以帮助用户了解应用程序的运行情况,并通过可视化图形和数据报告,提供实时的指标和分析。
Skywalking 支持多种语言和框架,包括 Java、Go、Node.js 和 Python。它使用分布式追踪技术来监控应用程序内部和外部的所有调用,从而获得关于应用程序性能的完整见解。
Skywalking 提供了一系列强大的功能,包括性能监控、故障诊断和调试、数据分析等。它还提供了警报功能,当发生重要的性能问题时,可以向开发人员和 DevOps 团队发送通知。
Skywalking 还具有很好的可扩展性,可以与其他应用程序性能监控工具,如 Grafana 和 Elasticsearch 集成,从而提供更加强大的监控和分析能力。
总之,Apache Skywalking 是一款功能强大且易于使用的应用程序性能监控工具。它可以帮助开发人员和 DevOps 团队更好地了解应用程序的运行情况,并在发生性能问题时及时采取行动。
下载:skywalking.apache.org/downloads/
Github:github.com/apache/skyw...
文档:skywalking.apache.org/docs/
中文文档:skyapm.github.io/document-cn...
SkyWalking 在 Python 项目中的使用
SkyWalking Python Agent 支持 Apache SkyWalking 的 Python 代理为 Python 项目提供本机跟踪/指标/日志记录/分析功能。
部署 SkyWalking
部署 SkyWalking 需要三个组件 sky-elasticsearch ,skywalking-oap ,skywalking-ui.
采用 docker-compose 部署
yaml
version: '3.5'
services:
sky-elasticsearch:
image: elasticsearch:6.8.1
container_name: sky-elasticsearch
restart: always
ports:
- 19200:9200
environment:
discovery.type: single-node #es单机模式
TZ: Asia/Shanghai #时区设置
TAKE_FILE_OWNERSHIP: true #解决 volumes 挂载权限问题
ES_JAVA_OPTS: -Xms256m -Xmx256m ##jvm内存分配为256MB
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- ./elasticsearch/data:/usr/share/elasticsearch/data
oap:
image: apache/skywalking-oap-server:8.5.0-es6
container_name: skywalking-oap
depends_on:
- sky-elasticsearch
links:
- sky-elasticsearch
restart: always
ports:
- 11800:11800
- 12800:12800
environment:
SW_STORAGE: elasticsearch
SW_STORAGE_ES_CLUSTER_NODES: sky-elasticsearch:9200
SW_HEALTH_CHECKER: default
SW_TELEMETRY: prometheus
healthcheck:
test: ["CMD", "./bin/swctl", "ch"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
ui:
image: apache/skywalking-ui:8.5.0
container_name: skywalking-ui
depends_on:
- oap
links:
- oap
restart: always
ports:
- 8888:8080
environment:
SW_OAP_ADDRESS: oap:12800
docker-compose up -d
启动容器编排即可
docker-compose ps
查询容器状态
image
浏览器打开ip:8888 进入skywalking的UI页面
image
下载和安装 python 的 agent
image
python agent 安装文档:skywalking.apache.org/docs/skywal...
注意:SkyWalking Python 代理需要 SkyWalking 8.0+ 和 Python 3.7+
安装方式
PypI 安装
vbnet
# Install the latest version, using the default gRPC protocol to report data to OAP
pip install "apache-skywalking"
# Install support for every protocol (gRPC, HTTP, Kafka)
pip install "apache-skywalking[all]"
# Install the latest version, using the http protocol to report data to OAP
pip install "apache-skywalking[http]"
# Install the latest version, using the kafka protocol to report data to OAP
pip install "apache-skywalking[kafka]"
# Install a specific version x.y.z
# pip install apache-skywalking==x.y.z
pip install apache-skywalking==0.1.0 # For example, install version 0.1.0 no matter what the latest version is
Docker 安装
SkyWalking Python 代理提供方便的 dockerfile 和图像,以便利用其自动引导功能轻松集成。
只需根据所需的代理版本、协议和 Python 版本从 Docker Hub 中提取 SkyWalking Python 映像即可。
bash
FROM apache/skywalking-python:0.8.0-grpc-py3.10
# ... build your Python application
# If you prefer compact images (built from official Python slim image)
FROM apache/skywalking-python:0.8.0-grpc-py3.10-slim
然后,您可以基于我们启用代理的 Python 映像构建您的 Python 应用程序映像,并在为您启用 SkyWalking 代理的情况下启动您的应用程序。请参阅我们的 容器化指南,了解有关集成和配置的更多说明。
非倾入式安装【推荐】
SkyWalking Python 代理命令行界面 (sw-python CLI) 现在,SkyWalking Python Agent CLI 是使用 Python 代理运行应用程序的推荐方式,该 CLI 经过充分测试并被所有代理 E2E 和插件测试使用。
在 0.7.0 之前的版本中,您至少需要将以下几行添加到您的应用程序中才能连接并运行代理,由于大量服务、DevOps 实践,这在许多情况下可能很乏味,并且在使用时可能会导致问题与预分叉服务器
arduino
from skywalking import agent, config
config.init(SomeConfig)
agent.start()
SkyWalking Python 代理实现了一个命令行界面,可用于在部署期间将代理附加到您出色的应用程序,而无需更改任何应用程序代码,就像 SkyWalking Java 代理一样。 特别是有了新的自动 postfork 注入功能,您不再需要担心线程和 fork 不兼容的问题。
查看如何与 uWSGI 一起使用 和如何与 Gunicorn 一起使用,了解 post_fork 的详细背景、为什么需要它们以及如何轻松克服 sw-pythonCLI 的麻烦。
如果 CLI 不适合您,您仍然应该阅读集成代理的传统方法。sw-python
如何与 uWSGI 一起使用 : skywalking.apache.org/docs/skywal...
如何与 Gunicorn 一起使用 :skywalking.apache.org/docs/skywal...
使用方法
通过 pip 成功安装 SkyWalking Python 代理 sw-python 后,将在您的环境中安装命令行脚本(首选虚拟环境)。
❝
运行 sw-python 看看它是否可用,您将需要通过环境变量传递配置。
例如:export SW_AGENT_COLLECTOR_BACKEND_SERVICES=localhost:11800
选项 run_
CLI sw-python
提供了一个 run 选项,您可以使用它来执行应用程序(以命令开头 python 或以路径上的基于 Python 的程序 gunicorn 开头),就像您正常调用它们一样,加上前缀,以下示例演示了用法。
如果您之前运行 Gunicorn/uwsgi 应用程序的命令是:
gunicorn your_app:app --workers 2 --worker-class uvicorn.workers.UvicornWorker --bind 0.0.0.0:8088
或者
uwsgi --die-on-term --http 0.0.0.0:5000 --http-manage-expect --master --workers 3 --enable-threads --threads 3 --manage-script-name --mount /=main:app
请将其更改为(该-p 选项在每个进程中启动一个代理,这是正确的行为):
重要提示:如果对 uwsgi/gunicorn 的调用以其他命令为前缀,则此方法将失败,因为代理当前将在索引 0 处查找命令行输入以确保安全,作为实验性功能。
sw-python run -p gunicorn your_app:app --workers 2 --worker-class uvicorn.workers.UvicornWorker --bind 0.0.0.0:8088
或者
sw-python run -p uwsgi --die-on-term --http 0.0.0.0:5000 --http-manage-expect --master --workers 3 --enable-threads --threads 3 --manage-script-name --mount /=main:app
SkyWalking Python 代理很快就会与您的所有应用程序工作人员一起启动。
请注意,sw-python 只要是 PYTHONPATH 继承的,也可以使用生成的子进程 (os.exec*/subprocess)。
此外,只要打开了应用程序分叉工作线程,sw-python 启动代理就可以很好地工作。(检测到 gunicorn 时会自动开启)os.forkSW_AGENT_EXPERIMENTAL_FORK_SUPPORT
配置代理
您通常需要提供除默认配置之外的其他配置。
通过环境变量
当前支持的方法是提供环境变量列表中列出和解释的环境变量。
通过 sw-config.toml(待定)
目前仅支持环境变量配置;toml 将实施可选配置。
启用 CLI 调试模式 请注意,CLI 是一项操作 Python 解释器引导行为的功能,可能存在不受支持的情况。
如果遇到意外问题,请通过在命令中添加-d 或--debug 标志来打开调试模式 sw-python,如下所示。
从:sw-python run command
到:sw-python -d run command
附加说明
当使用 执行命令时 sw-python run command,命令的 Python 解释器将拾取 SkyWalking 加载器模块。
将 SkyWalking Agent 附加到其他 Python 安装中的命令并不安全,因为不兼容的 Python 版本和不匹配的 SkyWalking 版本可能会导致问题。因此,任何尝试传递使用不同 Python 解释器/环境的命令都不会启动 SkyWalking Python 代理,即使那里安装了另一个 SkyWalking Python 代理(无论版本如何),并且会强制退出并显示一条指示原因的错误消息。
禁止生成的进程启动新代理
有时,您实际上并不需要代理来监视新进程中的任何内容(当它不是 Web 服务工作者时)。(这里我们指的是由 subprocess 和 os.exec*() 生成的进程,os.fork() 不受此标志控制,但是 experimental_fork_support)
如果您不需要为应用程序子进程加载代理,则可以通过设置环境变量来关闭该行为。
SW_AGENT_SW_PYTHON_BOOTSTRAP_PROPAGATE 到 False
请注意,自动引导程序取决于子进程继承的环境,因此在其前面添加新的 sitecustomize 路径或从中删除加载程序路径 PYTHONPATH 也可能会阻止代理在子进程中加载 。
已知的限制
- 对于某些 shell 中涉及双引号的参数,CLI 可能无法正常工作。
- CLI 和引导程序标准输出日志在 Windows shell 中可能会变得混乱。
接入 django 项目
新建 django 项目 django-admin startproject sky_django_uwsgi
css
from sky_script.sky_middleware import *
ALLOWED_HOSTS = ["*"]
新建init_sky文件
ini
# my_middleware.py
import os
from skywalking import agent, config
def init_sky():
agent_instance_name = f'<some_good_name>-child({os.getpid()})'
config.init(agent_collector_backend_services='*.*.*.*:11800',
agent_name='sky_django_uwsgi', agent_instance_name=agent_instance_name)
agent.start()
image
image
image