Python 项目监控利器:SkyWalking 全景解析与实战应用

Python 项目监控利器:SkyWalking 全景解析与实战应用
92569844684d8a59d2ab2db52b20cbac
Python 项目监控利器:SkyWalking 全景解析与实战应用
image

SkyWalking 是什么?

官方摘要

SkyWalking 是一个开源的 APM 系统,为云原生架构中的分布式系统提供监控、跟踪和诊断功能。

分布式追踪

端到端分布式跟踪。服务拓扑分析、以服务为中心的可观察性和 API 仪表板。

您堆栈的代理

Java、.Net Core、PHP、NodeJS、Golang、LUA、Rust、C++、客户端 JavaScriptPython 代理,具有积极的开发和维护能力。

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-elasticsearchskywalking-oapskywalking-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查询容器状态

Python 项目监控利器:SkyWalking 全景解析与实战应用
image

浏览器打开ip:8888 进入skywalking的UI页面

Python 项目监控利器:SkyWalking 全景解析与实战应用
image

下载和安装 python 的 agent

Python 项目监控利器:SkyWalking 全景解析与实战应用
image

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 也可能会阻止代理在子进程中加载 。

已知的限制

  1. 对于某些 shell 中涉及双引号的参数,CLI 可能无法正常工作。
  2. 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 全景解析与实战应用
image
Python 项目监控利器:SkyWalking 全景解析与实战应用
image
Python 项目监控利器:SkyWalking 全景解析与实战应用
image


原文始发于微信公众号(有追求的开发者):Python 项目监控利器:SkyWalking 全景解析与实战应用

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/256907.html

(0)
李, 若俞的头像李, 若俞

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!