Перейти к содержанию

Создание правила

Запрос

Тип Метод
POST /logmule_go_rules/create

Описание: При выполнении запроса будет создано правило корреляции с заданными параметрами.

Позволяет также управлять связями многие ко многим с другими моделями через поле _relations.

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

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

  • Если поля в объекте _relations отсутствуют зависимости не обновляются.
  • Если поле зависимости указано и в значении не пустой список идентификаторов, то связи модели приводятся к описанному состоянию.
  • Если поле зависимости указано и в значении пустой список то все связи удаляются.
  • Зависимости игнорируются в теле запроса.
  • Зависимости в ответе всегда null.

Например следующий запрос:

{
  "name": "Test",
  ...
  "_relations": {
    "filters": [] // - очистит все связи с фильтрами
    // "filters": ["uuid1", "uuid2"] // - создаст связь с 2 фильтрами
    // "filters": ["uuid1"] // - оставит связь только с первым фильтром
  }
}
Пример запроса

POST
http://127.0.0.1/cruddy/v2/logmule_go_rules/create

Тело запроса:

Параметр Тип Обязательность Описание
id string Required Идентификатор правила
created_at string time Required Дата создания правила в формате: date-time
updated_at string time Required Дата изменения правила в формате: date-time
trace_id string Required Идентификатор трассировки действия пользователя для аудита
name string Required Название правила
frontend_data object Optional Данные визуального конструктора правила
test_data Array<object> Optional Список событий для тестирования правила (логлайны)
settings Array<SettingRule> Required Список настроек правила
active boolean Required Флаг активности правила
reload boolean Required Флаг перезагрузки правила после обновления
finding_id string Required Идентификатор инцидента
description string Required Описание правила
lua string Required Код правила в формате Lua
is_retro boolean Required Флаг: используется ли правило для ретроспективной корреляции
is_system boolean Required Флаг: системное ли правило
stats object Optional Статистика сработок и ошибок правила
stats{result_count} integer Optional Количество срабатываний правила
stats{error_count} integer Optional Количество ошибок правила
is_error integer Required Количество ошибок
running_at string time Required Дата и время запуска в формате date-time
logmule_go_filters Array<object> Optional Фильтры потока событий
logmule_go_modules Array<object> Optional Макросы
finding object Optional Тип инцидента, с которым работает правило
logmule_go_results Array<object> Optional Результат сработки правила корреляции

Если поле lua не задано, ему присваивается значение по умолчанию:

local detection_windows = "10m"
local create_incident = false
local assign_to_customer = false
local risk_score = 2
local grouped_by = {}
local aggregated_by = {}
local grouped_time_field = "@timestamp"
local template = ""

function on_logline(logline)
  log("accept logline")
  -- meta = {}
  -- incident_identifier = logline:get("event.field", "")
  -- alert({
      -- template = template,
      -- risk_level = risk_score,
      -- asset_ip = logline:get_asset_data("target.host.ip"),
      -- asset_hostname = logline:get_asset_data("target.host.hostname"),
      -- asset_fqdn = logline:get_asset_data("target.host.fqdn"),
      -- asset_mac = logline:get_asset_data("target.host.mac"),
      -- create_incident = create_incident,
      -- assign_to_customer = assign_to_customer,
      -- logs = {loglines},
      -- meta = meta,
      -- incident_identifier = incident_identifier
  -- })

  -- -- grouper1:feed(logline)
end

-- function on_grouped(grouped)
--
--   grouper1:clear()
-- end

-- grouper1 = grouper.new(
--     grouped_by,
--     aggregated_by,
--     grouped_time_field,
--     detection_windows,
--     on_grouped
-- )
SettingRule
Параметр Тип Обязательность Описание
function_metrics boolean Optional Флаг: собирать ли дополнительные метрики
is_constructor boolean Optional Флаг: создано ли правило с помощью визуального конструктора
max_alerts integer Optional Максимальное количество сработок
max_alerts_per_second integer Optional Максимальное количество сработок в секунду
max_rule_memory_mb integer Optional Ограничение памяти (Мб)
Пример тела запроса

{
  "id": "uuid",
  "created_at": "2023-12-20T00:00:01.652259Z",
  "updated_at": "2023-12-20T00:00:01.652259Z",
  "trace_id": "uuid",
  "name": "string",
  "frontend_data": null,
  "test_data": [
    {}
  ],
  "settings": {
    "function_metrics": false,
    "is_constructor": false,
    "max_alerts": 1,
    "max_alerts_per_second": 1,
    "max_rule_memory_mb": 1
  },
  "active": true,
  "reload": true,
  "finding_id": "uuid",
  "description": "string",
  "lua": "string",
  "is_retro": false,
  "is_system": true,
  "stats": {
    "result_count": 1,
    "error_count": 0
  },
  "is_error": 0,
  "running_at": "2023-12-20T00:00:01.652259Z",
  "logmule_go_filters": null,
  "logmule_go_modules": null,
  "finding": null,
  "logmule_go_results": null
}

Успешный ответ

Статус код: 201 - успешное создание правила.

Формат: JSON.

Тело ответа:

Параметр Тип Обязательность Описание
id string Required Идентификатор правила
created_at string time Required Дата создания правила в формате: date-time
updated_at string time Required Дата изменения правила в формате: date-time
trace_id string Required Идентификатор трассировки действия пользователя для аудита
name string Required Название правила
frontend_data object Optional Данные визуального конструктора правила
test_data Array<object> Optional Список событий для тестирования правила (логлайны)
settings Array<SettingRule> Required Список настроек правила
active boolean Required Флаг активности правила
reload boolean Required Флаг перезагрузки правила после обновления
finding_id string Required Идентификатор инцидента
description string Required Описание правила
lua string Required Код правила в формате Lua
is_retro boolean Required Флаг: используется ли правило для ретроспективной корреляции
is_system boolean Required Флаг: системное ли правило
stats object Optional Статистика сработок и ошибок правила
stats{result_count} integer Optional Количество срабатываний правила
stats{error_count} integer Optional Количество ошибок правила
is_error integer Required Количество ошибок
running_at string time Required Дата и время запуска в формате date-time
SettingRule
Параметр Тип Обязательность Описание
function_metrics boolean Optional Флаг: собирать ли дополнительные метрики
is_constructor boolean Optional Флаг: создано ли правило с помощью визуального конструктора
max_alerts integer Optional Максимальное количество сработок
max_alerts_per_second integer Optional Максимальное количество сработок в секунду
max_rule_memory_mb integer Optional Ограничение памяти (Мб)
Пример ответа

{
  "name": "string",
  "frontend_data": {
    "alert": {
      "id": "uuid",
      "trace_id": "uuid",
      "name": "string",
      "create_incident": true,
      "assign_to_customer": true,
      "risk_level": 5.35,
      "asset_ip": "string",
      "asset_hostname": "string",
      "asset_fqdn": "string",
      "asset_mac": "string",
      "first_and_last_logs": false,
      "trim_logs": 1,
      "template": "string",
      "mitre": ""
    },
    "grouper": {
      "id": "uuid",
      "trace_id": "uuid",
      "name": "string",
      "grouped_by": [
        "string"
      ],
      "aggregated_by": [
        "string"
      ],
      "grouped_time_field": "string",
      "grouped_time_type": "2023-12-20T00:00:01.652259Z",
      "detection_windows": 5,
      "detection_windows_unit": "ms",
      "aggregate_count": 1,
      "aggregate_unique": true
    },
    "actions": [
      {
        "TTL": "string",
        "key": {
          "_default": {
            "type": "value",
            "value": "string"
          }
        },
        "type": "store-set",
        "store": "string",
        "value": "string",
        "column": "string"
      }
    ],
    "conditions": [
      {
        "type": "compare-condition",
        "id": "uuid",
        "parentId": null,
        "negation": false,
        "compareFn": "eq",
        "expressions": [
          {
            "type": "logline-get",
            "value": "string"
          }
        ]
      }
    ],
    "version": 2
  },
  "test_data": [
    {}
  ],
  "settings": {
    "function_metrics": false,
    "is_constructor": false,
    "max_alerts": 1,
    "max_alerts_per_second": 1,
    "max_rule_memory_mb": 1
  },
  "active": true,
  "reload": true,
  "finding_id": "uuid",
  "description": "string",
  "lua": "string",
  "is_retro": false,
  "is_system": true,
  "stats": {
    "result_count": 1,
    "error_count": 0
  },
  "is_error": 0,
  "running_at": "2023-12-20T00:00:01.652259Z"
}

Другие возможные ответы

Код Ответ Описание
400 Bad Request Неверный тип параметра запроса, либо отсутствует обязательный параметр
409 name_already_used Попытка создать объект с существующим уникальным атрибутом
500 Internal Server Error Другие ошибки при создании объекта

Примечание: Текст ошибки не фиксированный, может изменяться в зависимости от фактического ответа получателя запроса.

Пример ответа

Код 400

{
  "error": "Bad Request",
  "error_code": 400
}

Код 409

{
  "error": "name_already_used",
  "error_code": 409,
  "extra": {
    "fields": [
      "name"
    ]
  }
}

Код 500

{
  "error": "Internal Server Error",
  "error_code": 500
}