Передача телеметрии «доступности» приложений в SQL

#azure-application-insights #azure-stream-analytics

#azure-application-insights #azure-stream-analytics

Вопрос:

Кажется, я не могу получить телеметрию доступности, отправленную в базу данных SQL Azure с помощью Stream Analytics. Ошибки нет. Просто данные не вставляются.

Ввод

У меня настроен ввод для расположения большого двоичного объекта, куда также экспортируется Application Insights. Я успешно протестировал это с помощью функции «Образцы данных»:

Сведения о вводе

Вот пример из выборки извлеченных данных (обратите внимание, что я упростил содержимое):

 [
    {
        "availability": [ {
            "testRunId": "75e32865-36fa-4853-b9be-43e315a63f6e",
            "testTimestamp": "2016-10-19T11:38:58.7370000Z",
            "testName": "mytest-prod-pingtest",
            "runLocation": "BR : Sao Paulo",
            "durationMetric": {
                "name": "duration",
                "value": 14610000.0,
                "count": 1.0,
                "min": 14610000.0,
                "max": 14610000.0,
                "stdDev": 0.0,
                "sampledValue": 14610000.0
            },
            "result": "Pass",
            "count": 1
        } ],
        "internal": {...},
        "context": {...},
        "EventProcessedUtcTime": "2016-10-19T11:45:53.9144151Z"
    }
]
  

Вывод

Выходные данные настраиваются для таблицы базы данных SQL Azure tt.AvailabilityRequests . Тестирование завершено успешно:

Тестирование выходных данных

Эта таблица имеет следующую схему:

 CREATE TABLE [tt].[AvailabilityRequests](
    [Id] [uniqueidentifier] NOT NULL DEFAULT (newsequentialid()),
    [Timestamp] [datetime] NOT NULL,
    [AppInsightsTestRunId] [varchar](max) NULL,
    [TestName] [varchar](max) NULL,
    [RunLocation] [varchar](max) NULL,
    [IsSuccessful] [bit] NULL,
    [DurationInMilliseconds] [int] NULL,
    [InsertedDate] [datetime] NOT NULL DEFAULT (getdate())
)
  

Запрос

У меня настроен следующий запрос:

 SELECT
    Flat.ArrayValue.testTimestamp as [Timestamp],
    Flat.ArrayValue.testRunId as [AppInsightsTestRunId],
    Flat.ArrayValue.testName as [TestName],
    Flat.ArrayValue.runLocation as [RunLocation],
    CASE WHEN Flat.ArrayValue.result = 'Pass' THEN 1 ELSE 0 END as [IsSuccessful],
    CAST(Flat.ArrayValue.durationMetric.value / Flat.ArrayValue.durationMetric.count / 10000 AS BIGINT) as [DurationInMilliseconds]
INTO
    availabilityRequests
FROM
    availability A
CROSS APPLY 
    GetElements(A.[availability]) as Flat
  

Я делаю аналогичную вещь с телеметрией запросов, и это работает просто отлично:

Запрос

Комментарии:

1. У меня такая же проблема, удалось ли вам перенести какие-либо данные в SQL?

2. @AlexChoroshin к сожалению, нет. Будет держать вас в курсе

3. Я успешно перенес некоторые данные в SQL, это было связано с тем, как я построил свой шаблон пути ввода. можете ли вы отправить свой путь?

4. @AlexChoroshin Мой определяется как myappinsights_xyz/Availability/{date}/{time} с YYYY-MM-DD в качестве формата даты и HH в качестве формата времени. Но я не верю, что это моя проблема, поскольку я могу успешно извлекать «образцы данных». Ваш запрос случайно не отличается от моего?

5. @AlexChoroshin Это дошло до моей колонки BIT. После изменения на INT все работает хорошо.

Ответ №1:

Stream Analytics не поддерживает тип «boolean»; BIT в SQL Server.

Данные передаются после изменения [IsSuccessful] поля на [int] .