通过SkyWalking上报Python应用数据

通过SkyWalking为应用埋点并上报链路数据至可观测链路 OpenTelemetry 版后,可观测链路 OpenTelemetry 版即可开始监控应用,您可以查看应用拓扑、调用链路、异常事务、慢事务和SQL分析等一系列监控数据。本文介绍如何使用SkyWalking Python Agent进行自动埋点并上报应用数据。

前提条件

  • 下载Apache-skywalking的Python Agent(建议下载最新版本)。

  • 在Python项目中引入Skywalking-python Agent。

  • 获取接入点信息

    新版控制台

    1. 登录可观测链路 OpenTelemetry 版控制台,在左侧导航栏单击接入中心

    2. 开源框架区域单击SkyWalking卡片。

    3. 在弹出的SkyWalking面板中选择数据需要上报的地域。

      说明

      初次接入的地域将会自动进行资源初始化。

    4. 选择连接方式,然后复制接入点信息。

      若您的服务部署在阿里云上,且所属地域与选择的接入地域一致,推荐使用阿里云内网方式,否则选择公网方式。

      image.png

    旧版控制台

    1. 登录可观测链路 OpenTelemetry 版控制台

    2. 在左侧导航栏单击集群配置,然后在右侧页面单击接入点信息页签。

    3. 在页面顶部选择需要接入的地域,然后在集群信息区域打开显示Token开关。

    4. 客户端采集工具区域单击SkyWalking

      相关信息列中,获取接入点信息。

      SkyWalking接入点信息

      说明

      如果应用部署于阿里云生产环境,则选择阿里云VPC网络接入点,否则选择公网接入点。

背景信息

SkyWalking是一款广受欢迎的国产APM(Application Performance Monitoring,应用性能监控)产品,主要针对微服务、Cloud Native和容器化(Docker、Kubernetes、Mesos)架构的应用。SkyWalking的核心是一个分布式追踪系统。

Skywalking-python是SkyWalking的Python Agent官方库,可以通过接入Skywalking-python实现对Python应用的监控,Skywalking-python支持Kafka、HTTP、AIOHTTP、Redis、WebSockets等多种第三方库的自动埋点。

展开查看支持监控的第三方库

Python版本 - 库版本

插件名

aiohttp

Python≥3.7 - 3.7.*

sw_aiohttp

aioredis

Python≥3.7 - 2.0.*

sw_aioredis

aiormq

Python≥3.7 - 6.3、6.4

sw_aiormq

amqp

Python≥3.7 - 2.6.1

sw_amqp

asyncpg

Python≥3.7 - 0.25.0

sw_asyncpg

bottle

Python≥3.7 - 0.12.23

sw_bottle

celery

Python≥3.7 - 5.1

sw_celery

confluent_kafka

Python≥3.7 - 1.5.0、1.7.0、1.8.2

sw_confluent_kafka

django

Python≥3.7 - 3.2

sw_django

elasticsearch

Python ≥3.7 - 7.13、7.14、7.15

sw_elasticsearch

hug

Python ≥3.11 - 暂不支持

Python ≥3.10 - 2.5、2.6

Python ≥3.7 - 2.4.1、2.5、2.6

sw_falcon

fastapi

Python ≥3.7 - 0.89.*、0.88.*

sw_fastapi

flask

Python ≥3.7 - 2.0

sw_flask

happybase

Python ≥3.7 - 1.2.0

sw_happybase

http_server

Python ≥3.7 - *

sw_http_server

werkzeug

Python ≥3.7 - 1.0.1、2.0

sw_http_server

httpx

Python ≥3.7 - 0.23.*、0.22.*

sw_httpx

kafka-python

Python ≥3.7 - 2.0

sw_kafka

loguru

Python ≥3.7 - 0.6.0、0.7.0

sw_loguru

mysqlclient

Python ≥3.7 - 2.1.*

sw_mysqlclient

neo4j

Python ≥3.7 - 5.*

sw_neo4j

psycopg[binary]

Python ≥3.11 - 3.1.*

Python ≥3.7 - 3.0.18、3.1.*

sw_psycopg

psycopg2-binary

Python ≥3.10 - 暂不支持

Python ≥3.7 - 2.9

sw_psycopg2

pymongo

Python ≥3.7 - 3.11.*

sw_pymongo

pymysql

Python ≥3.7 - 1.0

sw_pymysql

pyramid

Python ≥3.7 - 1.10、2.0

sw_pyramid

pika

Python ≥3.7 - 1.2

sw_rabbitmq

redis

Python ≥3.7 - 3.5.*、4.5.1

sw_redis

requests

Python ≥3.7 - 2.26、2.25

sw_requests

sanic

Python ≥3.10 - 暂不支持

Python ≥3.7 - 20.12

sw_sanic

tornado

Python ≥3.7 - 6.0、6.1

sw_tornado

urllib3

Python ≥3.7 - 1.26、1.25

sw_urllib3

urllib_request

Python ≥3.7 - *

sw_urllib_request

websockets

Python ≥3.7 - 10.3、10.4

sw_websockets

示例Demo

示例Demo仓库地址:SkyWalking Demo

该Demo是一个简单的基于Flask框架的请求路由转发和操作MySQL数据库的示例,SkyWalking Agent对其监控并上报数据。

用SkyWalking为Python应用自动埋点

您可以在Python项目文件代码里直接配置SkyWalking Python Agent参数或在环境变量中配置SkyWalking Python Agent参数。

在代码中配置参数

在Python项目文件中修改config.init参数,示例Demo中对应为proxy/TestProxy.pycontroller/TestController.py文件。

from skywalking import config
config.init(ConfigurationName = ConfigurationValue)

将参数配置到环境变量

在环境变量文件中添加以下内容,并刷新使其生效。

export SW_AGENT_ConfigurationName=ConfigurationValue
说明

如果是Docker容器环境,可以在docker-compose.yaml文件的environment选项下面配置环境变量。

  1. 配置接入点和令牌。

    1. 在Python文件中引入Skywalking。

      from skywalking import agent, config
    2. 配置接入点和鉴权令牌。

      请将<endpoint><auth-token>分别替换成前提条件中获取的接入点信息和鉴权令牌。

      config.init(agent_collector_backend_services='<endpoint>',
                  agent_authentication='<auth-token>')
  2. 配置Service Name作为应用标识。

    config.init(agent_name='<service name>')
  3. 选择数据上报协议,SkyWalking支持gRPC上报。

    ### 可选择的上报协议有'grpc'。
    config.init(agent_protocol='<protocol>')
  4. 根据需求配置其他可选参数。参数详情请参见Apache SkyWalking官方文档

  5. 重新启动应用。

常见问题

  • gRPC上报数据出现Method not found: skywalking.v3.LogReportService/collect错误。image.png

    config.init中设置agent_log_reporter_activeFalse

    config.init(agent_log_reporter_active=False)
  • gRPC上报数据出现Method not found: skywalking.v3.MeterReportService/collect错误。image.png控制台暂不支持metric数据上报,您可以在config.init中设置agent_meter_reporter_activeFalse

    config.init(agent_meter_reporter_active=False)

相关文档

SkyWalking官网