0

У нас есть служба облачного облака, которая регистрирует все исключения для Azure Application Insights. Мы установили непрерывный экспорт всех исключений в лазурные таблицы хранения. Кроме того, у нас есть Azure Stream Analytics, который извлекает данные из блоков памяти и помещает их в базу данных Azure SQL. Теперь проблема заключается в том, что мы не можем корректно отображать/форматировать ParsedStack из Exception json в varchar (max), чтобы мы могли вставить его в базу данных.Запрос аналитики Stream для ParsedStack Exception от Azure Application Insights непрерывного экспорта

Это запрос Стрим Analytics мы использовали -

SELECT 
    CASE 
     WHEN GetArrayLength(A.basicException) > 0 
      THEN GetRecordPropertyValue(GetArrayElement(A.basicException, 0), 'assembly') 
      ELSE '' 
    END AS ExceptionAssembly 
    , 
    CASE 
     WHEN GetArrayLength(A.basicException) > 0 
      THEN GetRecordPropertyValue(GetArrayElement(A.basicException, 0), 'exceptionType') 
      ELSE '' 
    END AS ExceptionType 
    , 
    CASE 
     WHEN GetArrayLength(A.basicException) > 0 
      THEN GetRecordPropertyValue(GetArrayElement(A.basicException, 0), 'parsedstack') 
      ELSE '' 
    END AS ParsedStack 
     ,A.context.device.id as DeviceId 
     ,A.context.device.type as DeviceType 
     ,A.context.device.browser as Browser 
     ,A.context.device.browserVersion as BrowserVersion 
     ,A.context.location.country as Country 
     ,A.context.location.province as Province 
     ,A.context.location.city as City 
    INTO 
     myexceptionsoutput 
    FROM myexceptionsinput A 

Все значения выглядят, как ожидается, в таблице SQL, но значение ParsedStack столбца всегда Microsoft.EventProcessing.SteamR.Sql.ValueArray

Редактировать

Добавление объект Exception json (полная версия очень длинная, поэтому обрезается, чтобы быть более понятным) -

"basicException": [{ 
     "assembly": "Anonymously Hosted DynamicMethods Assembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null", 
     "exceptionType": "System.ServiceModel.CommunicationObjectFaultedException", 
     "outerExceptionType": "System.ServiceModel.CommunicationObjectFaultedException", 
     "failedUserCodeAssembly": "Anonymously Hosted DynamicMethods Assembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null", 
     "exceptionGroup": "System.ServiceModel.CommunicationObjectFaultedException at lambda_method", 
     "count": 1, 
     "outerExceptionMessage": "The communication object, System.ServiceModel.Channels.ServiceChannel, cannot be used for communication because it is in the Faulted state." 
    }, 
    { 
     "parsedStack": [{ 
      "method": "System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage", 
      "assembly": "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", 
      "level": 0, 
      "line": 0 
     }, 
     { 
      "method": "System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke", 
      "assembly": "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", 
      "level": 1, 
      "line": 0 
     }, 
     { 
      "method": "System.IDisposable.Dispose", 
      "assembly": "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", 
      "level": 2, 
      "line": 0 
     }], 
     "hasFullStack": true, 
     "id": "22349146", 
    }], 
    "internal": { 
     "data": { 
      "id": "bd6f2355-ed02-4883-abb9-d8ed6ceba646", 
      "documentVersion": "1.61" 
     } 
    } 
+0

Каков тип A.basicException, это массив или массив массивов? Я попробовал ниже запрос на событие, которое нравится ниже, оно работает. Запрос, который у вас есть, аналогичен, он должен работать, если A.basicException является массивом. Событие: { "ArrayColumn": [{ "Идентификатор": 255}, { "Идентификатор": 215}], "NormalColumn": 40, "DeviceID": "D2"} ASA Запрос выберите NormalColumn, случай, когда getarraylength (ArrayColumn)> 0 затем GetRecordPropertyValue (getarrayelement (ArrayColumn, 0), 'Id') еще '' конца [Id], System.Timestamp [EventTimeStamp], DeviceID в tableOutput от iotInput –

+0

@ Vigneshwa ranChandramohan Я добавил объект JSON. BasicException здесь представляет собой массив из двух объектов. Второй объект снова имеет два объекта, а второй объект - ParsedStack. Это становится еще более сложным, когда я увидел, что ParsedStack представляет собой массив объектов, размер которых всегда меняется, на основе строк в трассе стека исключения –

ответ

0

В настоящее время невозможно выразить сериализацию массива в строку в языке запросов ASA. Если все в порядке с извлечением разобранную стека в отдельные строки, вы можете сделать ниже

with T1 as 
(
select 
    GetArrayElement(iotInput.basicException,0) HighLevelDetails, 
    GetRecordPropertyValue (GetArrayElement(iotInput.basicException,1), 'parsedStack') ParsedStack, 
    internal.data.id Id 
from 
    iotInput 
) 

select 
    T1.id, 
    T1.HighLevelDetails.assembly, 
    T1.HighLevelDetails.exceptionType, 
    ParsedStackArray.ArrayValue.method ParsedStackMethod, 
    ParsedStackArray.ArrayValue.assembly ParsedStackAssembly, 
    ParsedStackArray.ArrayValue.level ParsedStackLevel, 
    ParsedStackArray.ArrayValue.line ParsedStackLine 
from 
    T1 
cross apply 
    GetArrayElements(T1.ParsedStack) as ParsedStackArray 

Основываясь на примере события, писать высокие детали уровня в таблицу и разобранную стек в другую таблицу с «ID», как общее поле может тоже произведение.

+0

Спасибо за ваш ответ @Vigneshwaran. Тем не менее, создание вызовов стека в виде строк не решит проблему. Я нажимаю полный объект на веб-работу, которая запускает электронную почту со всеми этими деталями исключения. Это может быть полезно, даже если я могу получить его в простом формате JSON. Есть ли способ сделать это? –

 Смежные вопросы

  • Нет связанных вопросов^_^