Python - APM 链路跟踪探针之DDtrace
Max.Bai
2021-03
APM (Application Performance Management),也叫链路跟踪系统,比较熟悉的有Pinpoint, SkyWalking,Zipkin等,系统简单来说由负责收集数据的探针和数据展示分析两部分组成,这个DDtrace就是python的探针。
DDtrace 是DataDog开源的python探针,官网地址 https://docs.datadoghq.com/tracing/setup_overview/compatibility_requirements/python/, 兼容大部分WEB框架,Flask,Django等等。
这里就测试一个Flask的Demo,看看收集到什么数据。
测试的方法是写一个flask demo 引入ddtrace,看如何工作,改动是不是很大,同时开另外一个flask数据收集器,让ddtrace把数据发到数据收集器,打印出来看看。
0. 安装
pip install ddtrace
1. 被监控Flask代码
内容简单,根路由,调用另外方法,并返回字符串
# ddtrace test flaskserver.py
# 设置ddtrace
from ddtrace import patch_all, tracer
patch_all()
# 数据收集服务器地址配置
tracer.configure(
hostname="localhost",
port="5001",
)
# flask 服务代码
import time
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
a = call_other_function_test() # 调用非路由方法
return a
@tracer.wrap() # 非路由方法需要添加这个才可以收集数据
def call_other_function_test():
print('call test')
time.sleep(0.5)
ab=5/0
return "hello world, from other func!"
if __name__ == '__main__':
app.run()
2. 数据收集服务器代码
很简单,就是要实现指定的路由地址就可以,我测试的版本是下面2个路由,内容一样的,就是打印收的数据。
/v0.4/traces
/v0.3/traces
# dataserver.py
from flask import Flask, request
import json
import msgpack
app = Flask(__name__)
@app.route("/v0.4/traces", methods=["GET", "POST", "PUT", "DELETE"])
def hello_world():
print("0.4 data")
print(request.headers)
# print(request.get_data(as_text=True))
# data = json.loads(request.get_data())
data = msgpack.loads(request.get_data())
# print(data)
for item in data:
print(item)
return "Hello, World!"
@app.route("/v0.3/traces", methods=["GET", "POST", "PU