开启分布式应用性能观测(APM)

PHP
• 阅读 672

应用性能监测(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

开启分布式应用性能观测(APM)

注意:endpoints 默认开启,不要修改。

观测云支持为应用性能监测自定义标签来做关联查询,可通过命令行注入环境变量或者在ddtrace.conf中开启inputs.ddtrace.tags并添加tag的方式,详细配置可参考文档 ddtrace 环境变量设置 。

Step2: 安装 ddtrace

通过 ddtrace 采集链路数据需要根据当前需要监测的应用对应的语言,本文以 Python 应用为例,Java 或者其他语言应用可参考文档 分布式链路追踪(APM)最佳实践 。

在终端执行命令pip install ddtrace安装 ddtrace。

开启分布式应用性能观测(APM)

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

示意图如:
开启分布式应用性能观测(APM)
2)进入启动脚本文件目录,执行启动脚本文件./boot.sh,启动 Python 应用。示意图如:
开启分布式应用性能观测(APM)

注意:出于安全考虑,DataKit 的 HTTP 服务默认绑定在 localhost:9529 上,如果希望开放外网访问,可编辑 conf.d/datakit.conf,将 listen 改为 0.0.0.0:9529(端口可选)。此时 ddtrace 的访问地址就是 http://<datakit-ip>:9529。如果 trace 数据来源就是 DataKit 本机,可不用修改 listen 配置,直接使用 http://localhost:9529 即可。
开启分布式应用性能观测(APM)

Step4: 在观测云查看器数据分析

脚本文件启动以后,可以尝试访问 Python 应用,然后就可以在观测云工作空间的“应用性能监测”查看链路数据并进行分析。

1)在「应用性能监测」-「服务」,可以查看到采集上来的两个服务。包括服务类型、请求书、响应时间等。
开启分布式应用性能观测(APM)
2)在「应用性能监测」-「链路」,可以查看到服务flask的链路创建时间、状态、持续时间等。
开启分布式应用性能观测(APM)

3)点击链路可查看链路详情,包括火焰图、Span 列表、服务调用关系,以及关联日志、主机等,可以帮助您快速定位问题,保障系统稳定性,提高用户体验。
开启分布式应用性能观测(APM)
链路相关名词解释如下。更多链路介绍可参考文档 链路分析 。
开启分布式应用性能观测(APM)

进阶参考

配置关联日志
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

示意图如:
开启分布式应用性能观测(APM)
3)启动脚本文件,尝试访问 Python 应用,然后就可以在观测云工作空间的日志详情查看链路火焰图和 span 列表,并在应用性能监测详情查看相关的日志,帮助您快速做数据关联分析。示意图如下:
开启分布式应用性能观测(APM)
● 日志详情
开启分布式应用性能观测(APM)
● 应用性能详情
开启分布式应用性能观测(APM)

配置关联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
 ....

示意图如:
开启分布式应用性能观测(APM)
2)在前端页面 index.html 的 head 中增加以下用户访问可观测配置(在观测云工作空间用户访问监测创建应用获取)。


<script src="https://static.guance.com/browser-sdk/v2/dataflux-rum.js" type="text/javascript"></script>
<script>
  window.DATAFLUX_RUM &&
    window.DATAFLUX_RUM.init({
      applicationId: 'appid_68fa6ec4f56f4b78xxxxxxxxxxxxxxxx',
      datakitOrigin: '<DATAKIT ORIGIN>', // 协议(包括://),域名(或IP地址)[和端口号]
      env: 'production',
      version: '1.0.0',
      trackInteractions: true,
      allowedDDTracingOrigins: ["https://api.example.com", /https:\/\/.*\.my-api-domain\.com/]
    })
</script>

其中allowedDDTracingOrigins是用于前后端( rum 与 apm )打通的配置项,可按需进行设置,需在此处填写与前端页面有交互关系的后端服务器所对应的域名或 IP,其他配置项是用于采集用户访问数据,更多用户访问监测配置可参考文档 web应用监控(RUM)最佳实践 。
示意图如:
开启分布式应用性能观测(APM)
3)配置完成后,启动脚本文件,尝试访问 Python 应用,然后就可以在观测云工作空间的用户访问监测查看器详情关联链路,帮助您快速做数据关联分析。示意图如下:
开启分布式应用性能观测(APM)
配置采样
“观测云” 的「应用性能监测」功能支持对ddtrace等符合 Opentracing 协议的采集器所采集的链路数据进行分析和管理。默认情况下,按照全量的方式采集应用性能数据,即每次调用都会产生数据,若不加以限制,采集到的数据量大,会占用过多的数据存储。你可以通过设置采样的方式采集应用性能数据,节约数据存储量,降低成本费用。更多配置详情可参考文档 如何配置应用性能监测采样 。

更多参考

通过 skywalking 采集应用性能数据
通过 jaeger 采集应用性能数据

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Wesley13 Wesley13
4年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Wesley13 Wesley13
4年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Stella981 Stella981
4年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Wesley13 Wesley13
4年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Easter79 Easter79
4年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Stella981 Stella981
4年前
Bypass ngx_lua_waf SQL注入防御(多姿势)
0x00前言ngx\_lua\_waf是一款基于ngx\_lua的web应用防火墙,使用简单,高性能、轻量级。默认防御规则在wafconf目录中,摘录几条核心的SQL注入防御规则:select.(from|limit)(?:(union(.?)select))(?:from\Winformation_schema\W)这边
Wesley13 Wesley13
4年前
JavaWeb 调用接口
JavaWeb 如何调用接口CreateTime2018年4月2日19:04:29Author:Marydon1.所需jar包!(https://oscimg.oschina.net/oscnet/0f139
Stella981 Stella981
4年前
Asp.Net Core使用Skywalking实现分布式链路追踪
介绍Skywalking是Apache基金会下面的一个开源APM项目,是一套(APM)分布式追踪系统,提供了很多数据存储列如:Mysql,H2,Elasticsearch7等。其中APM全称是应用性能监测软件,主要是用来处理以及追踪分布式系统中的应用程序的性能问题,从而快速找出问题的根源,进而可以让开发者定位问题从而提升应用程序
云监控的发展历程与未来展望
云监控能够实时监测云端资源的可用性、性能和操作。通过收集和分析关键监控数据,可以快速发现云端系统和应用的性能瓶颈和潜在问题,并作出响应以确保其正常运行。因此,云监控是保证企业云端业务平稳运行的关键组成部分。