Сбор логов Mikrotik в Loki через Vector
Ставим Vector любым удобным для вас способом. Я выбираю пакеты:
# bash -c "$(curl -L https://setup.vector.dev)"
# apt install vector
Приводим конфигурацию /etc/vector/vector.yaml к следующему виду:
sources:
syslog_udp:
type: syslog
address: 0.0.0.0:3514
mode: udp
sinks:
syslog_to_loki:
type: loki
inputs:
- syslog_udp
compression: none
encoding:
codec: json
endpoint: http://192.168.137.30:3100
labels:
job: mikrotik
Перезапускаем Vector:
# systemctl restart vector
Сравните это с конфигурациями Alloy. Небо и земля по читаемости. Здесь я на вход принимаю syslog любых форматов. А на выходе выпускаю json. Хотя у Vector в документации на выходе есть формат syslog. Я сначала с ним пробовал, так как это выглядит логично. Но на практике итоговый результат с json лучше.
Теперь идём в Mikrotik в раздел System ⇨ Logging ⇨ Actions и добавляем новое действие. Я назвал его Loki, указал адрес и порт сервера, где установлен Vector, в качестве Remote Log Format выбрал BSD Syslog. После этого в разделе Rules добавил новое правило для логов System действие - Loki. Всё, в Микротике больше ничего делать не надо.
Можно идти в Loki и смотреть логи. Не нужно специально настраивать парсинг логов, добавлять дополнительные метки и т.д. Всё, что надо, уже есть. При такой настройке Vector вы получите в логах следующие поля:
▪️hostname
▪️source_ip
▪️message
Ну и некоторые другие, которые уже не так нужны. Главное, что есть эти. Теперь можно легко различать логи из единого потока по устройствам. И не нужно настраивать разные приёмники или как-то насыщать логи дополнительной информацией об отправителях. При других настройках, в том числе в Alloy, я не смог добиться автоматического парсинга этих полей. А в Vector заработало сразу, благодаря его внутреннему преобразованию syslog в json.
Рекомендую познакомиться с Vector, если ещё не доводилось пользоваться. Он берёт логи из любых источников, например из обычного файла, docker logs, journald, kafka, kubernetes logs, logstash и ещё 40 различных программ и кладёт их в кучу разных источников: loki, elasticsearch, prometheus, clickhouse, postgres, текстовый файл и ещё около 50-ти различных типов. То есть он может взять практически всё что угодно, отправлять куда угодно, попутно преобразовывая. И при этом у него отличная документация с примерами.
#loki #mikrotik