使用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: 1% [?]

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: 1% [?]

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: 1% [?]

Random Posts

在exsi中将来自其他机器的盘注册加载

换机器,将原先exsi机器上的盘放到新机器上,没能自动注册到存储列表中,需要手工注册登记

首先开启exsi的ssh服务,使用ssh连接到esxi机器上
先执行

esxcfg-volume -l

命令查看丢失的卷标
Scanning for VMFS-6 host activity (4096 bytes/HB, 1024 HBs).
VMFS UUID/label: 64982e42-f1ffaaaa-7963-04d9f504022b/ssddisk_1
Can mount: Yes
Can resignature: Yes

注意蓝色的值和后面标的名称,正是丢失的数据存储标签名
执行

esxcfg-volume -m 64982e42-f1ffaaaa-7963-04d9f504022b 

或者直接使用标签名

esxcfg-volume -m ssddisk_1 

挂载磁盘
挂载后再执行

esxcfg-volume -l 

应该看不到磁盘数据,因为盘已经被挂载了
执行

ls /vmfs/volumes 

查看验证磁盘已经挂载,在管理界面刷新可见新挂载的盘

Popularity: 1% [?]

Random Posts

给MindManager的免费插件MindReader做了一下中文支持处理

https://www.activityowner.com/ 提供的免费插件 MindReader开源了,仓库在 https://github.com/activityowner
下载下来源码,将期望已久的一个类似 XXX打电话 这样的中文描述特性扩展了一下,
在配置文件mindreadconfig.mmap中以 (.{1..8})打电话 这样的正则描述配置项目即可
顺手将菜单按钮界面中文化了了一下

设置 zh-Hans 后,重新启动MindManager,可以看到 MindReader 的中文菜单 如下

Popularity: 2% [?]

Random Posts

LoadRunner 2023 出来了

转眼LoadRunner 2023发布了,

添加脚本

延续了10来年的授权许可证在2023版发生了变化,这次采用了xml格式的许可证书,安装新格式证书拓展 50 默认社区许可

Popularity: 2% [?]

Random Posts

在EA中通过代码画流程图

最近要写文档画流程图,因为是补充文档,代码已经存在,希望从代码中直接生成流程图,网上找了一下,比如Understand之类工具可以画图,但是只是在他们软件内画,导出为图片格式,用它们来写文档麻烦且不实用用,EA的插件找到了一个开源的hoReverse,看介绍可以根据代码部分绘制流程图,可惜下载他做好的安装包安装后在EA中插件不可用,下载的他的源码试了VS2017和VS2019以及VS2022都未能直接编译通过。于是乎参考他的画图代码,自己写了一个在EA中画流程图的插件,绘制效果如下。

画出效果

目前支持如下一些逻辑的绘制
if () {}
if () {} else {}
while () { }
for () {}
switch () {case xx: break; case yy: break; default: zz}
等代码逻辑的流程图自动绘制,默认是c like 的语法代码,钩上pas like开关,可以识别pas的if xx then begin end 等pas语言特征的语句绘制

if while for switch 等语句段要用 {} 围起来,否则会当作一条分支直接到底,画的结果不正确

Popularity: 3% [?]

Random Posts

一个好用的EA模型文件版本管理插件

EA工具自带了版本库接口集成,但是都是一些相对老旧的版本库,比如SCC,SVN,CVS,TFS,在模型中提供包级别的版本库控制,包签出后,是锁定状态,不能同时修改,不能像现在流行的git分布式管理,可以多人同时签出修改。

德国 lieberlieber 公司的lemotree插件解决了这个问题,https://www.lieberlieber.com/lemontree/en/product/ 在使用git版本库时,这个插件产品支持git开发流程。
插件可以对模型文件做比较和合并,这样可以使用现有各种自己习惯的版本库控制软件管理自己的模型文件,然后通过这个插件做比较合并(像通常的代码文本文件比较合并一样)

在perforce(p4)版本库客户端中设置对模型文件使用 lemontree 做比较合并

打开p4客户端的Preferences界面,

选择Diff标签界面,在Specify diff application by extension(overrides default): 右边的Add按钮点击一下,

弹出 Add File Type 对话框,

输入模型文件的后缀 .qeax,其他后缀的要分别添加进去(添加多次, qea, eap, eapx)
Application 中输入lemontree的执行文件全路径
C:\Program Files\LieberLieber\LemonTree\LemonTree.Starter.exe
Parameters 中输入
diff –base=”%1″ –mine=”%2″

选择Merge标签界面,在Specify merge application by extension(overrides default): 右边的Add按钮点击一下,

弹出 Add File Type 对话框,

输入模型文件的后缀 .qeax,其他后缀的要分别添加进去(添加多次, qea, eap, eapx)
Application 中输入lemontree的执行文件全路径
C:\Program Files\LieberLieber\LemonTree\LemonTree.Starter.exe
Parameters 中输入
merge –theirs=”%r” –mine=”%1″ –base=”%b” –out=”%2″

Popularity: 3% [?]

Random Posts

EA升级到64位版本使用时碰到的一些问题

EA新的版本中64位版本,终于可以不再为内存不足发愁了,实际安装试了一下,碰到如下一些问题:
1. 打开之前的eap文件时,会提示要升级格式,但是升级完成后,里面的中文全部乱码了。

解决方法: 先在低版32位版本上将模型导出为xmi交换格式,再在64位版本程序中导入模型,这时候中文不会乱码。

2.之前写的插件不能用了
解决方法:
a.)先要编译64位版本的插件
b.)在64位版本中登记插件的注册表路径要由原先的 EAAddins 修改为 EAAddins64

Popularity: 3% [?]

Random Posts

给perforce(p4)补上msscci接口

Perforce(p4)版本库软件在低版本上提供了msscci接口,但是在新版本中已经移除(翻看perforce官方网站的说明文档大概是从v2012版本开始移除了msscci支持,使用了p4vs为微软开发工具提供版本库插件支持)
一些软件没有直接的p4版本库连接插件,但是提供了msscci接口做版本控制,怎么办呢?就是从老版本提取出scci接口的文件,然后在注册表上补充上相关值:
1. 先找一个v2012之前的p4vinst安装包在虚拟机上安装,只选择scci接口安装,其他取消掉
2. 安装后将安装目录下program files (x86)\Perforce目录下的文件拷贝备份,
3. 导出注册表 HEY_LOCAL_MACHINE\SOFTWARE\Perforce\p4的注册项信息
4. 导出注册表 HKEY_LOCAL_MACHINE\SOFTWARE\SourceCodeControlProvider的注册项信息
(3.4步骤的如果是在Win7/Win10等64为系统下,为
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Perforce\p4

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\SourceCodeControlProvider)
5. 在正常已经安装了新版Perforce的机器上,将步骤2拷贝下来的文件拷贝到同目录下
6. 导入之前导出的注册表项目(两个)
再打开需要使用SCC接口的软件,发现已经有 Perforce SCM 选项可用

————备份下来的注册表项目内容—————-
Perforce
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Perforce\P4]
“SCCServerName”=”Perforce SCM”
“SCCServerPath”=”C:\\Program Files (x86)\\Perforce\\p4scc.dll”

如果不是将文件恢复到安装路径下,这需要修改上面的SCCServerPath路径值为正确值

SccProvider
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\SourceCodeControlProvider]
“Perforce SCM”=”SOFTWARE\\Perforce\\P4″
“ProviderRegKey”=”SOFTWARE\\Perforce\\P4″

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\SourceCodeControlProvider\InstalledSCCProviders]
“Perforce SCM”=”SOFTWARE\\Perforce\\P4″

———————
在 Win32 系统下, 注册表的键值是
HEY_LOCAL_MACHINE\SOFTWARE\InstalledSCCProviders\ProviderRegKey
在 Win7/Win10等 64 为系统下, 注册表键值是 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\SourceCodeControlProvider

Popularity: 3% [?]

Random Posts

Next Page →