Vector

Содержание

Мониторинг

Представьте, что вы реализуете мониторинг. Сбор метрик уже готов. Визуализацию тоже понятно, как сделать. Остаётся самое заковыристое — агрегировать полученные данные и преобразовать их в нужный формат для построения графиков.

Но как это сделать?

Как делают обычно

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

Не то чтобы это очень сложно написать, но как-то всё многословно выглядит.

Но можно сделать проще.

Vector

Есть такая штука — Vector. Это мощный тулинг для построения observability пайплайнов. Он может читать, преобразовывать и сохранять результаты работы в нужном формате.

Пайплайн работы с данными описывается в виде yaml или toml файла. Необходимо указать три секции:

  1. sources — откуда прочитать данные;
  2. transforms — что сделать с данными;
  3. sinks — куда данные сохранить.

Вектор из коробки умеет работать со многими sources (файлы, логи, БД), может их по-всякому трансформировать и синкать в различные места (Prometheus, Datadog, Elasticsearch). В процессе трансформаций можно также использовать набор готовых функций, написанных на Vector Remap Language.

Пример пайплайна из документации вектора, в котором данные читаются из Kafka, парсятся и сохраняются в Elasticsearch:

sources:
  kafka_in:
    type: "kafka"
    bootstrap_servers: "10.14.22.123:9092,10.14.23.332:9092"
    group_id: "vector-logs"
    key_field: "message"
    topics: ["logs-*"]

transforms:
  json_parse:
    type: "remap"
    inputs: ["kafka_in"]
    source: |
      parsed, err = parse_json(.message)
      if err != null {
        log(err, level: "error")
      }
      . |= object(parsed) ?? {}

sinks:
  elasticsearch_out:
    type: "elasticsearch"
    inputs: ["json_parse"]
    endpoint: "http://10.24.32.122:9000"
    index: "logs-via-kafka"

У себя мы используем Vector для агрегации метрик web vitals, собранных с пользователей Дрома (RUM). И ребята на бэкенде тоже используют его для своих задач.

В общем, Vector — прям прикольная штука. Если у вас будут похожие задачи, то обязательно посмотрите в его сторону. Очень удобно.