Vector chạy một đồ thị source → transform → sink khai báo trong YAML/TOML, mỗi component có type và inputs (tên component phía trước). Ví dụ đầy đủ cho syslog thiết bị mạng xem pipeline syslog bằng Vector.
CLI
| Mục đích | Lệnh |
|---|---|
| Kiểm config (gồm healthcheck sink) | vector validate /etc/vector/vector.yaml |
| Chỉ kiểm cú pháp, không gọi sink | vector validate --no-environment /etc/vector/vector.yaml |
| Chạy với file config | vector --config /etc/vector/vector.yaml |
| Tự reload khi file đổi | vector --config vector.yaml --watch-config |
| Dashboard throughput/lỗi theo component | vector top (cần api.enabled: true) |
| Xem event đi ra từ một component | vector tap --outputs-of parse |
| Xem event đi vào một sink | vector tap --inputs-of sink_loki |
| REPL thử VRL | vector vrl |
| Chạy unit test khai báo trong config | vector test vector.yaml |
| Liệt kê component có sẵn | vector list |
Source hay dùng
| Mục đích | type |
Tham số chính |
|---|---|---|
| Syslog UDP/TCP thô | socket |
mode: udp, address: 0.0.0.0:514 |
| Syslog có parse sẵn | syslog |
mode, address |
| Đọc file log | file |
include: [/var/log/*.log] |
| Nhận HTTP/JSON | http_server |
address, decoding.codec: json |
| Nhận từ Kafka | kafka |
bootstrap_servers, topics, group_id |
| Scrape Prometheus | prometheus_scrape |
endpoints |
| Metric của host | host_metrics |
collectors |
| Metric nội bộ của Vector | internal_metrics |
|
| Sinh log giả để thử | demo_logs |
format: syslog, interval |
Transform hay dùng
| Mục đích | type |
Ví dụ |
|---|---|---|
| Sửa/parse bằng VRL | remap |
source: '.env = "lab"' |
| Lọc event | filter |
condition: '.severity != "debug"' |
| Tách luồng theo điều kiện | route |
route: { crit: '.severity == "error"' }, đầu ra route_x.crit |
| Gộp nhiều event thành một | reduce |
group_by: [source], ends_when, max_events |
| Loại trùng | dedupe |
fields: { match: [source, message] } |
| Giảm tải | sample / throttle |
rate: 10 / threshold: 100, window_secs: 1 |
| Log thành metric | log_to_metric |
metrics: [{type: counter, field: mnemonic, name: syslog_total}] |
Sink và buffer
| Mục đích | type |
Ghi chú |
|---|---|---|
| Debug ra terminal | console |
encoding.codec: json |
| Loki | loki |
labels ít, tránh label động |
| ClickHouse | clickhouse |
endpoint, database, table, skip_unknown_fields |
| Elasticsearch | elasticsearch |
endpoints, bulk.index |
| Prometheus exporter | prometheus_exporter |
address |
| Ghi file | file |
path hỗ trợ template |
| Vector → Vector | vector |
Chuyển giữa agent và aggregator |
| Bỏ event (test tải) | blackhole |
data_dir: /var/lib/vector # cần cho disk buffer và checkpoint file
sinks:
to_loki:
type: loki
inputs: [parse]
endpoint: http://loki.example.com:3100
encoding: { codec: json }
labels: { job: syslog, source: "{{ source }}" }
buffer:
type: disk # sống sót khi restart, mặc định là memory
max_size: 1073741824 # byte
when_full: block # block = tạo back-pressure; drop_newest = bỏ eventVRL cơ bản
| Mục đích | VRL |
|---|---|
| Gán/xoá field | .site = "hni", del(.port) |
| Parse JSON | . = parse_json!(.message) |
| Parse syslog | p, err = parse_syslog(.message) |
| Parse regex | m, err = parse_regex(.message, r'%(?P<mn>[A-Z_-]+)') |
| Parse key=value | parse_key_value!(.message) |
| Ép kiểu | .bytes = to_int!(.bytes) |
| Kiểm tồn tại / null | exists(.a), is_null(.a) |
| Giá trị mặc định | .host = string(.host) ?? "unknown" |
| Đổi chuỗi | replace(.message, "a", "b"), downcase(.x) |
| Format thời gian | format_timestamp!(now(), "%F %T") |
| Merge object | . = merge(., parsed) |
| Bỏ event | abort |
| Biến môi trường | get_env_var!("ENV") |
Hàm có hậu tố ! sẽ abort event nếu lỗi, hàm không có ! trả về value, err. VRL buộc xử lý mọi hàm có thể lỗi, nếu không sẽ báo unhandled fallible assignment lúc compile.
Unit test
tests:
- name: parse mnemonic
inputs:
- insert_at: parse
type: log
log_fields:
message: "%ROUTING-BGP-5-ADJCHANGE : neighbor 203.0.113.1 Up"
outputs:
- extract_from: parse
conditions:
- type: vrl
source: 'assert_eq!(.mnemonic, "ADJCHANGE")'