腾讯云可观测平台 通过 SkyWalking 协议接入 Python 应用

这篇说说如何使用SkyWalking协议上报Python应用数据,包括获取接入点和Token、安装依赖、修改启动代码及多线程接入步骤,需Python 3.7+并支持自动埋点。 – 获取接入点和Token:登录控制台选择地域与业务系统,获取内网或外网上报方式。 – 安装依赖与修改代码:安装apache-skywalking包,配置接入点、应用名称和Token启动Agent。 – 多线程接入:使用tornado包,需在进。

相关产品
腾讯云可观测平台 产品页,含版本规格、价格与购买入口。

这篇会为你介绍如何使用 SkyWalking 协议上报 Python 应用数据。

一、前提条件

·Python 使用 SkyWalking 可以实现自动埋点上报,需 Python 3.7及以上版本。

·目前我们默认使用 grpc 进行上报。

·当前支持自动埋点的组件详情请见 Python Agent 支持框架。

二、步骤1:获取接入点和 Token

1. 登录 腾讯云可观测平台 控制台。

2. 在左侧菜单栏中选择应用性能监控,单击应用列表 > 接入应用。

3. 在右侧弹出的数据接入抽屉框中,单击 Python 语言。

4. 在接入 Python 应用页面,选择你所要接入的地域以及业务系统。

5. 选择接入协议类型为 Skywalking。

6. 上报方式选择你所想要的上报方式,获取你的接入点和 Token。

注意:说明:

三、步骤2:安装 SkyWalking Agent 相关依赖

pip install apache-skywalking# 当前demo使用库pip install tornado

四、步骤3:修改启动代码

from skywalking import agent, config config.init( # 此处替换成步骤1中获得的接入点 agent_collector_backend_services='ap-guangzhou.apm.tencentcs.com:11800', agent_name='python-skywalking', # 此处可自定义应用名称 agent_authentication="xxxxxxxxxxxxxx", # 此处替换成步骤1中获得的Token agent_logging_level="INFO") agent.start()

五、完整 demo 代码如下:

import timeimport tornado.ioloopimport tornado.webclass MainHandler(tornado.web.RequestHandler): def get(self): print("call") self.write("Hello, world")class SleepHandler(tornado.web.RequestHandler): def get(self): print("call sleep") time.sleep(0.1) self.write("sleep 0.1s")def make_app(): return tornado.web.Application([ (r"/test", MainHandler), (r"/sleep", SleepHandler), ])if __name__ == "__main__": from skywalking import agent, config config.init(agent_collector_backend_services='{接入点}', # 此处替换成步骤1中获得的接入点 agent_name='python-skywalking', agent_authentication='{token}', # 此处替换成步骤1中获得的Token agent_logging_level='INFO') agent.start() app = make_app() port = 9008 app.listen(port) print("server in %s" % port) tornado.ioloop.IOLoop.current().start()

六、步骤4:多线程接入

此步骤可选。完成上面三个步骤,即可在 腾讯云可观测平台 > 应用性能监控 > 应用列表 中看到上报的数据。如果想要多线程接入,可以使用 tornado 包,这里启动需要注意,SkyWalking Agent 需要在进程 fork 之后启动。

七、引入 tornado 依赖

pip install tornado

八、完整 demo 代码如下:

import timeimport osimport tornado.ioloopimport tornado.webfrom tornado.httpserver import HTTPServerclass MainHandler(tornado.web.RequestHandler): def get(self): print("call") self.write("Hello, world")class Sleep01Handler(tornado.web.RequestHandler): def get(self): print("call sleep") time.sleep(0.1) self.write("sleep 0.1s")def make_app(): return tornado.web.Application([ (r"/test", MainHandler), (r"/sleep", Sleep01Handler), ])if __name__ == "__main__": from skywalking import agent, config config.init(agent_collector_backend_services='{接入点}', # 此处替换成步骤1中获得的接入点 agent_name='python-skywalking-multi', agent_authentication='{token}', # 此处替换成步骤1中获得的Token agent_logging_level='INFO') app = make_app() port = 9009 num_processes = 4 sockets = tornado.netutil.bind_sockets(port) tornado.process.fork_processes(num_processes) # 多进程用法,应在fork进程之后启动 agent.start() pid = os.getpid() print("Current process ID:%d" % pid) server = HTTPServer(app) server.add_sockets(sockets) print("server in %s" % port) tornado.ioloop.IOLoop.current().start()

赞 (0)
上一篇 4天前
下一篇 4天前