Как я могу отправить пользовательские сложные нестроковые свойства в Телеметрию на Azure Портал с App Insights TrackEvent в основном c Javascript (не NodeJS)?
Я инициализировал Application Insights JavaScript SDK через следующий фрагмент настройки:
<script type='text/javascript'>
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: "@Microsoft.ApplicationInsights.Extensibility.TelemetryConfiguration.Active.InstrumentationKey"
});
window.appInsights=appInsights;
appInsights.trackPageView();
</script>
Я попробовал пример отсюда https://github.com/microsoft/ApplicationInsights-JS и здесь https://docs.microsoft.com/en-us/azure/azure-monitor/app/api-custom-events-metrics#properties, но безуспешно:
appInsights.trackEvent({
name: 'EventName',
properties: { // accepts any type
prop1: 'string',
prop2: 123.45,
prop3: {
nested: 'objects are okay too'
}
}
});
В запросе отслеживания Ajax, отправленном на Azure, отправленная полезная нагрузка имеет следующую форму:
ver: 2
name:
name: 'EventName'
properties:
prop1: 'string'
prop2: 123.45
prop3:
nested: 'objects are okay too'
А в Azure Insight Appal App я получаю следующее:
CUSTOM EVENT
Event name [object Object]
Я также получаю предупреждение Javascript в консоли:
Logging.ts:206 AI: CannotSerializeObjectNonSerializable
message:"Attempting to serialize an object which does not implement ISerializable"
props:"{name:name}"
Я смог отправить только, указав свойство name
отдельно и только свойства строкового типа и только одноуровневые вложенные свойства.
Успешные тесты:
appInsights.trackEvent("EventName1", { properties: 'something' });
appInsights.trackEvent("EventName2", { prop1: 'something', prop2: 'prop2' });
Неудачные тесты:
appInsights.trackEvent("EventName3", { prop1: 'prop1', nestedProp2: {prop2: 'prop2'} });
appInsights.trackEvent('EventName4', { properties: { dataToSend: 'something' }, measurements: {prop1: 'prop1', prop2: 'prop2'}});