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)S).

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

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

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

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

2026-01-12 11:08:00:00;N;Tag1;11.10
2026-01-12 08:00:00;N;11.240Tag2;37
2026-01-12 11:00:00;Tag1;12.10
2026-01-12 11:00:00;Tag2;38

Пример отправки 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

Утилита запускается при помощи скрипта в коренвой директории ./run.sh
Для остановки утилиты используется скрипт ./stop.sh

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

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

timestamp param1 param2 param3 param4
2025-12-28T00:00:00 70 53 49 66
2025-12-28T00:01:00 71 52 49 66
2025-12-28T00:02:00 70 53 49 66
2025-12-28T00:03:00 71 53 49 66
2025-12-28T00:04:00 70 52 49 66
2025-12-28T00:05:00 70 52 49 66
2025-12-28T00:06:00 70 53 49 66

timestamp_position - номер столбца, содержащего метки времени (нумерация начинается с 0). Релевантно только в табличном режиме, при переключении в стандартный режим закоментируйте эту строку.

tag_position

Во- вкладкеномер столбца, содержащего имена тегов (нумерация начинается с 0). Релевантно только в стандартном режиме, при переключении в табличный режим закоментируйте эту строку.
value_position - номер столбца, содержащего значения тегов (нумерация начинается с 0). Релевантно только в стандартном режиме, при переключении в табличный режим закоментируйте эту строку.
skip_lines - количество строк в начале файла, которое вы хотите пропустить при обработке. Полезно, если файл содержит дополнительную информацию в начале.
has_header - значение directory_truetypes, отображаютсяесли существующиеиспользуется типытабличный активов.режим. ЗдесьПри жепереключении можнов создатьстандартный собственные типы активов. Описания полей можно увидеть, наведя мышку на название столбца. Ниже на скриншоте показан процесс добавления двух новых типов активов.

image.png

В поле directory_typeрежим укажите название нового типа активов. Поля parameter_false.
labeltimestamp_format являются- неукажите обязательнымиформат дляметок заполнения,времени, используемый в нихвашем выфайле, можете указать опциональные параметры, которые будут иметь все активы данного типа (например, год'%Y-%m-%dT%H:%M:%S' выпуска,или '%d-%b-%y %H:%M:%S'
field_separator
 - укажите разделитель, который используется в вашем csv-файле.
url - укажите ip или рабочее напряжение). В поле description можно задать краткое описание для данного типа активов. Поле directory_type_id не заполняется вручную.

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

image.png

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

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

В поле parent необходимо выбратьдоменное имя родителя.вашего сервера MLAD. Если нашMLAD активрасположен располагается в корне дерева, то родителя указывать не нужно. В противном случае просто скопируйте имя нужного актива из столбца 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'http://host.docker.internal:4999/upload'.

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

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

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

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

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

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

image.pngimage.png

НажмитеУтилита кнопкупериодически Импортироватьсканирует активыданную директорию на предмет новых файлов и тегиобрабатывает их. Обработанные фалы помещаются в директорию ./work/staging, после чего загружаются в MLAD стандартными средствами и удаляются. Если директория staging больше не содержит файлов, значит загрузка завершена.

Вы можете подключиться к журналу работы утилиты для траблшутинга загрузки. Для этого используйте следующую команду:

docker logs csv2http-smb2mlad1
используйте флаг -f, если вы хотите отслеживать новые записи в журнале

Если загрузка файлов завершилась досрочно (например, скриптом ./stop.sh), и вы хотите загрузить файлы заново, то вам необхоидимо удалить все файлы из файладерикторий XLSX./work/csv Ви появившемся./work/staging, окнеа выберитетакже вашудалить файл с активами для загрузки остальные настройки как показано на скриншоте ниже:

image.png

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

image.png

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