
- Vector là một pipeline dữ liệu observability hiệu suất cao, cho phép thu thập, chuyển đổi và định tuyến log, metrics, và sắp có cả traces đến các nhà cung cấp (vendors) tùy chọn của bạn mà không bị khóa bởi nhà cung cấp nào.
- Được phát triển bằng Rust, Vector có hiệu năng nhanh, an toàn bộ nhớ và ổn định.

1. Nguồn dữ liệu
- File, Syslog, Statsd … là các nguồn sinh ra raw data (logs, metrics).
- Vector thu thập dữ liệu từ nhiều định dạng khác nhau.
- Output của lớp này là Raw Data chưa chuẩn hóa.
2. Chuẩn hóa dữ liệu
- Sau khi nhận raw data, Vector chuẩn hóa nó thành Event — một cấu trúc thống nhất bên trong Vector.
- Ví dụ: log từ syslog và metrics từ Statsd đều được ánh xạ vào một schema nội bộ.
3. Xử lý & Biến đổi dữ liệu
- Các transform là bước xử lý giữa event đầu vào và payload đầu ra.
- Các transform phổ biến:
- Parse → phân tích cú pháp log (ví dụ tách JSON, regex).
- Sample → lấy mẫu để giảm tải.
- Aggregate → gom nhóm, tổng hợp metrics/logs.
- Bạn có thể dùng VRL (Vector Remap Language) để enrich, filter, normalize dữ liệu.
4. Sinks (Điểm đến)
- Vector gửi dữ liệu đã transform tới sinksnhư:
- S3 (lưu trữ log thô hoặc backup).
- Elasticsearch / OpenSearch (tìm kiếm & phân tích log).
- Prometheus (metrics).
- Mỗi sink mong đợi một payload ở định dạng riêng mà nó hiểu được.
Triển khai mô hình
Mô hình căn bản 1 server ,1 agentCài docker:
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done sudo apt-get update sudo apt-get install ca-certificates curl sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin sudo usermod -aG docker $USER newgrp docker sudo apt install python3.12-venv -y python3 -m ensurepip --upgrade |
services: # --- OpenSearch Node 1 --- opensearch-node1: image: opensearchproject/opensearch:3 container_name: opensearch-node1 environment: - cluster.name=opensearch-cluster - node.name=opensearch-node1 - discovery.seed_hosts=opensearch-node1,opensearch-node2 - cluster.initial_cluster_manager_nodes=opensearch-node1,opensearch-node2 - bootstrap.memory_lock=true - OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m - OPENSEARCH_INITIAL_ADMIN_PASSWORD=Chinh123@ ulimits: memlock: soft: -1 hard: -1 nofile: soft: 65536 hard: 65536 volumes: - opensearch-data1:/usr/share/opensearch/data ports: - "9200:9200" - "9600:9600" networks: - opensearch-net # --- OpenSearch Node 2 --- opensearch-node2: image: opensearchproject/opensearch:3 container_name: opensearch-node2 environment: - cluster.name=opensearch-cluster - node.name=opensearch-node2 - discovery.seed_hosts=opensearch-node1,opensearch-node2 - cluster.initial_cluster_manager_nodes=opensearch-node1,opensearch-node2 - bootstrap.memory_lock=true - OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m - OPENSEARCH_INITIAL_ADMIN_PASSWORD=Chinh123@ ulimits: memlock: soft: -1 hard: -1 nofile: soft: 65536 hard: 65536 volumes: - opensearch-data2:/usr/share/opensearch/data networks: - opensearch-net # --- OpenSearch Dashboards --- opensearch-dashboards: image: opensearchproject/opensearch-dashboards:3 container_name: opensearch-dashboards ports: - "5601:5601" environment: OPENSEARCH_HOSTS: '["https://opensearch-node1:9200","https://opensearch-node2:9200"]' networks: - opensearch-net vector: image: timberio/vector:nightly-2025-08-22-debian container_name: vector volumes: - ./vector.yaml:/etc/vector/vector.yaml:ro - vector-data:/vector-data-dir networks: - "opensearch-net" ports: - "6000:6000" - "8686:8686" volumes: opensearch-data1: opensearch-data2: vector-data: networks: opensearch-net: |
data_dir: "/vector-data-dir" api: enabled: true address: "0.0.0.0:8686" sources: from_agents: type: vector address: "0.0.0.0:6000" transforms: ensure_index_and_tags: type: remap inputs: ["from_agents"] source: | host_id = get_hostname!() if exists(.agent_ip) && is_string(.agent_ip) && length!(.agent_ip) > 0 { host_id = .agent_ip } # Tạo index theo agent_ip/ngày date_str = format_timestamp!(now(), "%Y.%m.%d") idx_str, err = host_id + "-" + date_str if err != null { idx_str = host_id } .index_name = idx_str .received_at = now() if !exists(.source_type) { .source_type = "agent" } sinks: opensearch_sink: type: elasticsearch inputs: ["ensure_index_and_tags"] endpoints: - "https://opensearch-node1:9200" - "https://opensearch-node2:9200" api_version: "v7" bulk: index: "{{ index_name }}" request: concurrency: 2 auth: strategy: basic user: admin password: Chinh123@ tls: verify_certificate: false verify_hostname: false |
server { listen 80; listen [::]:80; server_name localhost; access_log /var/log/nginx/host.access.log main; location / { root /usr/share/nginx/html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } } |
Sau khi tạo xong 3 file thực hiện: docker compose up -d
Setup Agent (Windows)
Tải vector cho windows .msi: [Vector releases](https://vector.dev/releases/?utm_source=chatgpt.com)
Vị trí của file config: C:\Program Files\Vector\config
Windows có thể xuất Event Log ra file .evtx hoặc .txt bằng lệnh PowerShell:
wevtutil epl System C:\Logs\system.evtx wevtutil epl Application C:\Logs\application.evtx wevtutil epl Security C:\Logs\security.evtx |
data_dir: "C:\\ProgramData\\vector" api: enabled: true address: "0.0.0.0:8686" sources: win_eventlog: type: windows_event_log channels: - Application - System - Security transforms: enrich_with_agent: type: remap inputs: ["win_eventlog"] source: | .agent_ip = get_host_ip!() if !exists(.source_type) { .source_type = "windows_eventlog" } sinks: to_vector_server: type: vector inputs: ["enrich_with_agent"] address: "10.30.194.200:6000" healthcheck: true |