Walkingfunny探针安装-Python

北海 1年前 ⋅ 1358 阅读
ad

Python探针为Python服务提供了原生的链路追踪/指标/日志能力。

安装

Python探针要求被监控的版本为Python 3.7+。

你可通过本节后面的多种方法来安装Python探针。

如果已安装了探针,请按照对应的方式来启动探针:
非侵入式 
所有可用配置参数请见这里

如果还未安装探针,请从下面选择合适的方法来安装探针。

通过 PyPI 安装

如果想尝试还未发布的最新功能,请阅读这篇指南来从源码构建。

Python探针模块发布到了PyPI,所以可以用 pip安装:

# 安装最新版本,使用默认的 gRPC 协议上报数据给OAP(Walkingfunny主服务)
pip install "apache-skywalking"

# 为每个协议(gRPC,HTTP,Kafka)安装支持
pip install "apache-skywalking[all]"

# 安装最新版本,使用 HTTP 协议上报数据给OAP
pip install "apache-skywalking[http]"

# 安装最新版本,使用 Kafka 协议上报数据给OAP
pip install "apache-skywalking[kafka]"

# 安装特定的版本 x.y.z
# pip install apache-skywalking==x.y.z
# 例如,无论最新版本是什么,安装 0.1.0 版本
pip install apache-skywalking==0.1.0

通过 Docker Hub 安装

Python探针提供方便的 dockerfile 和镜像,以便利用其自动引导功能轻松集成。

只需根据所需的探针版本、协议和 Python 版本从 Docker Hub 中拉取我们的 Python 映像。

# 方式一:使用标准镜像(胖镜像)

FROM apache/skywalking-python:0.8.0-grpc-py3.10

# ... 在这里构建你的Python应用

# 方式二:若更想要紧凑的镜像,可使用下面的镜像,它是基于官方的Python瘦镜像(slim image)构建的

FROM apache/skywalking-python:0.8.0-grpc-py3.10-slim

# ... 在这里构建你的Python应用

之后,可基于我们启用了探针的Python镜像(即上面拉取的镜像)构建你自己的Python应用镜像,在启动你的应用后Python探针也会同时启用。

更多集成和配置的说明,请参阅容器化指南

通过源码安装

Skywalking官方网站下载源码 tar 包,并执行下面的命令来从源码构建。

确保你有 Python 3.7+ 并且 python3 命令可用。

$ tar -zxf skywalking-python-src-<version>.tgz
$ cd skywalking-python-src-<version>
$ make install

如果因为某些原因你想基于 GitHub 的最新源码构建,比如尝试尚未正式发布的功能,请从 GitHub 克隆源码并 make install

$ git clone https://github.com/apache/skywalking-python
$ cd skywalking-python
$ git submodule update --init
$ make install

注意只有这个网站的发布是官方的 Apache 发行版。

集成

在探针安装完成后,可按照下面方式中的一种来设置和启动探针。

如果还未安装Python探针,请先安装Python探针

非侵入式设置(推荐)

现在,Python探针命令行界面(CLI)是使用Python探针的推荐方式,该CLI经过了完善的测试并被所有的探针 E2E 以及插件测试所使用。

在 0.7.0 之前的版本中,为了添加和运行探针,你至少需要将以下代码行添加到你的应用程序中。这在许多情况下,会因为大量的服务、DevOps 实践而导致乏味的工作,并且在与 prefork 服务器一起使用时可能会导致问题。

from skywalking import agent, config
config.init(SomeConfig)
agent.start()

在现在的版本中,Python探针实现了一个命令行界面,可用于在部署期间将探针附加到你的应用程序中,而无需更改任何程序代码,就像Java探针一样。

在 v1.0.0 中添加了下面的实验性功能,因此你需要在 sw-python run -p 中使用 -p 标记。将来,此标志将被删除,探针将以更全面的方式自动启用对 prefork/fork 的支持。

特别是随着新的自动 postfork 注入功能,你不用再担心线程和 fork 不兼容。

如果要理解什么是 post_fork,为什么你需要它们,以及如何轻松克服 sw-python CLI 问题等内容的详细背景,可以查看如何与uWSGI一起使用以及如何与Gunicorn一起使用

你仍应阅读集成探针的传统方法,以防 sw-python CLI 不适合你。

用法

通过 pip 成功安装 Python 探针后,你的环境(首选虚拟环境)中安装了命令行脚本 sw-python

运行 sw-python 以查看它是否可用,你需要通过环境变量传递配置参数。

例如:export SW_AGENT_COLLECTOR_BACKEND_SERVICES=localhost:11800

run 选项

sw-python CLI 提供了一个 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

Python 探针将很快与你的所有应用程序工作线程一起启动。

请注意,只要继承了 PYTHONPATHsw-python 就适用于生成的子进程(os.exec*/subprocess)。

此外,当你的应用程序是多线程时,只要开启 SW_AGENT_EXPERIMENTAL_FORK_SUPPORT(当检测到 gunicorn 时它会自动开启),sw-python 启动探针就适用于 os.fork

配置探针

如果需要设置比默认配置更多的配置参数,可通过下列方式实现。

通过环境变量

当前支持的方式是提供列出的环境变量,并在环境变量列表中进行了说明。

通过 sw-config.toml(待完成)

目前仅支持环境变量配置;未来将实现可选的 toml 配置。

启用 CLI 的 DEBUG 模式

请注意,CLI 是操纵 Python 解释器引导行为的功能,可能存在不受支持的情况。

如果遇到意外问题,请通过在你的 sw-python 命令中添加 -d 或 --debug 标志来打开 DEBUG 模式,如下所示。

从:sw-python run command

改为:sw-python -d run command

如果你认为发现了 bug,欢迎将调试日志附加到SkyWalking Issues,始终欢迎想法讨论拉取请求

补充说明

使用 sw-python run command 执行命令时,命令的 Python 解释器将获取 SkyWalking 的加载器模块。

将探针附加到驻留在另一个 Python 安装包中的命令上是不安全的,因为不兼容的 Python 版本和不匹配的 SkyWalking 版本可能会导致问题。因此,任何使用不同 Python 解释器/环境来传递命令的尝试都不会启动Python探针,即使那里已经安装了另一个Python探针(无论是什么版本),并会强制退出,退出时会显示指出了原因的错误消息。

禁止生成的进程启动新探针

有时,你实际上并不需要探针来监控新进程(当它不是 Web 服务 worker 时)。(这里指的是由子进程和 os.exec*() 生成的进程;os.fork() 不受此标志控制,而是受 experimental_fork_support 控制。)

如果不需要为应用程序子进程加载探针,则可以通过设置环境变量来关闭该行为。

设置 SW_AGENT_SW_PYTHON_BOOTSTRAP_PROPAGATE 为 False

请注意,自动引导程序取决于子进程继承的环境,因此,前置新的 sitecustomize 路径或从 PYTHONPATH 中删除加载程序路径也能阻止探针在子进程中加载。

已知限制
  1. CLI 可能无法正确处理某些 shell 中涉及双引号的参数。
  2. CLI 和引导程序标准输出日志在 Windows shell 中可能会变得混乱。

关于Webfunny

Webfunny专注于前端监控系统,前端埋点系统的研发。 致力于帮助开发者快速定位问题,帮助企业用数据驱动业务,实现业务数据的快速增长。支持H5/Web/PC前端、微信小程序、支付宝小程序、UniApp和Taro等跨平台框架。实时监控前端网页、前端数据分析、错误统计分析监控和BUG预警,第一时间报警,快速修复BUG!支持私有化部署,Docker容器化部署,可支持千万级PV的日活量!

  点赞 0   收藏 0
  • 北海
    共发布16篇文章 获得0个收藏
全部评论: 0