Python 服务实现可观测性最佳实践
本次实践主要是介绍 Python 服务通过无侵入的方式接入观测云进行全面的可观测。
前言
本次实践主要是介绍 Python 服务通过无侵入的方式接入观测云进行全面的可观测。
环境信息
- 系统环境:主机环境
- 开发语言:Python2.7+
- APM 探针包:ddtrace
接入方案
准备工作
安装 DataKit
主机安装 DataKit
# 需要把token 改成观测云空间的实际token值(可在观测云控制台-->集成-->Datakit 上面获取)
DK_DATAWAY="https://openway.guance.com?token=tkn_xxxxxx" bash -c "$(curl -L https://static.guance.com/datakit/install.sh)"
开启采集器
开启日志采集器
cp /usr/local/datakit/conf.d/log/logging.conf.sample /usr/local/datakit/conf.d/log/logging.conf
vim /usr/local/datakit/conf.d/log/logging.conf
在 [[inputs.logging]] 采集项目下的 logfiles 添加 python 日志的路径: "/root/guance/dd-test/python_log/*"

开启 ddtrace 采集器
cp /usr/local/datakit/conf.d/ddtrace/ddtrace.conf.sample /usr/local/datakit/conf.d/ddtrace/ddtrace.conf
重启 Datakit
# 在主机终端输入命令
datakit service -R
准备测试环境
以下实践在 Linux 主机环境下操作
安装 Python 依赖包:
pip install flask
pip install ddtrace
新建文件夹存储日志数据:
mkdir -p /root/guance/dd-test
准备测试代码
服务 A 代码如下:
vim python_demo.py
import logging
from flask import Flask
log = logging.getLogger(__name__)
log.level = logging.INFO
stream_handler = logging.StreamHandler()
formatter = logging.Formatter('%(asctime)s %(levelname)s %(filename)s %(dd.service)s %(dd.trace_id)s %(dd.trace_id)s %(funcName)s:%(lineno)s %(message)s')
stream_handler.setFormatter(formatter)
log.addHandler(stream_handler)
app = Flask(__name__)
@app.route('/a', methods=['GET'])
def index():
# 打印一条log日志
log.info('Hello, World!')
return "abcdefg", 200
if __name__ == '__main__':
app.run(host="0.0.0.0", port=10001, debug=True)
启动业务服务
# DD_AGENT_HOST、DD_AGENT_PORT 分别为datakit 访问的地址以及端口
DD_SERVICE=python_demo \
DD_TAGS=project:python_demo,env:test,version:v1 \
DD_AGENT_HOST=localhost \
DD_AGENT_PORT=9529 \
ddtrace-run python3 python_demo.py &> /root/guance/dd-test/a.log
调用链接入
访问服务 A,服务会产生调用链上传至 DataKit。
curl http://localhost:10001/a # 终端使用curl 访问,浏览器则直接访问url即可
日志接入
DataKit 会定时采集服务产生的日志,通过观测云 Pipeline 提取日志中的 status, service_name, trace_id 等字段,从而实现调用链和日志的串联效果。
# pipeline 的解析规则(链路与日志通过trace_id 关联起来)
grok(_, "%{TIMESTAMP_ISO8601:time} %{LOGLEVEL:status} %{DATA:file_name} %{DATA:service_name} %{DATA:trace_id} %{DATA:span_id} " )

实践效果
- 调用链以及调用链关联日志效果



- 日志采集效果


Get a tailored plan
Contact us
Join the community
Scan with WeChat
to join the community
to join the community
Try Guance
Start online and pay only for what you use.
Get startedChoose a Guance plan