这篇会为你介绍如何使用 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()