Skip to main content

Kaspersky MLAD: импорт исторических данных

1.            Описание задачи

После создания дерева активов в Kaspersky MLAD, для обучения моделей и проведения исторического инференса потребуется достаточная выборка исторических данных. Данные можно накопить в процессе работы при наличии подключения к источнику данных, например, по протоколу OPC UA. Но наиболее быстрым и предпочтительным способом является импорт данных при помощи встроенного HTTP-коннектора.

Данный документ описывает процесс настройки HTTP-коннектора и импорта данных из csv-файла при помощи POST-запросов. 

Для передачи csv-файла в MLAD можно использовать стандартную утилиту, напмример, curl. В данном документа также описан процесс импорта при помощи инструмента csv2http (предоставляется по запросу).

Для работы потребуется операционная система Linux (в данном документе используется Debian 13).

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

image.png

2.            Реализация задачи

Первым шагом необходимо в MLAD перейти в Меню администратора -> Системные параметры -> HTTP Connector. Здесь рекомендуется отключить использование TLS-соединения, чтобы упростить процесс настройки Kaspersky MLAD и ввод  его в эусплуатацию. Если в дальнейшем по сооброжения безопасности потребуется перейти на HTTPS-соединение, здесь же можно включить TLS-обратно и подгрузить необходимые сертификаты.

image.png

После этого необходимо запустить HTTP-коннектор в Службах.

image.png

Теперь мы можем отправлять данные в MLAD в виде csv файлов через POST-запросы. Более подробно настройка HTTP-коннектора и загрузка данных описаны в руководстве пользователя.

Csv-файл должен иметь следующую структуру:

метка времени; имя тега; значение тега

Метка времени должна быть в формате %Y-%m-%dT%H:%M:%S (или %Y-%m-%d %H:%M:%S).

Имя тега должно соответствовать имени тега в активах MLAD.

Если значение тега содержит дробную часть, используйте точку при отделении целой и дробной частей.

Файл не должен содержать заголовочную строку (строку с названием столбцов).

Пример содержимого файла:

2026-01-12 11:00:00;N;11.10
2026-01-12 08:00:00;N;11.240

Пример отправки CSV-файла в MLAD через curl по протоколу методом POST на порт 4999 сервера Kaspersky MLAD:

curl -F "file=@<имя файла>.csv" -X POST "http://<IP-адрес или доменное имя сервера Kaspersky MLAD>:4999/upload"

Не рекомендуется загружать файлы размером более 10-20 МБ. Это может привести к потере отдельных точек данных при загрузке. Если вы хотите загрузить большой csv-файл (что весьма вероятно), необходимо разбить его на более мелкие файлы и загрузить их по очереди с небольшой задержкой. Можно использовать, к примеру, такой скрипт (запускается из директории, в которой находятся csv-файлы:

#!/bin/bash
# Укажите адрес вашего сервера
SERVER_URL="localhost:4999/upload"
# Перебор всех csv-файлов в директории
for file in *.csv; do
    # Завершение скрипта, если csv-файлы не найдены
    [ -e "$file" ] || { echo "No CSV files found."; exit 0; }
    echo "Uploading $file to $SERVER_URL ..."
    # Отправка файла в MLAD через POST-запрос
    curl -X POST -F "file=@$file" "$SERVER_URL"
    sleep 0.5
    echo
done

Kaspersky MLAD будет добавлять часовой пояс, указанный в настройках программы к меткам времени, указанным в csv-файле. Имейте это в виду при подготовке файла для импорта.

Данный метод загрузки данных с одной стороны является достаточно простым и не требует использования дополнительных инструментов, но с другой стороны накладывает жесткие ограничения на формат и размер загружаемого csv-файла.

Альтернативно можно использовать инструмент csv2http (предоставляется по запросу). Для его запуска на машине потребуется установленный docker и docker-compose (можно запускать на машине с MLAD).

image.png

Перед началом использования утилиты необходимо загрузить локальный docker-образ (укажите корректный путь до tar-файла):

docker load -i /home/mlad-user/Downloads/csv2http/csv2http_docker_image.tar

Вы можете изменить настройки программы в файле csv2http.yml. Ключевые настройки, на которые нужно обратить внимание:

hours_from_GMT - количество часов, указанных в данном параметре должно соответствовать часовому поясу, заданному в настройках MLAD
tabular - если значение данного параметра равно False, то данные формат csv должен соответствовать формату, описанному выше (метка времени; имя тега; значение тега), если значение True, то файл должен иметь табличную форму, как показано в следующем примере:

timestampparam1param2param3param4
2025-12-28T00:00:0070534966
2025-12-28T00:01:0071524966
2025-12-28T00:02:0070534966
2025-12-28T00:03:0071534966
2025-12-28T00:04:0070524966
2025-12-28T00:05:0070524966
2025-12-28T00:06:0070534966


Во вкладке directory_types отображаются существующие типы активов. Здесь же можно создать собственные типы активов. Описания полей можно увидеть, наведя мышку на название столбца. Ниже на скриншоте показан процесс добавления двух новых типов активов.

image.png

В поле directory_type укажите название нового типа активов. Поля parameter_label являются не обязательными для заполнения, в них вы можете указать опциональные параметры, которые будут иметь все активы данного типа (например, год выпуска, или рабочее напряжение). В поле description можно задать краткое описание для данного типа активов. Поле directory_type_id не заполняется вручную.

Во вкладке directories можно создать или изменить активы. Ниже на скриншоте показан процесс добавления двух новых активов на основе созданных типов активов:

image.png

В поле directory_type выберите тип создаваемого актива. В поле directory_type_row укажите номер строки, который этот тип имеет во вкладке directory_types (несмотря на то, что в описании столбца указано «не заполнять»). В нашем случае это строки 9 и 10.

В поле directory_name укажите название нового актива.

В поле parent необходимо выбрать имя родителя. Если наш актив располагается в корне дерева, то родителя указывать не нужно. В противном случае просто скопируйте имя нужного актива из столбца directory_name. Если ваш актив находится глубже в структуре дерева, то необходимо здесь указать путь до родительского актива в формате «Родитель 1; Родитель 2; …; Непосредственный родитель». Если в выпадающем списке нужных родителей нет, удалите выпадающий список и заполните поле вручную.

В поле parent необходимо указать номер строки родителя из этой же вкладки (несмотря на то, что в описании столбца указано «не заполнять»). В примере выше, если родителем является Станция 1, то нужно указать его номер строки – 23.

Поля directory_id и parent_id вручную заполнять не нужно.

Во вкладке tags создаются новые или редактируются существующие теги. На скриншоте ниже показан пример создания трех новых тегов (new_tag_1, new_tag_2, new_tag_3).

image.png

В столбце tag_id необходимо продолжить нумерацию после последнего существующего тега для всех новых тегов (несмотря на то, что в описании столбца указано «не заполнять»). Нумерация не обязательно должна быть непрерывной, вы можете задавать id по своему усмотрению, но у каждого тега в активах MLAD должен быть свой уникальный id.

В поле tag_description указывается описание / проектное наименование тега, с которым он потом будет отображаться в инструментах MLAD.

В поле parent необходимо указать путь до родительского актива по тому же принципу, как мы уже сделали это во вкладке directories.

В поле parent_row укажите номер строки родительского актива во вкладке directories (несмотря на то, что в описании столбца указано «не заполнять»). В нашем случае это строки 24 и 25.

Поле parent_id вручную заполнять не нужно.

Остальные поля заполняются по желанию / необходимости.

После заполнения файла сохраните его и вернитесь в MLAD в раздел активов.

image.png

Нажмите кнопку Импортировать активы и теги из файла XLSX. В появившемся окне выберите ваш файл с активами для загрузки остальные настройки как показано на скриншоте ниже:

image.png

После чего нажмите кнопку Сохранить. Если импорт прошел успешно, появится зеленая плашка с соответствующим уведомлением, и в вашем дереве активов появятся новые активы и теги.

image.png

Данные теги доступны для использования во всех инструментах MLAD, в том числе в моделях, разметках и коннекторах.