Загрузка данных из функции в концентратор событий в Azure Data Explorer? - PullRequest
0 голосов
/ 02 мая 2019

У меня есть некоторые данные JSON, поступающие в концентратор IOT, который затем вызывает функцию для удаления вложенных данных.

Функция отправляет эти данные в концентратор событий, а затем предполагается, что данныебыть принятым в Azure Data Explorer в соответствии с настроенным мною сопоставлением.

Проблема в том, что данные не попадают в проводник данных;единственный способ получения данных с помощью сопоставления - установка источника в качестве концентратора событий, получающего информацию с помощью пользовательской маршрутизации.

Можно ли загружать данные в проводник данных с помощью концентратора IOT ->function -> концентратор событий?

РЕДАКТИРОВАТЬ:

Функция, используемая для отсоединения и пересылки данных в другой концентратор событий:

module.exports = async function (context, eventHubMessages) {

    // receive message from IOT hub
    eventHubMessages.forEach((message, index) => {
        var devicename = message.deviceName;
        // timestamp comes in two different texts, find and store correct one
        var timestamp = (message.timestamp == null) ? message.timeStamp : message.timestamp;
        //context.log("Message: " + JSON.stringify(message));
        if (message.tags != null) {
            message.tags.forEach((tag, index) => {
                // for each tag, create new object
                var name = tag.Name;
                var value = tag.Value;
                var newObject = {
                                 "name":name,
                                 "value": value,
                                 "eventenqueuedutctime": timestamp,
                                 "devicename": devicename
                                }                
                // output message object to 'splitmessage-dev' event hub
                context.bindings.outputEventHubMessage = newObject
                context.log("Sent object: " + JSON.stringify(newObject));
            })
        }
    });

};

Я могу подтвердитьдругой концентратор событий получает эти данные (проверяется другой функцией, которая печатает входящие сообщения).

Отображение выглядит следующим образом:

'testTableMap' '[{"column":"name", "path":"$.name"}, 
{"column":"value", "path":"$.value"}, 
{"column":"eventenqueuedutctime", "path":"$.eventenqueuedutctime"},
{"column":"devicename", "path":"$.devicename"}]'

1 Ответ

0 голосов
/ 12 мая 2019

Должна быть возможность принимать данные с предоставленной вами настройкой.

Поскольку данные не принимаются, вам, вероятно, следует попытаться определить, где они застряли.

Я будупредоставить некоторые общие рекомендации, которые должны помочь с отладкой.

Данные не достигают EventHub, который настроен в качестве источника данных для ADX

Вы можете проверить мониторинг EventHub и убедиться, что события проходят.Кроме того, я бы порекомендовал прочитать данные из EventHub, чтобы убедиться, что они выглядят так, как вы ожидаете.(кажется, что вы уже сделали это)

Это не похоже на случай, так как вы пояснили, что делаете видите события, поступающие в EventHub, и вы можете успешно читать их через другойфункция.

Таблица / отображение не настроены должным образом

Попробуйте ввести данные из настроенного EventHub вручную

// create table 
// I am assuming strings because other types can cause format errors, 
// so I would try strings before other specific types (dynamic, datetime)
.create table IngestionTest (name: string, value:string, eventenqueuedutctime:string, devicename:string)

// add mapping
.create table IngestionTest ingestion json mapping 'testTableMap' '[{"column":"name", "path":"$.name"}, {"column":"value", "path":"$.value"}, {"column":"eventenqueuedutctime", "path":"$.eventenqueuedutctime"},{"column":"devicename", "path":"$.devicename"}]'

// ingest data manually - replace with you actual data
.ingest inline into table IngestionTest with (jsonMappingReference='testTableMap') <| '{ "name" : "test", "value": { "some":"nested", "value": true}, "eventenqueuedutctime" : "2016-01-14", "devicename": "surface" }'

Если вышене работает, вы можете попытаться понять, почему, перечисляя ошибки при приеме пищи

.show ingestion failures

Если вышеприведенное сработало, вы можете попробовать поиграться с другими типами данных.

Мониторинг источника данных

Еще одна вещь, которую вы можете проверить через портал Azure, - это метрики для кластера ADX.

Попробуйте перейти в кластер на портале Azure и на вкладке MetricsВы можете выбрать две метрики, которые могут помочь вам в устранении неполадок:

Events Processed - дает вам представление о том, сколько событий ADX удалось прочитать из EventHub.Это в основном позволяет вам знать, что источник данных настроен правильно.Если вы видите не события, я бы предложил создать новый источник.

Ingestion Result - дает вам подсчет статусов приема (успех / сбой), что также может помочь в диагностике сбоев.

...