应用性能监测(APM),主要用于查看系统整体的运行状态、健康程度、外部API、数据库调用以及自身代码及其调用资源的消耗或者异常问题,帮助企业从根源上快速定位问题,保障应用的性能及系统稳定性。
观测云的应用性能监测,支持所有基于 Opentracing 协议的 APM 工具,如 ddtrace、Skywalking、Zipkin、Jaege 等。通过在 DataKit 中开启对应的采集器,并在需要监控的应用代码中加入相关监控文件,配置完成后即可在观测云工作空间查看上报的链路数据,同时可与基础设施、日志、RUM进行关联分析,快速定位并解决故障,提高用户体验。
本文档将使用 Python 应用,介绍如何通过 ddtrace 实现 APM 可观测。
前置条件
您需要先创建一个观测云账号,并在您的主机上安装 DataKit。
方法/步骤
Step1: 开启并配置 ddtrace.conf 采集器
进入 DataKit 安装目录下的 conf.d/ddtrace 目录,复制 ddtrace.conf.sample 并命名为 ddtrace.conf,打开ddtrace.conf,inputs默认开启,无需修改。
## 进入ddtrace目录
cd /usr/local/datakit/conf.d/ddtrace/
## 复制ddtrace配置文件
cp ddtrace.conf.sample ddtrace.conf
## 打开并编辑ddtrace配置文件
vim ddtrace.conf
# 配置完成后,重启datakit,使配置生效
datakit --restart 或者 service datakit restart 或者 systemctl restart datakit
注意:endpoints 默认开启,不要修改。
观测云支持为应用性能监测自定义标签来做关联查询,可通过命令行注入环境变量或者在ddtrace.conf中开启inputs.ddtrace.tags并添加tag的方式,详细配置可参考文档 ddtrace 环境变量设置 。
Step2: 安装 ddtrace
通过 ddtrace 采集链路数据需要根据当前需要监测的应用对应的语言,本文以 Python 应用为例,Java 或者其他语言应用可参考文档 分布式链路追踪(APM)最佳实践 。
在终端执行命令pip install ddtrace安装 ddtrace。
Step3: 配置应用启动脚本
方法一:在应用的初始化配置文件中配置 DataKit 服务地址
1)配置 DataKit 服务地址。您需要进入应用的初始化配置文件,添加以下配置内容:
tracer.configure(
hostname = "localhost", # 视具体 DataKit 地址而定
port = "9529",
)
2)配置应用服务启动脚本文件。您需要添加启动脚本文件的命令,如:ddtrace-run python your_app.py
详见文档 Python 示例 。
方法二:直接在启动脚本文件中配置 DataKit 服务地址
观测云支持通过直接启动脚本文件来配置 DataKit 服务地址,无需改动您的应用代码。本示例中已创建了一个“todoism”的 Python 应用,进入该应用的脚本文件目录,执行其脚本文件,实际按照您自己的应用为准。
1)在启动脚本文件中配置执行命令(注入环境变量)
DD_AGENT_HOST=localhost DATADOG_TRACE_AGENT_PORT=9529 ddtrace-run python your_app.py
示意图如:
2)进入启动脚本文件目录,执行启动脚本文件./boot.sh,启动 Python 应用。示意图如:
注意:出于安全考虑,DataKit 的 HTTP 服务默认绑定在 localhost:9529 上,如果希望开放外网访问,可编辑 conf.d/datakit.conf,将 listen 改为 0.0.0.0:9529(端口可选)。此时 ddtrace 的访问地址就是 http://
Step4: 在观测云查看器数据分析
脚本文件启动以后,可以尝试访问 Python 应用,然后就可以在观测云工作空间的“应用性能监测”查看链路数据并进行分析。
1)在「应用性能监测」-「服务」,可以查看到采集上来的两个服务。包括服务类型、请求书、响应时间等。
2)在「应用性能监测」-「链路」,可以查看到服务flask的链路创建时间、状态、持续时间等。
3)点击链路可查看链路详情,包括火焰图、Span 列表、服务调用关系,以及关联日志、主机等,可以帮助您快速定位问题,保障系统稳定性,提高用户体验。
链路相关名词解释如下。更多链路介绍可参考文档 链路分析 。
进阶参考
配置关联日志
1)进入主机 DataKit 安装目录/usr/local/datakit下的conf.d/log目录,复制logging.conf.sample并命名为logging.conf。编辑logging.conf文件,在logfiles填入您应用的服务日志存储路径,在source填入日志来源名,保存后重启 DataKit 。更多日志采集器详情和日志 pipeline 切割可参考文档 日志 。
## 进入log目录
cd /usr/local/datakit/conf.d/log/
## 复制ddtrace配置文件
cp logging.conf.sample logging.conf
## 打开并编辑ddtrace配置文件
vim logging.conf
# 配置完成后,重启datakit,使配置生效
datakit --restart 或者 service datakit restart 或者 systemctl restart datakit
2)在启动脚本文件中配置执行命令(注入环境变量关联链路日志),更多详情配置可参考文档 应用性能监测关联日志 。
DD_LOGS_INJECTION="true" DD_AGENT_HOST=localhost DATADOG_TRACE_AGENT_PORT=9529 ddtrace-run python your_app.py
示意图如:
3)启动脚本文件,尝试访问 Python 应用,然后就可以在观测云工作空间的日志详情查看链路火焰图和 span 列表,并在应用性能监测详情查看相关的日志,帮助您快速做数据关联分析。示意图如下:
● 日志详情
● 应用性能详情
配置关联web应用(用户访问监测)
用户性能监测通过ddtrace、RUM采集器能够跟踪一个web端应用程序完整的前端到后端的请求数据,使用来自前端的用户访问数据,以及注入到后端的trace_id,可以快速的定位调用堆栈,提高排障效率。
1)在 Python 应用的初始化文件中,增加以下配置,设置对目标服务器允许跟踪的前端请求响应头header白名单。更多详情可参考文档 关联Web应用访问 。
@app.after_request
def after_request(response):
...
response.headers.add('Access-Control-Allow-Headers', 'x-datadog-parent-id,x-datadog-sampled,x-datadog-sampling-priority,x-datadog-trace-id')
....
return response
....
示意图如:
2)在前端页面 index.html 的 head 中增加以下用户访问可观测配置(在观测云工作空间用户访问监测创建应用获取)。
其中allowedDDTracingOrigins是用于前后端( rum 与 apm )打通的配置项,可按需进行设置,需在此处填写与前端页面有交互关系的后端服务器所对应的域名或 IP,其他配置项是用于采集用户访问数据,更多用户访问监测配置可参考文档 web应用监控(RUM)最佳实践 。
示意图如:
3)配置完成后,启动脚本文件,尝试访问 Python 应用,然后就可以在观测云工作空间的用户访问监测查看器详情关联链路,帮助您快速做数据关联分析。示意图如下:
配置采样
“观测云” 的「应用性能监测」功能支持对ddtrace等符合 Opentracing 协议的采集器所采集的链路数据进行分析和管理。默认情况下,按照全量的方式采集应用性能数据,即每次调用都会产生数据,若不加以限制,采集到的数据量大,会占用过多的数据存储。你可以通过设置采样的方式采集应用性能数据,节约数据存储量,降低成本费用。更多配置详情可参考文档 如何配置应用性能监测采样 。
更多参考
通过 skywalking 采集应用性能数据
通过 jaeger 采集应用性能数据