首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在云服务上运行的web应用程序App没有收集SQL命令文本

在云服务上运行的web应用程序App没有收集SQL命令文本
EN

Stack Overflow用户
提问于 2017-09-26 13:03:06
回答 3查看 817关注 0票数 0

跟随Microsoft标准安装指南

  • 检查角色属性中的“向应用程序发送诊断数据”,并将该应用程序发布到CS --根本没有收集到任何请求数据。
  • 将SDK添加到项目中并重新上传应用程序获取的请求数据,但是所有的SQL依赖项都收集到了完全无用的“命令文本”--“服务器名称-数据库名称”。

但是,如果安装了Azure状态监视器,则会在本地IIS上为同一应用程序跟踪SQL命令。

我通过RDP连接到服务器,看来AI状态监视器是由Azure PaaS诊断插件成功安装的,但没有注册为COR_PROFILER for W3SVC,所以它实际上什么也不做。

是否存在任何特定的配置开关来启用云服务的完整SQL命令跟踪?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-09-27 11:29:02

启用“将诊断数据发送到应用程序内部”并将SDK添加到项目中似乎就足以收集依赖数据。

但是,诊断插件v1.10.1.1中包含的状态监视器的当前安装程序已经损坏。我尝试过以前版本的插件安装程序(v.1.10.0.0),它运行得很好。

从最新版本的插件运行\StatusMonitor\ApplicationInsightsAgent.msi将记录以下异常:

代码语言:javascript
复制
Calling custom action CustomActions!CustomActions.CustomActions.SetEnvironmentVariables
Error: could not load custom action class CustomActions.CustomActions from assembly: CustomActions
System.IO.FileLoadException: Could not load file or assembly 'CustomActions, Version=2.4.0.18059, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. Strong name validation failed. (Exception from HRESULT: 0x8013141A)
File name: 'CustomActions, Version=2.4.0.18059, Culture=neutral, PublicKeyToken=31bf3856ad364e35' ---> System.Security.SecurityException: Strong name validation failed. (Exception from HRESULT: 0x8013141A)

我打开了那个CustomActions.dll,并通过sn检查了它的强名称。

代码语言:javascript
复制
sn.exe -vf CustomActions.dll

CustomActions.dll is a delay-signed or test-signed assembly

对v1.10.0.0中的CustomActions.dll的相同检查显示

代码语言:javascript
复制
Assembly 'CustomActions.dll' is valid

显然,MS中有人忘记在发布前签署dll,因此状态监视器不再正确地安装在CS VM上。报道说,对MS的支持,希望他们很快就能修好。

解决方法可以是在角色启动时手动添加缺少的注册表项,而W3SVC尚未启动:

代码语言:javascript
复制
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W3SVC\@Environment 

具有值的多字符串值。

代码语言:javascript
复制
COR_ENABLE_PROFILING=1
COR_PROFILER={324F817A-7420-4E6D-B3C1-143FBED6D855}
MicrosoftInstrumentationEngine_Host={CA487940-57D2-10BF-11B2-A3AD5A13CBC0}

原始reg文件是:

代码语言:javascript
复制
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W3SVC]
"Environment"=hex(7):43,00,4f,00,52,00,5f,00,45,00,4e,00,41,00,42,00,4c,00,45,\
  00,5f,00,50,00,52,00,4f,00,46,00,49,00,4c,00,49,00,4e,00,47,00,3d,00,31,00,\
  00,00,43,00,4f,00,52,00,5f,00,50,00,52,00,4f,00,46,00,49,00,4c,00,45,00,52,\
  00,3d,00,7b,00,33,00,32,00,34,00,46,00,38,00,31,00,37,00,41,00,2d,00,37,00,\
  34,00,32,00,30,00,2d,00,34,00,45,00,36,00,44,00,2d,00,42,00,33,00,43,00,31,\
  00,2d,00,31,00,34,00,33,00,46,00,42,00,45,00,44,00,36,00,44,00,38,00,35,00,\
  35,00,7d,00,00,00,4d,00,69,00,63,00,72,00,6f,00,73,00,6f,00,66,00,74,00,49,\
  00,6e,00,73,00,74,00,72,00,75,00,6d,00,65,00,6e,00,74,00,61,00,74,00,69,00,\
  6f,00,6e,00,45,00,6e,00,67,00,69,00,6e,00,65,00,5f,00,48,00,6f,00,73,00,74,\
  00,3d,00,7b,00,43,00,41,00,34,00,38,00,37,00,39,00,34,00,30,00,2d,00,35,00,\
  37,00,44,00,32,00,2d,00,31,00,30,00,42,00,46,00,2d,00,31,00,31,00,42,00,32,\
  00,2d,00,41,00,33,00,41,00,44,00,35,00,41,00,31,00,33,00,43,00,42,00,43,00,\
  30,00,7d,00,00,00,00,00
票数 0
EN

Stack Overflow用户

发布于 2017-09-27 05:54:52

这篇文章中,我们可以发现,如果只将Application添加到web应用程序项目中,则Dependencies诊断信息在默认情况下不会收集SQL命令文本。

根据您的描述,安装应用程序监视状态监视器似乎无助于收集SQL命令文本。如果可能的话,您可以尝试使用编写代码发送依赖关系信息使用TrackDependency,下面的代码适合我,请参考它。

代码语言:javascript
复制
var startTime = DateTime.UtcNow;

var timer = System.Diagnostics.Stopwatch.StartNew();
try
{
    SqlConnection con = new SqlConnection("{connect_string}");

    commendtext = "SELECT COUNT(1) FROM dbo.AspNetUsers";

    SqlCommand com = new SqlCommand(commendtext, con);

    con.Open();

    int n = (int)com.ExecuteScalar();

    con.Close();

    success = n > 0 ? true : false;

}
finally
{
    timer.Stop();
    telemetry.TrackDependency("SQL", "SQL: tcp:{server_name}.database.windows.net,1433 | {database_name}", ":{server_name}.database.windows.net", commendtext, startTime, timer.Elapsed, "{result_code}", success);
}

详细描述应用程序洞察门户上的SQL命令文本

票数 1
EN

Stack Overflow用户

发布于 2021-05-08 02:30:16

获得命令文本(没有代码或任何更改)的唯一方法是使用状态监视器v2,手动启用插装并添加-connectionstring而不是-instrumentationkey或-instrumentationkeymap。

代码语言:javascript
复制
Install status monitor v2
Enable-ApplicationInsightsMonitoring (using -connectionstring, cannot get working using -instrumentationkey)
Enable-InstrumentationEngine
Restart iis (auto)

另外,如果重新部署了will服务器、服务器或应用程序,它将停止显示命令文本。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46427347

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档