Аудит точек входа коллектора

Данное руководство описывает процесс настройки конвейера для обнаружения отсутствия ожидаемых событий от точек входа конвейеров выбранного коллектора.

О настройке аудита точек входа коллектора

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

Для создания конвейера корреляции на отсутствие события, понадобятся следующие элементы:

  1. Сбор метрик: обеспечивает непрерывный сбор метрик активности от выбранных элементов коллектора.

  2. Нормализатор: приводит собранные метрики к единому формату для упрощения последующего анализа.

  3. Коррелятор: проверяет поступление событий в заданные временные интервалы (настраиваемый параметр ttl). Если от элемента события не поступают, генерируется корреляционное событие об их отсутствии. Настройка коррелятора включает определение оптимальных значений для ttl и count с учетом частоты и природы поступающих данных.

  4. Конечная точка: отправляет обработанные и коррелированные события в хранилища данных и внешние системы.

  5. Сервис оповещений: позволяет настраивать связи между правилами корреляции и правилами сегментации для эффективного распределения корреляционных событий по оповещениям и их отправки через почтовые интеграции.

Таким образом, настройка конвейера для мониторинга источников событий включает следующие шаги:

Добавление конвейера

Конвейер — это упорядоченная последовательность взаимосвязанных элементов, выполняющих отдельные этапы обработки событий в системе.

Добавление и настройка конвейера обработки событий осуществляются в рамках коллектора, который содержит элементы с необходимыми метриками для мониторинга.

Чтобы добавить конвейер:

  1. Перейдите на вкладку Конвейеры в карточке выбранного коллектора. Система отобразит список конвейеров коллектора.

  2. В нижней части окна нажмите на кнопку Добавить. На экране отобразится окно добавления конвейера.

  3. Введите название конвейера.

  4. При необходимости введите описание конвейера.

    Установите флажок Открыть конфигурацию конвейера, чтобы сразу перейти в окно настроек конфигурации конвейера после его создания.
  5. Нажмите на кнопку Добавить. Система отобразит уведомление о добавлении конвейера. Новый конвейер появится в списке конвейеров на вкладке Конвейеры в карточке коллектора.

Настройка конфигурации конвейера

Перед настройкой конфигурации конвейера определите, метрики каких источников в конвейерах коллектора требуется отслеживать.

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

Чтобы перейти к настройке конфигурации конвейера:

  1. Откройте карточку конвейера по стрелке (chevron down) в его строке и нажмите на кнопку Конфигурация конвейера в нижней части карточки.

  2. В открытом окне конфигурации конвейера убедитесь, что в выпадающем списке Версия в правом верхнем углу окна выбран пункт Черновик.

Шаг 1. Сбор метрик

Сбор метрик — это элемент конвейера, который собирает метрики по отдельным элементам конвейеров коллектора для их дальнейшей обработки и анализа.

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

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

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

Шаг 2. Нормализация данных

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

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

Чтобы добавить нормализацию:

  1. Добавьте на конвейер нормализатор. При создании элемента, используйте системное правило нормализации "Правило нормализации Мониторинг источников".

    Example 1. Правило нормализации "Мониторинг источников", схема RObject
    id: "786d83cb-48e0-4d5a-b050-ebeea34455cd"
    name: "Правило нормализации Мониторинг источников"
    type: normalization_rule
    description: "Правило нормализации для событий сбора метрик"
    version: 0.0.5
    author: R-Vision
    tags:
      - metrics
    
    filter: !vrl |
      true
    
    normalizer: !vrl |
      .dproduct = "metrics"
      . |= compact({
        "dvendor": to_string(.raw.namespace) ?? "",
        "name": to_string(.raw.tags.component_id) ?? "",
        "cnt": to_string(.raw.counter.value) ?? "",
        "cat" : to_string(.raw.name) ?? "", })
    
    tests:
      # Наименование теста. Должен быть уникальным для каждого теста в рамках правила
      - name: "testing"
        # Список тестовых событий
        events:
          - raw: {"counter":{"value":1751.0},"kind":"absolute","name":"component_received_event_bytes_total","namespace":"vector","tags":{"component_id":"56c8067a-7f1f-4e4c-8095-f8261ed8227d_WXAm_yVi0VM90-btxewDl","component_kind":"transform","component_type":"remap","host":"collector-bf157c1b-107d-4090-b137-65c89fa14933-795dbc6cff-mhckd"},"timestamp":"2024-05-29T10:26:42.688089484Z"}
        # Проверка для тестовых событий
        assertion: !vrl |
          assert_eq!(.[0].cat, "component_received_event_bytes_total")
          assert_eq!(.[0].cnt, "1751")
          assert_eq!(.[0].dvendor, "vector")
          assert_eq!(.[0].name, "56c8067a-7f1f-4e4c-8095-f8261ed8227d_WXAm_yVi0VM90-btxewDl")
    Интерпретация

    В блоке normalizer правила применяется VRL-функция compact для создания упрощённой структуры данных. Она включает следующие поля:

    • dvendor: присваивает данному полю строковое представление значения поля namespace из исходного события. Если поле namespace отсутствует, присваивается пустая строка.

    • name: присваивает данному полю строковое представление значения component_id, содержащегося в тегах исходного события. Если значение component_id отсутствует, возвращается пустая строка.

    • cnt: задаётся строковое представление значения счётчика counter.value из исходного события. Если значение счётчика отсутствует, возвращается пустая строка.

    • cat: строковое представление поля name из исходного события. Если поле name не определено, результатом будет пустая строка.

      Функция compact автоматически удаляет из результата любые ключи, которым присвоены пустые строки или значения null, тем самым создавая более простую для обработки структуру данных.
  2. Выход из элемента Сбор метрик соедините со входом элемента Нормализатор.

Шаг 3. Корреляция данных

Чтобы события, поступающие на конвейер, коррелировались, необходимо добавить на конвейер коррелятор.

Коррелятор позволяет связывать различные события и создавать комплексные правила на их основе. На входе применяет правила корреляции к потоку событий. На выходе выдает корреляционные события.

Чтобы добавить коррелятор, необходимо установить в нём правило корреляции. Правила корреляции определяют, как коррелятор будет обрабатывать входящие данные и формировать на их основе корреляционные события.

  1. Добавьте на конвейер коррелятор. При создании элемента, используйте системное правило корреляции "Правило корреляции Мониторинг источников".

    Example 2. Правило корреляции "Мониторинг источников", схема RObject
    id: "6cd640a1-c065-40fc-9341-78067ccdefe6"
    name: "Правило корреляции Мониторинг источников"
    type: correlation_rule
    description: "Правило корреляции ориентировано на события с элемента Сбор метрик. При отсутствии событий с точки входа в течении заданного периода, будет создано корреляционное событие"
    author: R-Vision
    version: 0.0.16
    known_false_positives:
      - "события приходят блоком данных с определенной периодичностью, которая выше ttl"
    severity: high
    tags:
      - metrics
    
    filter: !vrl |
      .dvendor == "vector"
    
    aliases:
      event_1:
        filter: !vrl |
          .cat == "component_received_events_total" && .cnt != "0"
    
    select:
      alias: event_1
    
    group:
      - alias: event_1
        by:
          - cnt
          - name
        count: 3
    
    ttl: 60
    
    trigger_alert: true
    
    on_correlate: !vrl |
      .dvendor = "vector"
      cs = [ encode_json(%event_1[0].raw), encode_json(%event_1[1].raw), encode_json(%event_1[2].raw)]
      .cs1 = join(cs, ", ") ?? ""
      .cs1Label = "Базовые события"
      .cnt = to_string(%event_1[0].cnt) ?? "-"
      name = to_string(%event_1[0].name) ?? "-"
      .name = name
      .message = "Перестали поступать события с источника {{name}}"
    
    tests:
    # Наименование теста. Должен быть уникальным для каждого теста в рамках правила
      - name: Test event
    # Список тестовых событий
        events:
         - {"id":"2f81df63-c2ea-429e-b16d-cdd1cc1d7a63","sourceIp":"","tenantId":"00000000-0000-0000-0000-000000000000","art":"2024-06-04T14:02:18.000+03:00","raw":"{\"counter\":{\"value\":13.0},\"kind\":\"absolute\",\"name\":\"component_received_events_total\",\"namespace\":\"vector\",\"tags\":{\"component_id\":\"56c8067a-7f1f-4e4c-8095-f8261ed8227d_WXAm_yVi0VM90-btxewDl\",\"component_kind\":\"transform\",\"component_type\":\"remap\",\"host\":\"collector-bf157c1b-107d-4090-b137-65c89fa14933-85c5cb5c6f-qnh97\"},\"timestamp\":\"2024-06-04T11:02:18.582264635Z\"}","collectorId":"bf157c1b-107d-4090-b137-65c89fa14933","timestamp":"2024-06-04T14:02:18.000+03:00","cnt":13,"type":"нормализованное событие","dvendor":"vector","dproduct":"metrics","name":"56c8067a-7f1f-4e4c-8095-f8261ed8227d_WXAm_yVi0VM90-btxewDl","cat":"component_received_events_total"}
         - {"id":"2f81df63-c2ea-429e-b16d-cdd1cc1d7a63","sourceIp":"","tenantId":"00000000-0000-0000-0000-000000000000","art":"2024-06-04T14:02:18.000+03:00","raw":"{\"counter\":{\"value\":13.0},\"kind\":\"absolute\",\"name\":\"component_received_events_total\",\"namespace\":\"vector\",\"tags\":{\"component_id\":\"56c8067a-7f1f-4e4c-8095-f8261ed8227d_WXAm_yVi0VM90-btxewDl\",\"component_kind\":\"transform\",\"component_type\":\"remap\",\"host\":\"collector-bf157c1b-107d-4090-b137-65c89fa14933-85c5cb5c6f-qnh97\"},\"timestamp\":\"2024-06-04T11:02:18.582264635Z\"}","collectorId":"bf157c1b-107d-4090-b137-65c89fa14933","timestamp":"2024-06-04T14:02:18.000+03:00","cnt":13,"type":"нормализованное событие","dvendor":"vector","dproduct":"metrics","name":"56c8067a-7f1f-4e4c-8095-f8261ed8227d_WXAm_yVi0VM90-btxewDl","cat":"component_received_events_total"}
         - {"id":"22daee10-9148-4284-be42-3c0e9c2b9f33","sourceIp":"","tenantId":"00000000-0000-0000-0000-000000000000","art":"2024-06-04T14:01:48.000+03:00","raw":"{\"counter\":{\"value\":13.0},\"kind\":\"absolute\",\"name\":\"component_received_events_total\",\"namespace\":\"vector\",\"tags\":{\"component_id\":\"56c8067a-7f1f-4e4c-8095-f8261ed8227d_WXAm_yVi0VM90-btxewDl\",\"component_kind\":\"transform\",\"component_type\":\"remap\",\"host\":\"collector-bf157c1b-107d-4090-b137-65c89fa14933-85c5cb5c6f-qnh97\"},\"timestamp\":\"2024-06-04T11:01:48.582435089Z\"}","collectorId":"bf157c1b-107d-4090-b137-65c89fa14933","timestamp":"2024-06-04T14:01:48.000+03:00","cnt":13,"type":"нормализованное событие","dvendor":"vector","dproduct":"metrics","name":"56c8067a-7f1f-4e4c-8095-f8261ed8227d_WXAm_yVi0VM90-btxewDl","cat":"component_received_events_total"}
    
        assertion: !vrl |
          assert_eq!(.[0].message, "Перестали поступать события с источника 56c8067a-7f1f-4e4c-8095-f8261ed8227d_WXAm_yVi0VM90-btxewDl")
          assert_eq!(.[0].cnt, "13")
          assert_eq!(.[0].dvendor, "vector")
          assert_eq!(.[0].severity, "high")
    Интерпретация

    Правило корреляции "Мониторинг источников" предназначено для отслеживания метрик конвейеров коллектора. Если события с точки входа не поступают в течение 1 минуты, коррелятор генерирует корреляционное событие.

    Логика фильтрации (filter)

    • Основной фильтр для событий — .dvendor == "vector", выбирающий события, у которых значение dvendor равно "vector".

    Логика фильтрации (aliases)

    • Псевдоним event_1: фильтр для событий с метрикой, где cat равно "component_received_events_total" и cnt не равно "0".

    Соединение потоков событий (select и group)

    • select: выбор псевдонима для дальнейшей обработки. В данном случае используется event_1.

    • group: группировка событий по полям cnt и name. Группировка применяется к псевдониму event_1 и формируется при накоплении 3 событий.

    Срок хранения промежуточных данных корреляции (ttl)

    • ttl на уровне правила задает общее максимальное время жизни промежуточных корреляционных данных — 60 секунд. Это время определяет, как долго промежуточные результаты будут храниться в памяти до их автоматического удаления.

    Пост-корреляционная логика (on_correlate)

    При срабатывании корреляции создается сообщение об отсутствии событий с указанного источника.

    • Формирование сообщения:

      • message: формируется сообщение "Перестали поступать события с источника " + значение name, которое указывает на идентификатор элемента, из которого ожидались данные.

      • dvendor: поле устанавливается в значение "vector", что соответствует источнику данных.

      • cnt: выводится значение счетчика последнего события, что помогает определить объем данных до прекращения поступления.

      • name: содержит идентификаторы конвейера и элемента, которые породили событие.

      • component_id: отображает идентификатор элемента, предоставляющий конкретный источник данных.

    Оповещение

    • trigger_alert: указывает на то, что по результатам корреляции будет создано оповещение.

  2. Выход из элемента Нормализатор соедините со входом элемента Коррелятор.

Шаг 4. Конечная точка

Конечная точка, в зависимости от настроек, пересылает событие в хранилище событий или внешнюю систему. Имеет один вход и не имеет выходов.

  1. Добавьте на конвейер конечную точку, в которой будут сохраняться события.

  2. Выход из элемента Коррелятор соедините со входом элемента Конечная точка.

Шаг 5. Сервис оповещений

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

  1. Добавьте на конвейер сервис оповещений, чтобы на полученные корреляционные события в системе формировалось оповещение. При создании элемента, используйте системное правило сегментации "Правило сегментации Мониторинг источников (группировка по id)".

    Можно создать Сервис оповещений без указания правил сегментации, но рекомендуется добавить правило сегментации, чтобы корреляционные события по одному компоненту собирались в отдельное оповещение.
    Example 3. Пример правила сегментации, схема RObject
    id: 55b22053-0000-420a-0000-2fa5b176b4f5
    name: "Правило сегментации Мониторинг источников (группировка по id)"
    type: segmentation_rule
    version: 0.0.1
    tags:
      - metrics
    
    group_by:
      - correlationRuleName
      - name
    
    alert_name: !vrl |
      "Перестали поступать события из элемента " + to_string!(.name)
    Интерпретация

    Данное правило сегментации позволяет формировать оповещения, группируя корреляционные события по правилам и именам элементов. Например, если события перестали поступать из определенного элемента, система сгенерирует оповещение с указанием названия этого элемента.

    • group_by: определяет поля, по которым будет происходить группировка корреляционных событий. В данном примере используются поля correlationRuleName и name.

      • correlationRuleName: имя правила корреляции.

      • name: название элемента.

    • alert_name: задает шаблон для формирования имени оповещения. В данном примере используется VRL для создания строки, включающей значение поля name.

      • "Перестали поступать события из элемента ": текстовая часть сообщения.

      • to_string!(.name): динамическая часть сообщения, которая добавляет значение поля name в строку.

  2. Выход из элемента Коррелятор соедините со входом элемента Сервис оповещений.

Шаг 6. Включение коллектора и установка конфигурации конвейера

Перед включением конвейера убедитесь, что связанный с ним коллектор уже включен.

Чтобы метрики начали поступать на конвейер и обрабатываться:

  1. Перейдите в карточку коллектора и включите его.

  2. Откройте конфигурацию конвейера и установите текущую конфигурацию.

Рекомендации по настройке

Параметры ttl, count и период сбора метрик влияют на чувствительность и время реакции системы. Важно настроить их в соответствии с конкретными требованиями, чтобы обеспечить баланс между чувствительностью системы и устойчивостью к ложным срабатываниям.

Параметр ttl

ttl (time-to-live) определяет максимальное время, в течение которого промежуточные результаты корреляционных операций сохраняются в памяти. Значение ttl должно соответствовать максимальному времени между ожидаемыми событиями, с учетом допустимой погрешности для обработки возможных задержек.

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

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

Формула для настройки ttl:

ttl = максимальное время между событиями + допустимая погрешность при реагировании

Параметр count

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

Чем выше значение count, тем больше событий требуется для срабатывания корреляции, что может уменьшить количество ложных срабатываний, но также может привести к пропуску важных корреляций. Напротив, более низкое значение count увеличивает чувствительность системы, но также может привести к частым ложным срабатываниям.

Период сбора метрик

При создании элемента сбора метрик можно задать интервал между сборами в секундах, что позволяет контролировать частоту мониторинга активности источников. Этот интервал настраивается в поле Период сбора метрик при добавлении сбора метрик на конвейер и должен быть адаптирован в зависимости от динамики изменений в отслеживаемой среде.

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

Пример настройки параметров ttl и count

  • Для событий, поступающих с периодичностью раз в час, значение ttl следует установить на 2 часа для некритичных событий и 1 час 2 минуты для критичных событий.

  • Для событий, поступающих каждую секунду, значение ttl можно установить на 1 минуту.

Выбор значения параметра count зависит от частоты событий:

  • Для редких событий значение count можно установить на 1, чтобы система реагировала на каждое событие.

  • Для частых событий значение count можно установить на 5 или выше, чтобы уменьшить количество ложных срабатываний.