$ sysadstemi.xyz

Vector вместо grep+awk для парсинга логов

2026-02-04 · logsvectorloki

Как я устал от цепочек tail | grep | awk | sed и переписал пайплайн на Vector.

На прошлом дежурстве я в четвёртый раз за неделю писал в терминале что-то вроде:

tail -F /var/log/nginx/access.log   | grep -E ' (4[0-9]{2}|5[0-9]{2}) '   | awk '{print $1, $7, $9}'   | sort | uniq -c | sort -rn | head -20

И понял, что эта команда — у меня в истории шелла третий раз за день. Значит, пора её отдать в нормальный инструмент, а не переписывать каждый раз.

Что не устраивало в grep+awk

Vector

Vector — это от Datadog, написан на Rust, бинарь один, конфиг в TOML/YAML. Источник → трансформы → сток. Умеет читать файлы (включая ротацию), journald, socket, kafka; писать в Loki, Elasticsearch, S3, ClickHouse, Prometheus remote write — что угодно.

Минимальный конфиг для nginx-логов в Loki:

[sources.nginx]
type = "file"
include = ["/var/log/nginx/*.log"]
read_from = "beginning"

[transforms.parsed]
type = "remap"
inputs = ["nginx"]
source = '''
. = parse_apache_log!(.message)
.status = to_int!(.status)
'''

[sinks.loki]
type = "loki"
inputs = ["parsed"]
endpoint = "http://loki.internal:3100"
labels.host = "web-01"

После этого в Grafana я просто фильтрую по status >= 400 — без регулярок в терминале, с агрегацией по часу/дню, с алертами в Alertmanager, если что-то пошло не так.

Что в итоге

За три месяца использования — ровно один баг (Vector 0.34 падал на очень длинных строках, обновился до 0.37, всё ок). Tail -F в терминале я всё ещё использую, но только для разовых разборов, а не для пайплайнов.


К списку заметок · на главную