Vector, предназначенный для сбора, преобразования и отправки данных логов, метрик и событий. Его Github Будучи написанной на языке Rust, он отличается высокой производительностью и низким потреблением оперативной памяти по сравнению с аналогами. Кроме того, большое внимание уделено функциям, связанным с корректностью, в частности, возможностям сохранения неотправленных событий в буфер на диске и ротации файлов. Архитектурно Vector является роутером событий, принимающим сообщения из одного или нескольких источников, опционально применяющим над этими сообщениями преобразования, и отправляющим их в один или несколько стоков. Vector это замена filebeat и logstash, он может выступать в обоих ролях (получать и отправлять логи), более подробней на их сайте. Если в Logstash цепочка строится как input → filter → output то в Vector это sources → transforms → sinks  Примеры можно посмотреть в документации. Эта инструкция переработанная инстукция от Вячеслава Рахинского. В оригинальной инструкции есть обработка geoip. У меня при тестировании geoip из внутренней сети, vector выдавал ошибку. Если кому-то нужно обрабатывать geoip, то обратитесь к оригинальной инструкции от Вячеслава Рахинского. Будем настраивать связку Nginx (Access logs) → Vector (Client | Filebeat) → Vector (Server | Logstash) → отдельно в Clickhouse и отдельно Elasticsearch. Установим 4 сервера. Хотя можно обойтись 3 серверами.  Схема примерно такая. В качестве эмулятора HTTP сервера будем использовать nodejs-stub-server от Maxim Ignatenko Nodejs-stub-server не имеет rpm. Здесь создаем ему rpm. Собираться rpm будет с помощью Fedora Copr Добавляем репозиторий antonpatsev/nodejs-stub-server Устанавливаем nodejs-stub-server, Apache benchmark и терминальный мультиплексор screen на все сервера Поправил в файле /var/lib/stub_http_server/stub_http_server.js время ответа stub_http_server чтобы было больше логов. Запустим stub_http_server. ClickHouse используют набор инструкций SSE 4.2, поэтому, если не указано иное, его поддержка в используемом процессоре, становится дополнительным требованием к системе. Вот команда, чтобы проверить, поддерживает ли текущий процессор SSE 4.2: Сначала нужно подключить официальный репозиторий: Для установки пакетов необходимо выполнить следующие команды: Разрешаем clickhouse-server слушать сетевую карту в файле /etc/clickhouse-server/config.xml Меняем уровень логирования c trace до debug Настройки сжатия стандартные: Для активации Zstd сждатия конфиг посоветовали не трогать, а лучше применять DDL.  Как применить zstd сжатие через DDL в гугле я не нашел. Поэтому оставил как есть. Коллеги, кто использет zstd сжатие в Clickhouse — поделить, пожалуйста, инструкциями. Для запуска сервера в качестве демона, выполните: Теперь перейдем к настройке Clickhouse  Заходим в Clickhouse 172.26.10.109 — IP сервера где установлен Clickhouse. Создадим БД vector Проверим что бд есть. Создаем таблицу vector.logs. Проверяем что создались таблицы. Запускаем clickhouse-client и делаем запрос. Переходим в бд vector. Смотрим таблицы. Добавим публичный rpm ключ Создадим 2 репо: /etc/yum.repos.d/elasticsearch.repo /etc/yum.repos.d/kibana.repo Установим elasticsearch и kibana Так как будет в 1 экземпляре, то в файл /etc/elasticsearch/elasticsearch.yml нужно добавить: Чтобы vector смог отправлять данные в elasticsearch с другого сервера изменим network.host. Чтобы подключится к kibana изменим параметр server.host в файл /etc/kibana/kibana.yml Старуем и включаем в автозапуск elasticsearch и kibana Настройка Elasticsearch для single-node режима 1 shard, 0 replica. Скорее всего у ва будет кластер из большого количества серверов и вам это делать не нужно. Для будущих индексов обновляем шаблон по умолчанию: Настроим Vector как замену Logstash. Редактируем файл /etc/vector/vector.toml Вы можете откорректировать секцию transforms.nginx_parse_add_defaults. Так как Вячеслав Рахинский использует данные конфиги для небольшого CDN и там в upstream_* может прилетать несколько значений  Например: Если это не ваша ситуация то эту секцию можно упростить  Создадим настройки service для systemd /etc/systemd/system/vector.service После создания таблиц можно запускать Vector Логи vector можно посмотреть так В логах должны быть такие записи На cервере с nginx необходимо выключить ipv6, так как в таблице logs в clickhouse используется поле upstream_addr IPv4, так как я не использую ipv6 внутри сети. Если ipv6 не выключить, то будут ошибки: Возможно читатели, добавлять поддержку ipv6. Создаем файл /etc/sysctl.d/98-disable-ipv6.conf Применяем настройки Добавил файл репозитория nginx /etc/yum.repos.d/nginx.repo Установим пакет nginx Для начала нам надо настроить формат логов в Nginx в файле /etc/nginx/nginx.conf Что бы не поломать вашу текущую конфигурациию, Nginx позволяет иметь несколько директив access_log Не забудте добавить правило в logrotate для новых логов (если log фаил не заканчивается на .log) Удаляем default.conf из /etc/nginx/conf.d/ Добавляем виртуальный хост /etc/nginx/conf.d/vhost1.conf Добавляем виртуальный хост /etc/nginx/conf.d/vhost2.conf Добавляем виртуальный хост /etc/nginx/conf.d/vhost3.conf Добавляем виртуальный хост /etc/nginx/conf.d/vhost4.conf Добавляем в файл /etc/hosts виртуальные хосты (172.26.10.106 ip сервера где установлен nginx) на все сервера: И если все готово то  Теперь установим сам Vector Создадим фаил настроек для systemd /etc/systemd/system/vector.service И настроим замену Filebeat в конфиге /etc/vector/vector.toml. IP адрес 172.26.10.108 — это IP адрес log сервера (Vector-Server) Не забудте добавить юзера vector в нужную группу что бы он мог читать log файлы. Например, nginx в centos создает логи с правами группы adm. Запустим сервис vector Логи vector можно посмотреть так В логах должна быть такая запись Тестирование проводим с помощью Apache benchmark. На все сервера был установлен пакет httpd-tools Запускаем тестирование с помощью Apache benchmark c 4 разных серверов в screen. Сначала запускаем терминальный мультиплексор screen, а затем запускаем тестирование с помощью Apache benchmark. Как работать с screen вы можете найти в статье. C 1-го сервера C 2-го сервера C 3-го сервера C 4-го сервера Заходим в Clickhouse Делаем SQL запрос Узнаем размер таблиц в Clickhouse Узнаем сколько в Clickhouse заняли логи.  Размер таблицы logs занимает 857.19 МБ.  Размер тех же данных в индексе в Elasticsearch занимае 4,5ГБ. Если в vector в параметрах не указывать в Clickhouse данные занимает в 4500/857.19 = 5.24 раза меньше чем в Elasticsearch. В vector поле compression используется по умолчанию. Телеграм-чат по Clickhouse
Телеграм-чат по Elasticsearch
Телеграм-чат по "Сбор и аналитика системных сообщений" DevOps-инженер