Yêu cầu
- Đã cài
blackhole-fwdtrên host Windows hoặc Linux theo hướng dẫn Cài đặt (kiến trúc x86_64). Bản container cũng chạy theo cùng một file cấu hình — xem mục Container trong Cài đặt. - Trong các lệnh dưới,
blackhole-fwdđã có trongPATH. Nếu chưa, hãy gọi bằng đường dẫn đầy đủ tới executable. - Một thư mục làm việc cố định: trên Windows là thư mục chứa executable (binary tự chuyển sang thư mục đó khi khởi động); trên Linux là thư mục bạn khởi chạy từ đó — service cũng dùng thư mục chứa executable.
- Pipeline đầu tiên không cần Registry. Kết nối Registry là Bước 4, hoàn toàn tùy chọn.
Quy tắc giữa source, server và transform
Các ràng buộc sau được kiểm tra lúc khởi động và hot-reload — hãy nhớ trước khi viết cấu hình:
rsyslogsource cần sectionrsyslog_server. Thiếu sẽ thấy cảnh báoNo rsyslog server configured, rsyslog collector will not be created(không có collector nào được tạo).snmpsource cần sectionsnmp_server, nếu không sẽ báo lỗiSNMP server config required.mqttsource bắt buộc cóbroker, nếu không sẽ báo lỗiNo broker URL found.grpc_serverchỉ khởi động khi có ít nhất mộtgrpcsource.- Trong transform,
identifiervàinputslà các key cùng cấp với các trường khác — KHÔNG đặt trongcommon:. - Đồ thị transform được validate lúc khởi động: input không tồn tại hoặc có vòng lặp sẽ bị từ chối (ví dụ
Cycle detected in transforms graph!).
Bước 1: Tạo file cấu hình
File cấu hình mặc định là blackhole-fwd.yml trong thư mục làm việc (đây cũng là đường dẫn mặc định của --config). Dưới đây là pipeline tối giản: nhận syslog qua UDP/TCP 514, rồi ghi sự kiện ra thư mục ./debug-events/.
Linux:
cat > blackhole-fwd.yml <<'EOF'
logging:
level: "info"
rsyslog_server:
udp_addr: "0.0.0.0:514"
tcp_addr: "0.0.0.0:514"
default_source: "rsyslog"
sources:
rsyslog:
type: rsyslog
includes: []
index: "syslog"
sourcetype: "syslog_rfc3164"
sinks:
out:
type: file
path: "./debug-events/"
EOFWindows (PowerShell):
@'
logging:
level: "info"
rsyslog_server:
udp_addr: "0.0.0.0:514"
tcp_addr: "0.0.0.0:514"
default_source: "rsyslog"
sources:
rsyslog:
type: rsyslog
includes: []
index: "syslog"
sourcetype: "syslog_rfc3164"
sinks:
out:
type: file
path: "./debug-events/"
'@ | Set-Content -Path blackhole-fwd.yml -Encoding UTF8Cấu trúc cần nhớ: sources, sinks, transforms đều là map ở top-level, khóa là id do bạn tự đặt và mỗi mục bắt buộc có type. Sink tham chiếu nguồn qua inputs (mặc định ["*"] = nhận mọi nguồn), nên ví dụ trên không cần khai inputs. Chi tiết xem Cấu hình.
Xác minh:
Test-Path .\blackhole-fwd.ymltest -f blackhole-fwd.yml && echo OKKỳ vọng: True (Windows) hoặc OK (Linux) — file đã tồn tại đúng tên.
Bước 2: Sinh JSON Schema để kiểm tra cấu hình
blackhole-fwd configure schemaLệnh đọc file tại đường dẫn --config (mặc định blackhole-fwd.yml) và ghi config.jsonschema cùng thư mục với file cấu hình. Nếu YAML sai cú pháp hoặc dùng sai trường, lệnh sẽ báo lỗi parse và không tạo schema.
Xác minh:
Test-Path .\config.jsonschemals -l config.jsonschemaKỳ vọng: True / file config.jsonschema tồn tại — cấu hình đọc được.
Bước 3: Chạy thử ở foreground
blackhole-fwd start --verbosestartlà lệnh khởi động pipeline; chạy không kèm lệnh nào thì chỉ hiện banner, không chạy gì cả.--verbosevà--configlà cờ toàn cục, đặt trước hay saustartđều được, ví dụ:blackhole-fwd --config /path/to/blackhole-fwd.yml start --verbose.- Dừng bằng
Ctrl+C.
Gửi một message syslog test:
Linux (cần nc):
echo '<134>Oct 6 12:00:00 testhost test: quickstart ping' | nc -u -w1 127.0.0.1 514Windows (PowerShell):
$udp = New-Object System.Net.Sockets.UdpClient
$udp.Connect('127.0.0.1', 514)
$msg = [System.Text.Encoding]::ASCII.GetBytes('<134>Oct 6 12:00:00 testhost test: quickstart ping')
$udp.Send($msg, $msg.Length) | Out-Null
$udp.Close()Xác minh:
Get-ChildItem .\debug-events
Get-Content .\logs\default.log -Tail 20ls -l debug-events/
tail -n 20 logs/default.logKỳ vọng: thư mục debug-events/ có file được tạo ra và chứa dữ liệu message vừa gửi; logs/default.log (nằm cạnh executable trên Windows, tại thư mục làm việc trên Linux) có dòng log mức debug vì đã bật --verbose, không có lỗi cấu hình.
Bước 4: Kết nối Registry (tùy chọn)
Chỉ thực hiện khi dùng Registry để quản lý tập trung.
4.1 — Thêm section registry: vào file cấu hình:
registry:
api_url: "https://registry.example.com"
api_key: "<api-key>"
http_server:
enabled: false4.2 — Xác thực với Registry:
blackhole-fwd auth --key "<api-key>"Thiếu section registry: sẽ báo No registry configured. Khi thành công, lệnh đăng ký thiết bị rồi đẩy cấu hình local lên Registry. Nếu Registry không liên lạc được lúc khởi động, Forwarder chỉ ghi warning và tiếp tục chạy với cấu hình local.
Xác minh:
blackhole-fwd start --verboseKỳ vọng: khởi động lại mà không còn cảnh báo Device is not active, no collectors will be started — collectors đã chạy. (Nếu auth thất bại, bạn sẽ thấy lại cảnh báo này.)
4.3 — Đồng bộ cấu hình (không bắt buộc):
blackhole-fwd configure pull
blackhole-fwd configure pushconfigure pulltải cấu hình từ Registry về (cần córegistry:và đãauth); muốn ghi ra file riêng thì thêm--output <PATH>.configure pushđẩy cấu hình local lên Registry. Chạy trước khiauthsẽ báodevice token not available, you need to authenticate first.
Xác minh:
blackhole-fwd configure pushKỳ vọng: lệnh kết thúc mà không báo lỗi (đã xác thực). Nếu chưa auth, bạn sẽ thấy device token not available, you need to authenticate first.
Bước 5: Cài đặt như service
Sau khi pipeline chạy tốt ở foreground, cài service để chạy nền và tự khởi động cùng máy.
Windows (PowerShell chạy bằng Administrator):
blackhole-fwd service installLinux:
sudo blackhole-fwd service installXác minh:
Get-Service -Name blackhole-fwdsudo systemctl status blackhole-fwd --no-pagerKỳ vọng: Windows — trạng thái Running; Linux — active (running).
Xác minh
Chạy trọn bộ trên máy đã cài service:
Windows:
Get-Service -Name blackhole-fwd
Test-Path .\config.jsonschema
netstat -ano | findstr 514
Get-Content .\logs\default.log -Tail 20
Get-Content .\logs\default-error.log -Tail 10Linux:
sudo blackhole-fwd service status
test -f config.jsonschema && echo OK
ss -ulnp | grep 514
tail -n 20 logs/default.log
tail -n 10 logs/default-error.logKỳ vọng:
- Service trạng thái đang chạy (
Running/active (running)/service statusbáo chạy). config.jsonschematồn tại — cấu hình đọc được.- Port
514(UDP) đang lắng nghe. logs/default.logcó dòng khởi động và các sự kiện gần đây;logs/default-error.logtrống hoặc không có lỗi lặp lại.- Sau khi gửi message test syslog ở Bước 3, thư mục
debug-events/có file chứa message đó.
