我们正在尝试按照此处公布的应用洞察多角色预览:
https://azure.microsoft.com/en-us/blog/app-insights-microservices/
我们为appinsights&添加了2.4.0-beta3软件包。 appinsights.windowsserver作为我们正在使用的应用程序当前托管(IIS)。
我们的settings.py
似乎在我们的遥测请求中未定义。除了更新软件包之外,还有什么需要做的吗?
我们也发现了这个:
cloud_rolename
使用从Azure运行时环境中提取的信息更新所有遥测项目的设备上下文的AzureRoleEnvironmentTelemetryInitializer
和RoleName
属性。
..虽然我们的RoleInstance
属性已正确填充。
答案 0 :(得分:4)
对于ASP.NET apps,我必须使用a custom ITelemetryInitializer
分配Cloud.RoleName
来分配ITelemetry.Context.Cloud.RoleName
属性,该属性将在using multi-component apps时为给定请求分配正确的上下文。
public class MultiComponentTelemetryInitializer : ITelemetryInitializer
{
public void Initialize(ITelemetry telemetry)
{
var requestTelemetry = telemetry as RequestTelemetry;
if (requestTelemetry?.Context?.Cloud == null) return;
requestTelemetry.Context.Cloud.RoleName = "myapp-api";
}
}
此初始化程序仅适用于服务器端API - 我有not found the equivalent hook for the client JS SDK。
答案 1 :(得分:3)
在网络应用程序中, Cloud_RoleName 是环境变量 WEBSITE_SITE_NAME 的值,该值在Azure中托管时自动设置。
对于内部部署,您可以手动设置此变量
对于调试环境变量,可以在项目设置>中设置。调试>环境变量 (example)。
Source code应用洞察,其中 Cloud_RoleName 被检索。
答案 2 :(得分:2)
如果您希望将云角色实例和名称包含在应用洞察js sdk中,我就成功地做到了这一点:
appInsights.queue.push(() => {
appInsights.context.addTelemetryInitializer((envelope) => {
envelope.tags["ai.cloud.role"] = "your role name";
envelope.tags["ai.cloud.roleInstance"] = "your role isntance";
});
});
答案 3 :(得分:1)
确保添加所有相关的appinsights包。我的无状态服务结构服务遇到了同样的问题。添加Microsoft.ApplicationInsights.ServiceFabric
包后rolename
会添加到遥测数据中。
答案 4 :(得分:1)
这是对Brian's answer的修改,但被拒绝了,这是不合逻辑的。
如果您想在应用程序见解js sdk中包含云角色实例和名称,我可以成功做到这一点:
appInsights.queue.push(() => {
appInsights.context.addTelemetryInitializer((envelope) => {
envelope.tags["ai.cloud.role"] = "your role name";
envelope.tags["ai.cloud.roleInstance"] = "your role isntance";
});
});
您应该使用appInsights.trackPageView();
之前的Application Insights初始化脚本将其添加到布局/母版页中,这样它就会变成:
var appInsights=window.appInsights||function(config)
{
function r(config){ t[config] = function(){ var i = arguments; t.queue.push(function(){ t[config].apply(t, i)})} }
var t = { config:config},u=document,e=window,o='script',s=u.createElement(o),i,f;for(s.src=config.url||'//az416426.vo.msecnd.net/scripts/a/ai.0.js',u.getElementsByTagName(o)[0].parentNode.appendChild(s),t.cookie=u.cookie,t.queue=[],i=['Event','Exception','Metric','PageView','Trace','Ajax'];i.length;)r('track'+i.pop());return r('setAuthenticatedUserContext'),r('clearAuthenticatedUserContext'),config.disableExceptionTracking||(i='onerror',r('_'+i),f=e[i],e[i]=function(config, r, u, e, o) { var s = f && f(config, r, u, e, o); return s !== !0 && t['_' + i](config, r, u, e, o),s}),t
}({
instrumentationKey:'Instrumentation Key'
});
window.appInsights = appInsights;
appInsights.queue.push(() => {
appInsights.context.addTelemetryInitializer((envelope) => {
envelope.tags["ai.cloud.role"] = "your role name";
envelope.tags["ai.cloud.roleInstance"] = "your role isntance";
});
});
appInsights.trackPageView();
来源1:Modifying and Filtering Telemetry with AppInsights JavaScript SDK Telemetry Initializer
资料来源2:Filtering and preprocessing telemetry in the Application Insights SDK
SDK参考:addTelemetryInitializer
答案 5 :(得分:0)
如果您使用@microsoft/applicationinsights-web
npm软件包,则较短的版本是:
const appInsights = new ApplicationInsights({
config: {
instrumentationKey: 'your instrumentation key'
}
});
appInsights.loadAppInsights();
appInsights.addTelemetryInitializer((telemetryItem) => {
telemetryItem.tags['ai.cloud.role'] = 'your app name';
});