Application Insights不跟踪SQL查询

时间:2016-09-09 11:30:37

标签: sql-server azure-application-insights

我尝试配置自己的环境,使用状态监视器向App Insight发送数据,除sql查询外,其他工作正常。

我在Azure VM上使用Azure数据库有一个环境,并且SQL查询一直在跟踪,但在我自己的VM中,我自己的数据库无法正常工作。

在该环境中记录的sql跟踪就像:" mssql-IP |数据库名称"而不是查询内容。

在两个环境中测试的应用程序是相同的,SO版本是相同的。

我尝试针对Azure数据库配置我的环境,但仍然存在同样的问题。

我安装了.NET 4.6,但问题仍然存在。

3 个答案:

答案 0 :(得分:5)

在回顾了所有有关该问题的文档,GitHub问题和博客文章之后,我相信对于IIS环境,我有明确的答案:

    需要安装
  1. 状态监视器来收集依赖性详细信息。这将配置必要的.NET分析器。即使您在构建时配置了Application Insights(即没有在运行时为状态监视器配置Application Insights)并且使用的是.NET 4.6+,状态监视器仍然需要存在。 (我认为,Microsoft文档对此没有明确说明。)

  2. 正确的权限:

    CMD

    icacls $env:WINDIR\Temp /t /c /grant IIS_IUSRS:'(OI)(CI)M'
    icacls $env:WINDIR\System32\config\systemprofile\AppData\Local /t /c /grant IIS_IUSRS:'(OI)(CI)M'
    

    PowerShell

    Get-Item 'HKLM:\SYSTEM\CurrentControlSet\Services\W3SVC' | Remove-ItemProperty -Name Environment -ErrorAction SilentlyContinue
    Get-Item 'HKLM:\SYSTEM\CurrentControlSet\Services\W3SVC' | New-ItemProperty -Name Environment -Value "COR_ENABLE_PROFILING=1","COR_PROFILER={324F817A-7420-4E6D-B3C1-143FBED6D855}","MicrosoftInstrumentationEngine_Host={CA487940-57D2-10BF-11B2-A3AD5A13CBC0}" -PropertyType MultiString
    
  3. 更正IIS服务环境变量:

    iisreset
    
  4. 重新启动IIS:

    import time
    import requests
    import telebot
    
    
    from telebot import TeleBot
    
    app = TeleBot(__name__)
    
    @app.route('price')
    def send_welcome(message):
        print('hey..')
        chat_dest = message['chat']['id']
    
        tickerURL = "https://api.coinmarketcap.com/v1/ticker/"
    
    
        choice = "bitcoin"
        tickerURL += '/'+choice+'/'
        request = requests.get(tickerURL)
        data = request.json()
        ticker = data[0]['symbol']
        price = data[0]['price_usd']
        price_btc = data[0]['price_btc']
        rank = data[0]['rank']
        market_cap = data[0]['market_cap_usd']
        change_24 = data[0]['24h_volume_usd']
        price_a = ticker + ":\t\t$ " + price
        price_b = ticker + ":\t\tB " + price_btc
    
        cont = str(price_a)
        cont += '\n'+ str(price_b)
        cont += '\nRank: '+ str(rank)
        cont += '\nChange 24hr: '+ "{:,}".format(float(change_24))
        cont += '\nMarket_cap: ' + "{:,}".format(float(market_cap)) 
    
    
        app.send_message(chat_dest, cont)
    
    bot_token = 'TOKEN'#replace with your token
    
    if __name__ == '__main__':
        app.config['api_key'] = bot_token
        app.poll(debug=True)
    

答案 1 :(得分:4)

您应该验证状态监视器收集的数据是否正在进入Application Insights。

Analytics中尝试查询:

dependencies | where timestamp > ago(1d) | summarize count() by cloud_RoleInstance, sdkVersion

如果您看到以rddf而不是rddp为前缀的sdkVersion结果,则SDK会在没有状态监视器增强功能的情况下发送数据(如SQL查询内容)。如果是这种情况,请检查状态监视器的安装,以确保它对您的应用程序有效。

答案 2 :(得分:3)

我终于解决了这个问题。

我为这些路径授予对IIS_IUSRS组的修改权限:

  • %WINDIR%\Temp
  • %WINDIR%\System32\config\systemprofile\AppData\Local

然后,Application Insights开始记录SQL查询。

您也可以通过命令行执行此操作:

  • icacls %WINDIR%\Temp /t /c /grant IIS_IUSRS:(OI)(CI)M
  • icacls %WINDIR%\System32\config\systemprofile\AppData\Local /t /c /grant IIS_IUSRS:(OI)(CI)M