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/
下载:skywalking.apache.org/downloads/
Github:https://github.com/apache/skywalking
文档:https://skywalking.apache.org/docs/
中文文档:https://skyapm.github.io/document-cn-translation-of-skywalking/
SkyWalking 在 Python 项目中的使用
SkyWalking Python Agent 支持 Apache SkyWalking 的 Python 代理为 Python 项目提供本机跟踪/指标/日志记录/分析功能。
部署 SkyWalking
部署 SkyWalking 需要三个组件 sky-elasticsearch,skywalking-oap,skywalking-ui.
采用 docker-compose 部署
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
查询容器状态
浏览器打开ip:8888 进入skywalking的UI页面
下载和安装 python 的 agent
python agent 安装文档:https://skywalking.apache.org/docs/skywalking-python/latest/readme/
注意:SkyWalking Python 代理需要 SkyWalking 8.0+ 和 Python 3.7+
安装方式
PypI 安装
# 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 映像即可。
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 实践,这在许多情况下可能很乏味,并且在使用时可能会导致问题与预分叉服务器
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 一起使用: https://skywalking.apache.org/docs/skywalking-python/latest/en/setup/faq/how-to-use-with-uwsgi/
如何与 Gunicorn 一起使用:https://skywalking.apache.org/docs/skywalking-python/latest/en/setup/faq/how-to-use-with-gunicorn/
使用方法
通过 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
settings.py
from sky_script.sky_middleware import *
ALLOWED_HOSTS = ["*"]
新建init_sky文件
# 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()
原文始发于微信公众号(有追求的开发者):Python 项目监控利器:SkyWalking 全景解析与实战应用
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/256907.html