通过SkyWalking上报Python应用数据

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

前提条件

  • 下载Apache-skywalkingPython Agent(建议下载最新版本)。

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

  • 获取接入点信息

    1. 登录ARMS控制台,在左侧导航栏单击接入中心

    2. 服务端应用区域单击SkyWalking卡片。

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

      说明

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

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

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

      image.png

背景信息

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

Skywalking-pythonSkyWalkingPython 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对其监控并上报数据。

SkyWalkingPython应用自动埋点

您可以在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官网