Vector#

Vector - средство для агрегации и сбора log-файлов и метрик в реальном времени из различных источников в кластере DropApp. Это открытая платформа, которая собирает данные с контейнеров, приложений и систем в кластере с помощью специализированных агентов и отправляет их централизованно для дальнейшей обработки и анализа.

Vector использует множество стандартных протоколов и форматов данных, такие как syslog, Fluentd и Logstash.

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

Сценарий использования Vector#

Создание конвейера данных для наблюдения#

Примечание

В приведенном сценарии при запуске Vector указан namespace vector - название может быть изменено на усмотрение администратора.

  1. Создайте namespace vector:

    kubectl create namespace --dry-run=client -o yaml vector > namespace.yaml
    
  2. Выполните команду для развертывания Vector в кластере DropApp:

    vector agent deploy --config <Path_to_the_configuration_file>
    
  3. Дождитесь завершения процесса развертывания.

  4. Проверьте статус агента с помощью команды:

    vector agent status
    
  5. Создайте файл конфигурации с именем vector.toml:

    [sources.in]
    type = "stdin"
    
    [sinks.out]
    inputs = ["in"]
    type = "console"
    encoding.codec = "text"
    

    Каждый компонент имеет уникальный идентификатор и префикс с типом компонента, например sources для источника данных. Указанный источник sources.in использует stdin источник, который сообщает Vector о получении данных через стандартный ввод и имеет идентификатор in.

    Элемент sinks.out в приведенном примере использует тип вывода console, который указывает Vector передавать данные в текстовом формате.

    Опция inputs компонента sinks.out сообщает Vector, откуда поступают события этого приемника. В приведенном примере события поступают от другого источника с идентификатором in.

  6. Проверьте корректность работы Vector:

    echo 'Hello world!' | vector
    

    Команда echo отправляет один log-файл в Vector через стандартный ввод. Команда vector запускает Vector с ранее созданным конфигурационным файлом.

    Компонент sources.in принимает событие, которое было отправлено, затем отправляет компоненту sinks.out. Этот компонент возвращает событие обратно в консоль:

    ... some logs ...
    Hello World!
    

    Следуйте последовательности действий для сборки обработки событий с использованием инструмента Syslog.

  7. Добавьте файл конфигурации vector.toml:

    [sources.generate_syslog]
    type = "demo_logs"
    format = "syslog"
    count = 100
    
    [transforms.remap_syslog]
    inputs = [ "generate_syslog"]
    type = "remap"
    source = '''
      structured = parse_syslog!(.message)
      . = merge(., structured)
    '''
    
    [sinks.emit_syslog]
    inputs = ["remap_syslog"]
    type = "console"
    encoding.codec = "json"
    

    Первый компонент использует источник demo_logs, который создает образцы данных log-файла, позволяющие моделировать различные типы событий в разных форматах. Параметр format сообщает источнику demo_logs, какой тип log-файлов следует создавать, а параметр count сообщает источнику demo_logs, сколько строк следует создавать, в приведенном примере - 100.

    Второй компонент представляет собой преобразование remap, которое позволяет анализировать, управлять и дополнять данные по мере их прохождения через Vector. В компоненте transforms.remap_syslog указан inputs параметр generate_syslog, который будет получать события из источника generate_syslog. Список преобразований переназначения (remapping transformations) Source, применяемых к каждому событию, которое получает Vector. В приведенном примере выполняется только операция parse_syslog. Этой функции передается одно поле с именем message, которое содержит событие Syslog. Это функция принимает сообщение в формате Syslog, анализирует его содержимое и отправляет в виде структурированного события.

    В файле конфигурации использован компонент sources.generated_syslog, а также обновлен идентификатор компонента-приемника до emit_syslog, и обновлен параметр inputs для обработки событий, сгенерированных преобразованием remap_syslog. Указан формат генерации JSON.

  8. Перезапустите Vector без передачи дополнительных данных в командной строке:

    vector --restart
    
  9. Чтобы перезапустить программу Vector с использованием определенных параметров конфигурации, выполните команду:

    vector --restart --param1 value1 --param2 value2
    

    В этом случае value1 и value2 - значения параметров, которые будут использоваться при перезапуске программы Vector.

  10. Проверьте содержание файла encoding.codec, в котором должны отображаться серии событий:

    {"appname":"benefritz","facility":"authpriv","hostname":"some.de","message":"A bug was encountered","msgid":"ID191","procid":9473,"severity":"crit","timestamp":"2023-05-20T19:38:55.329Z"}
    {"appname":"meln1ks","facility":"local1","hostname":"for.com","message":"A bug was encountered","msgid":"ID451","procid":484,"severity":"debug","timestamp":"2023-05-20T19:38:55.329Z"}
    {"appname":"shaneIxD","facility":"uucp","hostname":"random.com","message":"A bug was encountered","msgid":"ID428","procid":3093,"severity":"alert","timestamp":"2021-01-20T19:38:55.329Z"}
    ...
    

    Примечание

    IP-адрес не существует и приведен для примера.

    Анализ сообщений Syslog представлен в виде упорядоченных событий, содержащих все поля Syslog. Инструмент Vecto позволяет получать log-файлы и события из десятков источников. Используя Vector и функцию преобразования исходных log-файлов для последующей обработки, можно изменять данные, добавлять поля для дополнения данных, преобразовывать журналы в метрики и удалять поля для автоматизации обработки данных наблюдаемости. Vector поддерживает функции направления и вывода событий в десятки мест назначения.

Vector Journalctl#

Journalctl – это утилита для просмотра содержимого журнала systemd, который ведется службой Journald. Для отображения всех собранных log-файлов без какой-либо фильтрации выполните команду без опций:

journalctl

Пример вывода команды:

Vector-journalctl-sample

Journald – это программа, собирающая и записывающая сообщения log-файлов по всей системе. Это данные о загрузке, сообщения от ядра, syslog или различных приложений. Все эти сообщения хранятся в централизованном месторасположении – файле журнала.

Параметры Journald хранятся в файле конфигурации по умолчанию /etc/systemd/journald.conf. Он генерируется при компиляции и содержит опции, значение которых можно изменять в соответствии с требованиями системы.

Фильтрация записей журнала по времени#

Для использования времени в формате UTC укажите опцию –-utc:

journalctl --utc

Чтобы просмотреть все записи, начиная с конкретных даты и времени, например, 8:15 утра 15 февраля 2019, выполните команду:

journalctl --since "2019-02-15 08:15:00"

Аналогичным образом укажите начальную дату today (сегодня) или yesterday (вчера):

journalctl --since today
journalctl --since yesterday

Просмотр последних записей журнала#

Для просмотра последних записей журнала (по умолчанию 10) используйте опцию –n:

journalctl –n

После нее укажите необходимое количество записей:

journalctl -n 20

Просмотр записей журнала по загрузкам#

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

journalctl --list-boots

Чтобы просмотреть записи журнала текущей загрузки (номер 0), воспользуйтесь опцией –b:

journalctl -b

Просмотр записей конкретного пользователя или группы#

Для просмотра записей конкретного пользователя или группы укажите идентификатор пользователя или группы:

  • для фильтрации записей по идентификатору пользователя 1000 введите:

    journalctl _UID=1000
    
  • для фильтрации записей по идентификатору пользователя 1000 и начальной дате today (сегодня) введите:

journalctl _UID=1000 --since today
  • для фильтрации записей по идентификатору пользователя 1000, начальной дате today (сегодня), начиная с предыдущей загрузки, введите:

journalctl _UID=1000 -b -1 --since today

Просмотр записей, созданных файлом#

Чтобы показать все записи, созданные определенным файлом (например, исполняемым), введите после команды его имя:

journalctl /usr/bin/dbus-daemon
journalctl /usr/bin/bash

Просмотр записей в реальном времени#

Опция -f позволяет следить за журналом в процессе его написания:

journalctl -f

Удаление старых записей журнала#

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

journalctl —disk-usage

Для удаления старых (архивированных) файлов воспользуйтесь командами ниже:

  • удалять файлы, пока используемое ими дисковое пространство не сократится до указанного размера:

    journalctl --vacuum-size=50M
    
  • удалить все файлы, созданные раньше заданного промежутка времени:

    journalctl --vacuum-time=1years
    
  • удалять файлы, пока их количество не станет равно заданному:

    journalctl --vacuum-files=4