我尝试配置自己的环境,使用状态监视器向App Insight发送数据,除sql查询外,其他工作正常。
我在Azure VM上使用Azure数据库有一个环境,并且SQL查询一直在跟踪,但在我自己的VM中,我自己的数据库无法正常工作。
在该环境中记录的sql跟踪就像:" mssql-IP |数据库名称"而不是查询内容。
在两个环境中测试的应用程序是相同的,SO版本是相同的。
我尝试针对Azure数据库配置我的环境,但仍然存在同样的问题。
我安装了.NET 4.6,但问题仍然存在。
答案 0 :(得分:5)
在回顾了所有有关该问题的文档,GitHub问题和博客文章之后,我相信对于IIS环境,我有明确的答案:
状态监视器来收集依赖性详细信息。这将配置必要的.NET分析器。即使您在构建时配置了Application Insights(即没有在运行时为状态监视器配置Application Insights)并且使用的是.NET 4.6+,状态监视器仍然需要存在。 (我认为,Microsoft文档对此没有明确说明。)
正确的权限:
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
更正IIS服务环境变量:
iisreset
重新启动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