使用Dynatrace的ADK对C++服务代码做注入修改小结

因为要用Dynatrace监测C++写的服务,因此使用了ADK开发包做代码注入:
主要修改的注入点有:
1. 服务端接受请求的入口
先通过http头信息获取传递过来的tag, 使用DYNATRACE_SET_TAG_FROM_STRING宏设置tag值
然后放入 DYNATRACE_START_SERVER_PUREPATH, DYNATRACE_END_SERVER_PUREPATH 宏对

在具体的处理点放入 DYNATRACE_AUTO_PUREPATH 标志入口点,如果要捕获参数,采用 DYNATRACE_AUTO_PUREPATH_CAPTURE(DYNATRACE_CAPTURE << param)
在需要监测时间消耗的函数入口位置放入 DYNATRACE_AUTO_NODE,如果需要捕获参数,则使用 DYNATRACE_AUTO_NODE_CAPTURE(DYNATRACE_CAPTURE << param)

2. 服务内部发起的http请求
首先在入口函数处放入 DYNATRACE_AUTO_PUREPATH_CAPTURE(DYNATRACE_CAPTURE << url.c_str()) 宏,可以捕获请求的地址参数
然后使用 DYNATRACE_GET_TAG_AS_STRING 宏获取Dynatrace 自动创建的tag, 并将其放入http的请求头传递给服务端
再通过 DYNATRACE_LINK_CLIENT_PUREPATH_BY_STRING 将这个tag和PUREPATH关联起来

3. 服务内部发起的数据库请求
在发起数据库请求的地方,放入 DYNATRACE_AUTO_NODE(DYNATRACE_CAPTURE << sql.c_str()) 捕获SQL执行时间消耗情况

碰到问题:
1. Dynatrace界面中看到的入口purepath是函数名称,不是 /xxx/yyy这样的请求地址样式
2. 内部请求的数据库,没有在界面上像PHP监测那样被拆分到Database,作为ADK内部的API划分
3. 使用DYNATRACE_CAPTURE << strparam 捕获的utf8中文字符串会显示乱码

解决方法
1.2 解决方法未知
3. 替换使用 DYNATRACE_CAPTURE_STRING_WITH_CHARSET(strparam, strlen(strparam), DYNATRACE_CCSID_UTF8) 方式捕获参数值

特别注意
DYNATRACE_API设置的不是具体函数方法名,而是注入点分类名,比如Serv, HttpClient, Database这样的注入点分类,用于在界面上的API分布查看各自的时间消耗比

Popularity: 6% [?]

Random Posts

给使用Minimal方式安装的Centos系统补充gcc开发环境和java运行环境

为节省空间,在虚拟机中使用Minimal方式安装了CentOS的最小系统
使用yum安装补充,首先使用ifconfig命令看不到ip,提示命令不存在,使用
ip addr show
可以看到当前地址,确认有可以上网的ip(安装时可选择dhcp方式获取ip,确保在网络中启动后有ip地址),
否则自己修改/etc/sysconfig/network-scripts/目录下的接口配置文件修改ip地址信息后,重启虚拟机
使用命令

yum install net-tools -y

安装ifconfig相关命令工具
使用命令

yum install gcc g++ gdb -y

安装gcc环境
使用命令

yum install java-1.8.0-openjdk* -y

安装jdk1.8版本
也可以使用

yum install java-11-openjdk* -y

安装Jdk11版本

Popularity: 6% [?]

Random Posts

Dynatrace 本地部署安装以及Linux下Nginx+PHP配置使用

搞到一份Dyanatrace的本地部署安装包,安装试了一下,体验全链路监测

监测Linux下的PHP配置过程
首先看到新建配置的界面

首先建立一个名字为Test的配置,出现如下选择界面,选择PHP

然后出现针对PHP环境的设置步骤,

按照提示来,首先选择UEM

点击上面的图标,出现的是到dynatrace的连接,因为程序比较老,打开的链接已经是404出错,点击WEB按钮,按照地址名称重新找了一下链接,大约是
https://www.dynatrace.com/support/help/platform-modules/digital-experience/web-applications 可以对照着看一下
选择第二步骤,添加PHP环境,出现如下界面,因为是Linux下的Nginx,所以选第二个

出来机器和版本选择

因为是非本机的64位Linux,所以选择远程64位

按照提示将下载的文件上传到运行php的linux服务器上,我放到了/opt目录下解压,执行命令
/bin/sh dynatrace-wsagent-7.2.0.1697-linux-x64.sh
按照运行命令后出现的提示,修改文件 /opt/dynatrace-7.2/init.d/dynaTraceWebServerAgent 校对其中的 DT_HOME 值,然后将这个文件拷贝到/etc/init.d目录下
执行命令 chkconfig –add dynaTraceWebServerAgent 添加到机器开机启动服务中去
可以使用 chkconfig –level 2345 dynaTraceWebServerAgent on 做调整

按照提示,修改/opt/dynatrace-7.2/agent/conf/dtwsagent.ini
修改其中的Name 和 Server 值设置 (可以拷贝粘贴过去,记得将原始值删除掉)

按照提示修改nginx的启动命令,我这里修改为
LD_PRELOAD=/opt/dynatrace-7.2/agent/lib64/libdtagent.so nginx
再修改php.ini文件,其中添加一行
extension=/opt/dynatrace-7.2/agent/lib64/libdtagent.so
关闭nginx重新启动
配置数据库

连接测试时出错

按照提示检查数据库,缺少sys库,然后查了一下MySQL库在5.7版本以上才有这个库,所以要监测MySQL库,就必须先将MySQL库升级到5.7版本以上

Popularity: 6% [?]

Random Posts