Операционная система ЗОСРВ «Нейтрино» > Руководство разработчика > Интерфейсы различных подсистем > Монитор аномальной активности (amon) > Общие сведения > Разработка операторов данных



Разработка операторов данных

Краткое руководство по разработке собственных операторов данных amon

В этой главе:

Назначение оператора данных
Из чего состоит оператор данных
Пример оператора данных

Назначение оператора данных

Оператор данных - специальный модуль в виде разделяемой библиотеки для монитора аномальной активности. Он выполняет сбор и анализ данных о поведении тех или иных объектов и отправляет метрики в сервис amon. Сервис amon загружает при старте операторы данных, которые были указаны в конфигурационном файле сервиса.

Из чего состоит оператор данных

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

Пример оператора данных

Рассмотрим пример простейшего поставщика данных.

Обычно его реализация разбивается на несколько модулей в соответствии с описанной ранее структурой - provider, analyzer и непосредственно operator. Модуль analyzer может быть реализован средствами платформы Синаптика. Модуль operator является главным модулем и реализуется в виде класса наследника интерфейсного класса Operator:

#include <amon/operator.hpp>
class MyOperator : public Operator {
private:
MyProvider *Provider;
MyAnalyzer *Analyzer;
/* ... */
public:
void doInit(int vlevel, int opid, const NotifierFunction& notifier, json_object *jparameters) override;
void doRunHandler() override;
void doLearnAnomalyData(AlertData*) override;
void setCommand(Command command) override;
/* ... */
};

Обязательно наличие реализаций функций doInit, doRunHandler, doLearnAnomalyData и setCommand.

Модуль operator.cpp обязательно должен включать в себя точку входа:

extern "C" void* amon_operator_entry();
void* amon_operator_entry() {
return new MyOperator();
}

Этот код выполняется, когда сервис amon загружает разделяемую библиотеку оператора данных. После этого сервис выполняет метод doInit. Данный метод должен обеспечивать доступ к уровню вербозности и к callback-функции оператора данных, а также выполнять обработку параметров оператора данных из конфигурационного файла:

void MyOperator::doInit(int vlevel, int opid, const NotifierFunction& notifier, json_object *jparameters) {
VLevel = vlevel;
OperatorID = opid;
Notifier = notifier;
/* парсинг параметров из JSON */
}

Затем автоматически вызывается метод doRunHandler. Он запускает пайплайн получения, подготовки и анализа данных, принятия решения, а также возвращает обработанные данные обратно в сервис amon. Пример реализации этого метода:

void MyOperator::doRunHandler() {
if (VLevel > 0) std::cout << "Running MyOperator..." << std::endl;
// Создаём объекты провайдера и анализатора данных
Provider = new MyProvider();
Analyzer = new MyAnalyzer();
// Создаём поток обработчика данных
Worker = std::thread([this]() {
while (true) {
// Создаём списки объектов и оповещений
std::vector<ObjectData> objects;
std::vector<AlertData> alerts;
/* Получаем данные из провайдера и анализируем их, заполняем списки objects и alerts */
// Отправляем результаты анализа в сервис amon
Notifier(OperatorID, objects, alerts, ProcessingTime);
delay(Interval);
}
});
if (VLevel > 0) std::cout << "MyOperator init done" << std::endl;
}

Метод doLearnAnomalyData позволяет сообщить анализатору данных, что нужно произвести дообучение системы на определённой аномалии, например:

void MyOperator::doLearnAnomalyData(AlertData *a) {
Analyzer -> doLearnAnomalyData(a);
}

Метод setCommand позволяет изменить режим работы анализатора данных (обучение\анализ).




Предыдущий раздел: перейти