Tổng quan cấu hình
Forwarder sử dụng file cấu hình YAML để định nghĩa các nguồn dữ liệu, đích đến, và các thiết lập khác.Cấu hình chi tiết
Logging Configuration
Cấu hình logging cho Forwarder:-
level(bắt buộc): Mức độ loggingdebug: Hiển thị tất cả thông tin chi tiết, bao gồm debug messagesinfo: Hiển thị thông tin chung và các sự kiện quan trọng (mặc định)warn: Chỉ hiển thị cảnh báo và lỗierror: Chỉ hiển thị lỗi
-
dir(bắt buộc): Đường dẫn thư mục lưu trữ log files (mặc định:./logs) -
file(bắt buộc): Tên file log chính (mặc định:default.log) -
error_file(tùy chọn): Tên file log riêng cho lỗi (mặc định:default-error.log) -
max_size_mb(bắt buộc): Kích thước tối đa của tất cả log files tính bằng MB (mặc định: 10MB)
Channel Buffers Configuration
Cấu hình buffer cho performance tuning và memory management:-
orchestrator_capacity(bắt buộc): Buffer capacity cho orchestrator collector channel (mặc định: 10000000)- Controls how many events can be queued between sources and orchestrator
- Higher values improve burst handling but use more memory
-
shipper_capacity(bắt buộc): Buffer capacity cho shipper channels (mặc định: 10000000)- Controls how many events can be queued between orchestrator and sinks
- Higher values improve throughput but use more memory
-
router_max_in_flight_routes(bắt buộc): Maximum concurrent routing tasks in orchestrator (mặc định: 4)- Controls parallelism when routing events to multiple sinks
- Higher values improve throughput but increase CPU usage
Registry Configuration
Registry là điểm điều phối trung tâm (tùy chọn) để xác thực và đồng bộ cấu hình:-
api_url(bắt buộc): URL của API endpoint Registry (mặc định:https://blackhole.glabs.one) -
api_key(tùy chọn): API key để xác thực với Registry (mặc định:null) -
config_update_interval(bắt buộc): Chu kỳ đồng bộ cấu hình từ Registry (mặc định:15s) -
proxy(tùy chọn): Cấu hình proxyenable(bắt buộc): Bật/tắt proxy (mặc định:true)http(tùy chọn): URL của HTTP proxyhttps(tùy chọn): URL của HTTPS proxy
-
tls(tùy chọn): TLS settings cho kết nối tớiapi_url(chỉ áp dụng khiapi_urldùnghttps://)ca_cert_path(tùy chọn): Đường dẫn file CA bundle (PEM) để validate certificate của Registryinsecure_skip_verify_https(tùy chọn): Skip HTTPS certificate verification (không khuyến nghị)
-
http_server(tùy chọn): Embedded REST forwarder server cho downstream devicesenabled(bắt buộc): Bật/tắt server (mặc định:true)listen_addr(bắt buộc): Địa chỉ lắng nghe (mặc định:"0.0.0.0:18080")tls(tùy chọn): TLS cho embedded REST forwarder (HTTPS)enabled(tùy chọn): Bật HTTPS cho embedded REST forwardercert_path(tùy chọn): Path tới server certificate file (PEM)key_path(tùy chọn): Path tới server private key file (PEM)
cache_ttl(bắt buộc): TTL cache cho GET response (mặc định:"30s")cache_max_entries(bắt buộc): Số cache entry tối đa (mặc định:10000)cache_max_body_bytes(bắt buộc): Kích thước body tối đa được cache (mặc định:262144)request_timeout_sec(bắt buộc): Timeout gọi upstream (mặc định:30)retry_on_statuses(bắt buộc): Danh sách HTTP status sẽ auto-join và retry 1 lần (mặc định:[401, 404])
Sources Configuration
MQTT Source
Thu thập dữ liệu từ MQTT topics:-
type(bắt buộc): Loại source, phải là"mqtt" -
topics(bắt buộc): Danh sách MQTT topics để subscribe (mặc định:[])- Hỗ trợ wildcard patterns:
+(single level),#(multi-level) - Ví dụ:
"agents/+/data","devices/#"
- Hỗ trợ wildcard patterns:
-
index(tùy chọn): Index để lưu trữ dữ liệu (mặc định:null) -
sourcetype(tùy chọn): Loại dữ liệu để phân loại (mặc định:null) -
broker(tùy chọn): Cấu hình MQTT broker (mặc định: sử dụng local broker)url(bắt buộc): URL của MQTT broker (mặc định:mqtt://localhost:1883)auth(bắt buộc): Cấu hình xác thựctype(bắt buộc): Loại xác thực"none": Không xác thực (mặc định)"basic": Username/password authentication
username(bắt buộc khi type=“basic”): Tên người dùngpassword(bắt buộc khi type=“basic”): Mật khẩu
proxy(tùy chọn): Cấu hình proxyenable(bắt buộc): Bật/tắt proxy (mặc định:true)http(tùy chọn): URL của HTTP proxyhttps(tùy chọn): URL của HTTPS proxy
-
source_override(bắt buộc): Có override index/sourcetype từ source không (mặc định:false)true: Override index/sourcetype từ sourcefalse: Không override index/sourcetype từ source
-
request_queue_capacity(tùy chọn): Dung lượng queue nội bộ cho MQTT client (mặc định:null- sử dụng giá trị mặc định của rumqttc)- Điều khiển kích thước queue message nội bộ
- Giá trị cao hơn cải thiện throughput nhưng sử dụng nhiều bộ nhớ hơn
- Ví dụ:
1000,5000
-
keep_alive_seconds(tùy chọn): Khoảng thời gian keep-alive tính bằng giây (mặc định:null- sử dụng giá trị mặc định của rumqttc)- Khoảng thời gian giữa các keep-alive packets để duy trì kết nối
- Ví dụ:
60,120
-
max_incoming_packet_size(tùy chọn): Kích thước packet tối đa nhận vào tính bằng bytes (mặc định:null- sử dụng giá trị mặc định của rumqttc)- Giới hạn kích thước packet lớn nhất có thể nhận
- Ví dụ:
1048576(1MB),5242880(5MB)
-
max_outgoing_packet_size(tùy chọn): Kích thước packet tối đa gửi đi tính bằng bytes (mặc định:null- sử dụng giá trị mặc định của rumqttc)- Giới hạn kích thước packet lớn nhất có thể gửi
- Ví dụ:
1048576(1MB),5242880(5MB)
-
subscription_qos(bắt buộc): QoS level cho subscription (mặc định:"at_most_once")"at_most_once": QoS 0 - Message có thể bị mất, không đảm bảo delivery"at_least_once": QoS 1 - Message được đảm bảo delivery ít nhất một lần, có thể duplicate"exactly_once": QoS 2 - Message được đảm bảo delivery đúng một lần, không duplicate
-
network(tùy chọn): Cấu hình tùy chọn mạng cho kết nối MQTTconnection_timeout_seconds(tùy chọn): Timeout kết nối TCP tính bằng giây (mặc định:null)- Áp dụng cho cả kết nối ban đầu và reconnect
- Ví dụ:
30,60
nodelay(tùy chọn): Bật TCP_NODELAY option (mặc định:null)true: Tắt Nagle algorithm, giảm latencyfalse: Bật Nagle algorithm, tối ưu bandwidth
-
clean_session(tùy chọn): Bật/tắt clean session (mặc định:true)true: Session sẽ bị xóa khi disconnect, không lưu subscription statefalse: Session được duy trì, subscription state được lưu trên broker
-
inflight(tùy chọn): Số message QoS>0 tối đa đang xử lý đồng thời (mặc định:null- sử dụng giá trị mặc định của rumqttc)- Giới hạn số message đang chờ acknowledgment
- Ví dụ:
100,200
-
pending_throttle_micros(tùy chọn): Delay giữa các packet gửi đi tính bằng microseconds (mặc định:null- không throttle)- Điều khiển tốc độ gửi packet để tránh quá tải
- Ví dụ:
1000(1ms delay),10000(10ms delay)
-
manual_acks(tùy chọn): Bật manual acknowledgements cho incoming publishes (mặc định:false)true: Phải gọi thủ công để acknowledge message (hữu ích cho xử lý async)false: Tự động acknowledge message
-
broker.lwt(tùy chọn): Cấu hình Last Will and Testament (LWT)- Khi client disconnect bất thường, broker sẽ publish message này
topic(bắt buộc): Topic để publish LWT messagepayload(bắt buộc): Nội dung LWT messageqos(bắt buộc): QoS level cho LWT message (mặc định:"at_most_once")"at_most_once","at_least_once","exactly_once"
retain(bắt buộc): Retain flag cho LWT message (mặc định:false)true: Broker giữ lại LWT message cho subscriber mớifalse: LWT message không được retain
- Hỗ trợ wildcard topics (
+,#) - Tự động kết nối và reconnect
- QoS support
- Authentication support
Rsyslog Source
Thu thập syslog từ các thiết bị mạng:-
type(bắt buộc): Loại source, phải là"rsyslog" -
includes(bắt buộc): Danh sách IP addresses hoặc subnets để chấp nhận (mặc định:[])- Hỗ trợ CIDR notation (từ phiên bản 0.4.1 trở đi):
"192.168.1.0/24","10.0.0.0/8" - Hỗ trợ single IP:
"192.168.1.100"
- Hỗ trợ CIDR notation (từ phiên bản 0.4.1 trở đi):
-
index(tùy chọn): Index để lưu trữ dữ liệu (mặc định:null) -
sourcetype(tùy chọn): Loại dữ liệu để phân loại (mặc định:null)
- Hỗ trợ UDP và TCP
- IP filtering và routing
- Automatic log parsing
- High-performance processing
Kafka Source (Từ phiên bản 0.5.1 trở đi)
Thu thập dữ liệu từ Apache Kafka topics:type(bắt buộc): Luôn là"kafka".topics(bắt buộc): Danh sách topic cần subscribe; hỗ trợ wildcard của Kafka (logs.*với pattern regex trong broker).index(tùy chọn): Index mặc định cho sự kiện thu thập (mặc định:null).sourcetype(tùy chọn): Loại dữ liệu để phục vụ routing/parsing downstream (mặc định:null).bootstrap_servers(tùy chọn): Danh sách Kafka brokers, dùng cho kết nối cluster (mặc định:["localhost:9092"]).group_id(bắt buộc): Consumer group ID để điều phối offset (mặc định:"siem-agent-consumer-group").client_id(tùy chọn): Client ID để định danh consumer (mặc định: tự sinh).auto_commit_enabled(tùy chọn): Bật/tắt auto-commit offset (truemặc định).auto_commit_interval_ms(tùy chọn): Chu kỳ commit tự động tính bằng ms (mặc định:5000).auto_offset_reset(tùy chọn): Chính sách offset khi không tìm thấy offset trước đó. Giá trị hợp lệ:"earliest","latest"(mặc định),"none".fetch_min_bytes(tùy chọn): Số byte tối thiểu mỗi lần fetch (mặc định:1).max_partition_fetch_bytes(tùy chọn): Giới hạn dữ liệu lấy trên mỗi partition (mặc định:1048576= 1MB).session_timeout_ms(tùy chọn): Thời gian session timeout cho broker (mặc định:60000).heartbeat_interval_ms(tùy chọn): Chu kỳ gửi heartbeat (mặc định:10000).max_poll_interval_ms(tùy chọn): Thời gian tối đa giữa các lần poll trước khi consumer bị coi là chết (mặc định:300000).security(tùy chọn): Cấu hình bảo mật cho Kafka (mặc định:"none"). Hỗ trợ:type: "none": Kết nối PLAINTEXT.type: "tls": TLS client với các trườngtls.ca_location,tls.certificate_location,tls.key_location,tls.key_password,tls.verify_certificate.type: "sasl": Xác thực SASL (PLAIN,SCRAM-SHA-256,SCRAM-SHA-512,GSSAPI,OAUTHBEARER) kèm tùy chọn TLS.
source_override(tùy chọn): Khitrue, forwarder sẽ ghi đèindexvàsourcetypecủa sự kiện downstream bằng giá trị từ source (mặc định:false).proxy(tùy chọn): Cấu hình proxy HTTP CONNECT khi cần đi qua proxy (lưu ý: rdkafka chỉ hỗ trợ giới hạn).extra(tùy chọn): Bản đồ{key: value}bổ sung trực tiếp vào cấu hình librdkafka, ví dụ{"fetch.message.max.bytes": "2097152"}.
- Tự động subscribe từng topic trong danh sách
topics. - Hỗ trợ giải mã payload JSON thành
LogEvent(1 hoặc nhiều sự kiện). Nếu không phải JSON, Forwarder vẫn chuyển nguyên bản tin qua pipeline. - Gắn metadata
kafka_topic,kafka_partition,kafka_offsetvàoLogEvent.extra. - Cho phép cấu hình override
index/sourcetypethông quasource_override. - Chia sẻ logic bảo mật với Kafka Sink, giúp tái sử dụng chứng chỉ và thông tin SASL/TLS.
- Có thể tinh chỉnh toàn bộ tham số librdkafka thông qua trường
extra.
- Apache Kafka documentation – Danh sách đầy đủ cấu hình consumer và bảo mật.
gRPC Source
Nhận dữ liệu qua embedded gRPC server của Forwarder và route vào pipeline như mộtsource.
Quan trọng: Để Forwarder nhận được dữ liệu gRPC, bạn cần:
- Bật
grpc_server(listener) ở mức root config- Khai báo ít nhất 1 gRPC source (để cài routing table)
-
identifier: Được sinh tự động theo key trongsources(ví dụgrpc_ingest). Không cần cấu hình trực tiếp trong YAML. -
type(bắt buộc): Loại source, phải là"grpc". -
includes(bắt buộc): Danh sách pattern (regex) để match theotopiccủa message (mặc định:["*"])."*": match tất cả topics.- Nếu regex không hợp lệ, Forwarder sẽ bỏ qua pattern đó.
-
index(tùy chọn): Index mặc định cho sự kiện tạo ra từ gRPC payload (mặc định:null). -
sourcetype(tùy chọn): Sourcetype mặc định cho sự kiện tạo ra từ gRPC payload (mặc định:null). -
source_override(tùy chọn): Khitrue, Forwarder sẽ overrideindex/sourcetypedownstream bằng giá trị cấu hình ở source này (mặc định:false). -
extra(tùy chọn): Map{key: value}cho tuning/flags nâng cao (mặc định:{}).
- Forwarder cố gắng parse
log(bytes) thành JSONLogEventhoặcVec<LogEvent>. - Nếu parse thất bại, payload sẽ được coi là raw string và đưa vào trường
_raw. grpc_topicvàgrpc_source_identifierđược gắn vàoLogEvent.extra.
SNMP Source (Từ phiên bản 0.5.2 trở đi)
Thu thập dữ liệu từ các thiết bị mạng thông qua SNMP (Simple Network Management Protocol), hỗ trợ cả polling (GET requests) và trap reception:-
type(bắt buộc): Loại source, phải là"snmp" -
includes(bắt buộc): Danh sách địa chỉ thiết bị để thu thập dữ liệu- Hỗ trợ IP:
"192.168.1.100" - Hỗ trợ hostname:
"router.company.com" - Hỗ trợ port inline:
"192.168.1.100:1161"hoặc"router:161" - Hỗ trợ CIDR:
"10.0.0.0/24"(chủ yếu cho trap routing) - Mỗi include có thể override
port,index,sourcetyperiêng
- Hỗ trợ IP:
-
port(bắt buộc): Port UDP mặc định cho polling (mặc định:161) -
version(bắt buộc): Phiên bản SNMP protocol (mặc định:v3)v1: SNMP version 1 (community string)v2c: SNMP version 2c (community string)v3: SNMP version 3 (hỗ trợ auth/privacy)
-
credentials(bắt buộc): Thông tin xác thực- Cho v1/v2c:
community: "public" - Cho v3:
v3block vớiusername,auth,privacy
- Cho v1/v2c:
-
poll(bắt buộc): Cấu hình pollinginterval_secs(bắt buộc): Chu kỳ polling tính bằng giây (mặc định:60)timeout_ms(bắt buộc): Timeout mỗi request tính bằng ms (mặc định:2000)retries(bắt buộc): Số lần retry khi thất bại (mặc định:2)max_oids_per_request(bắt buộc): Số OID tối đa mỗi batch request (mặc định:20)jitter_pct(tùy chọn): Phần trăm jitter để tránh thundering herd (0-100, mặc định:null)
-
poll_enabled(bắt buộc): Bật/tắt polling (mặc định:true) -
trap_enabled(bắt buộc): Bật/tắt trap reception (mặc định:true) -
oids(bắt buộc): Danh sách OID cần poll- Định dạng đơn giản:
"1.3.6.1.2.1.1.3.0"(tên mặc định là OID) - Định dạng có tên:
{ name: "cpu_load", oid: "1.3.6.1.2.1.25.3.3.1.2.1" } - Tên sẽ xuất hiện trong output JSON để dễ truy vấn
- Định dạng đơn giản:
-
index(tùy chọn): Index để lưu trữ dữ liệu (mặc định:null) -
sourcetype(tùy chọn): Loại dữ liệu để phân loại (mặc định:null)
- Hỗ trợ SNMP v1, v2c, và v3 (với authentication/privacy)
- Polling định kỳ với jitter để tránh thundering herd
- Trap reception từ các thiết bị mạng
- Named OIDs để dễ truy vấn và phân tích
- Multi-device support: một source có thể quản lý nhiều thiết bị
- IP-based routing: tự động route trap dựa trên IP nguồn
- Default source fallback: trap từ thiết bị chưa cấu hình sẽ được route đến default source
-
System Info:
1.3.6.1.2.1.1.3.0- sysUpTime (thời gian hoạt động)1.3.6.1.2.1.1.1.0- sysDescr (mô tả hệ thống)1.3.6.1.2.1.1.5.0- sysName (tên hệ thống)
-
CPU:
1.3.6.1.2.1.25.3.3.1.2.1- hrProcessorLoad (CPU load core 1)1.3.6.1.2.1.25.3.3.1.2.2- hrProcessorLoad (CPU load core 2)
-
Memory (UCD-SNMP MIB):
1.3.6.1.4.1.2021.4.5.0- memTotalReal (tổng RAM)1.3.6.1.4.1.2021.4.6.0- memAvailReal (RAM còn trống)
-
Storage (Host Resources MIB):
1.3.6.1.2.1.25.2.3.1.3.<index>- hrStorageDescr (mô tả storage)1.3.6.1.2.1.25.2.3.1.5.<index>- hrStorageSize (kích thước)1.3.6.1.2.1.25.2.3.1.6.<index>- hrStorageUsed (đã sử dụng)
Lưu ý: Sử dụngsnmpwalkđể khám phá OID có sẵn trên thiết bị của bạn:snmpwalk -v2c -c public <device-ip> 1.3.6.1.2.1
Sinks Configuration
MQTT Sink
-
type(bắt buộc): Loại sink, phải là"mqtt" -
inputs(tùy chọn): Danh sách source identifiers để consume (mặc định:["*"])["*"]: Consume tất cả sources["mqtt_data", "rsyslog_data"]: Chỉ consume từ specific sources
-
url(bắt buộc): URL của MQTT broker (mặc định:mqtt://localhost:1883?client_id=siem-agent)- Hỗ trợ protocols:
mqtt://,mqtts://,ws://,wss:// - Có thể thêm query parameters:
?client_id=forwarder-001
- Hỗ trợ protocols:
-
auth(bắt buộc): Cấu hình xác thực (mặc định:"none")type(bắt buộc): Loại xác thực"none": Không xác thực (mặc định)"basic": Username/password authentication
username(bắt buộc khi type=“basic”): Tên người dùngpassword(bắt buộc khi type=“basic”): Mật khẩu
-
proxy(tùy chọn): Cấu hình proxyenable(bắt buộc): Bật/tắt proxy (mặc định:true)http(tùy chọn): URL của HTTP proxyhttps(tùy chọn): URL của HTTPS proxy
-
rate_limit(bắt buộc): Cấu hình giới hạn tốc độbatch_size(bắt buộc): Số message trong mỗi batch (mặc định: 500)batch_interval(bắt buộc): Khoảng thời gian giữa các batch tính bằng ms (mặc định: 1000ms)batch_max_bytes(bắt buộc): Kích thước tối đa mỗi batch tính bằng bytes (mặc định: 10485760 bytes = 10MB)
Kafka Sink
-
type(bắt buộc): Loại sink, phải là"kafka" -
inputs(tùy chọn): Danh sách source identifiers để consume (mặc định:["*"])["*"]: Consume tất cả sources["mqtt_data", "rsyslog_data"]: Chỉ consume từ specific sources
-
bootstrap_servers(bắt buộc): Danh sách Kafka brokers (mặc định:["localhost:9092"]) -
client_id(tùy chọn): Client ID để nhận diện producer (mặc định:null- auto-generated) -
security(bắt buộc): Cấu hình bảo mật (mặc định:"none")type(bắt buộc): Loại bảo mật"none": Không bảo mật (mặc định)"tls": Chỉ TLS"sasl": SASL authentication
sasl(bắt buộc khi type=“sasl”): Cấu hình SASLmechanism(bắt buộc): Cơ chế SASL (mặc định:"PLAIN")username(tùy chọn): Tên người dùngpassword(tùy chọn): Mật khẩutls(tùy chọn): Cấu hình TLS cho SASLverify_certificate(bắt buộc): Xác minh chứng chỉ (mặc định:true)
-
acks(bắt buộc): Mức độ xác nhận (mặc định:"leader")"none": Không yêu cầu xác nhận (acks=0)"leader": Chỉ yêu cầu xác nhận từ leader (acks=1)"all": Yêu cầu xác nhận từ tất cả replicas (acks=all)
-
compression(bắt buộc): Loại nén dữ liệu (mặc định:"none")"none","gzip","snappy","lz4","zstd"
-
enable_idempotence(bắt buộc): Bật idempotent producer (mặc định:false) -
transactional_id(tùy chọn): Transactional ID cho exactly-once semantics (mặc định:null) -
batching(bắt buộc): Cấu hình batchinglinger_ms(bắt buộc): Thời gian chờ để tạo batch tính bằng ms (mặc định: 0)batch_num_messages(bắt buộc): Số message tối đa trong batch (mặc định: 100000)batch_kbytes(bắt buộc): Kích thước tối đa batch tính bằng KB (mặc định: 1048576 KB = 1GB)
-
retries(bắt buộc): Cấu hình retrymax_retries(bắt buộc): Số lần retry tối đa (mặc định: 10)backoff_ms(bắt buộc): Thời gian chờ giữa các retry tính bằng ms (mặc định: 100)
-
timeouts(bắt buộc): Cấu hình timeoutsocket_timeout_ms(bắt buộc): Socket timeout tính bằng ms (mặc định: 60000)request_timeout_ms(bắt buộc): Request timeout tính bằng ms (mặc định: 30000)message_timeout_ms(bắt buộc): Message timeout tính bằng ms (mặc định: 300000)connections_max_idle_ms(bắt buộc): Connection idle timeout tính bằng ms (mặc định: 300000)
-
producer_pool_size(bắt buộc): Số producer instances trong pool (mặc định: 4, range: 1-64) -
extra(bắt buộc): Additional librdkafka configuration properties (mặc định:{})
gRPC Sink
Gửi sự kiện tới gRPC endpoint (ví dụ embedded gRPC server của Forwarder khác hoặc một dịch vụ gRPC bên ngoài). gRPC sink sẽ serialize mỗiLogEvent thành JSON và gửi theo PublishStream (mặc định) hoặc Publish. Trường topic của gRPC request mặc định là index của event.
-
identifier: Được sinh tự động theo key trongsinks(ví dụgrpc_forwarder). Không cần cấu hình trực tiếp trong YAML. -
type(bắt buộc): Loại sink, phải là"grpc". -
url(bắt buộc): URL đầy đủ của gRPC endpoint (mặc định:http://localhost:50051).- Hỗ trợ
http://vàhttps://. - Alias:
endpoint.
- Hỗ trợ
-
inputs(tùy chọn): Danh sách source identifiers để consume (mặc định:["*"]). -
tls(tùy chọn): TLS client cho kết nối gRPC.ca_cert_path(tùy chọn).client_cert_path(tùy chọn).client_key_path(tùy chọn).domain_name(tùy chọn).insecure_skip_verify(tùy chọn, mặc địnhfalse).- Lưu ý runtime hiện tại: shipper mới chỉ áp dụng
domain_name; các trường còn lại hiện chưa được áp dụng.
-
connect_timeout_secs(tùy chọn): Timeout TCP connect (seconds). -
request_timeout_secs(tùy chọn, aliastimeout_secs): Timeout per-RPC (seconds).- Lưu ý runtime hiện tại: shipper chưa áp dụng timeout này.
-
tcp_keepalive_secs(tùy chọn): TCP keepalive (seconds). -
tcp_nodelay(tùy chọn): Bật/tắt TCP_NODELAY. -
http2_keep_alive_interval_secs(tùy chọn): HTTP/2 keepalive interval (seconds). -
http2_keep_alive_timeout_secs(tùy chọn): HTTP/2 keepalive timeout (seconds). -
http2_keep_alive_while_idle(tùy chọn): Gửi keepalive khi idle. -
initial_stream_window_size(tùy chọn): HTTP/2 initial stream window (bytes). -
initial_connection_window_size(tùy chọn): HTTP/2 initial connection window (bytes). -
http2_adaptive_window(tùy chọn): Bật adaptive flow control. -
concurrency_limit(tùy chọn): Giới hạn concurrency ở mứctonic::transport::Endpoint. -
max_concurrent_requests(tùy chọn): Số request gRPC đồng thời (mặc định:1). -
buffer_size(tùy chọn): Buffer nội bộ cho client service. -
user_agent(tùy chọn): User-Agent header cho outbound requests. -
message_limits(tùy chọn): Giới hạn kích thước message gRPC (bytes).max_decoding_message_size(tùy chọn).max_encoding_message_size(tùy chọn).
-
headers(tùy chọn): Map{header: value}được gửi kèm mọi request dưới dạng gRPC metadata (mặc định:{}).- Dùng để gửi API key (
x-api-key) khi server bậtgrpc_server.auth.
- Dùng để gửi API key (
-
use_streaming(tùy chọn): Chọn kiểu RPC gửi dữ liệu (mặc định:true).true: dùngPublishStream.false: dùngPublish(unary).
-
rate_limit(bắt buộc): Batching/throughput control. -
proxy(tùy chọn): Cấu hình proxy.- Lưu ý runtime hiện tại: gRPC shipper chưa hỗ trợ proxy cho
Endpoint.
- Lưu ý runtime hiện tại: gRPC shipper chưa hỗ trợ proxy cho
-
reflection(tùy chọn): Client-side reflection (forward-compatible).enabled(tùy chọn, mặc địnhfalse).timeout_secs(tùy chọn).- Lưu ý runtime hiện tại: có thể chưa được sử dụng.
-
proto(tùy chọn): Cấu hình.proto/descriptor (forward-compatible).path(bắt buộc nếu bậtproto).include_paths(tùy chọn, mặc định[]).service(tùy chọn).method(tùy chọn).- Lưu ý runtime hiện tại: có thể chưa được sử dụng.
BlackHole Sink
-
type(bắt buộc): Loại sink, phải là"blackhole" -
inputs(tùy chọn): Danh sách source identifiers để consume (mặc định:["*"])["*"]: Consume tất cả sources["mqtt_data", "rsyslog_data"]: Chỉ consume từ specific sources
-
url(bắt buộc): URL của BlackHole endpoint (mặc định:http://localhost:9200) -
healthcheck(bắt buộc): Enable health check requests (mặc định:false) -
request(tùy chọn): Compatibility request configuration (mặc định:null)retry_attempts(tùy chọn): Số lần retry attemptstimeout_secs(tùy chọn): Request timeout in seconds
-
auth(bắt buộc): Cấu hình xác thực (mặc định:"none")type(bắt buộc): Loại xác thực"none": Không xác thực (mặc định)"basic": Username/password authentication"client_cert": Client certificate (mTLS)"jwt": JWT/OIDC bearer token"aws_sigv4": AWS SigV4 signing
username(bắt buộc khi type=“basic”): Tên người dùngpassword(bắt buộc khi type=“basic”): Mật khẩupkcs12_path(bắt buộc khi type=“client_cert”): Đường dẫn file PKCS#12pkcs12_password(bắt buộc khi type=“client_cert”): Mật khẩu PKCS#12token(bắt buộc khi type=“jwt”): JWT tokenheader_name(bắt buộc khi type=“jwt”): Tên header (mặc định: “Authorization”)region(bắt buộc khi type=“aws_sigv4”): AWS regionprofile(tùy chọn khi type=“aws_sigv4”): AWS profilerole_arn(tùy chọn khi type=“aws_sigv4”): Role ARN để assumeservice(bắt buộc khi type=“aws_sigv4”): AWS service name"es": Amazon BlackHole Service"aoss": BlackHole Serverless
-
tls(bắt buộc): TLS configuration (mặc định:{ca_cert_path: null, insecure_skip_verify: false})ca_cert_path(tùy chọn): Custom CA bundle file pathinsecure_skip_verify(bắt buộc): Skip certificate verification (mặc định:false)
-
headers(bắt buộc): Custom headers (mặc định:{}) -
timeouts(bắt buộc): Cấu hình timeoutrequest_timeout_secs(bắt buộc): Request timeout tính bằng giây (mặc định: 30)connect_timeout_secs(bắt buộc): Connect timeout tính bằng giây (mặc định: 10)
-
rate_limit(bắt buộc): Cấu hình giới hạn tốc độbatch_size(bắt buộc): Số message trong mỗi batch (mặc định: 500)batch_interval(bắt buộc): Khoảng thời gian giữa các batch tính bằng ms (mặc định: 1000ms)batch_max_bytes(bắt buộc): Kích thước tối đa mỗi batch tính bằng bytes (mặc định: 10485760 bytes = 10MB)
Transforms Configuration
Các transform cho phép xây dựng pipeline xử lý dữ liệu giữasources và sinks. Mỗi transform được định nghĩa dưới khóa transforms với định danh duy nhất và thuộc tính type. Transform có thể nhận dữ liệu từ một hoặc nhiều inputs, bao gồm nguồn (sources), transform khác, hoặc các kênh được tạo bởi Route Transform.
inputs(tùy chọn): Danh sách định danh nguồn hoặc transform cung cấp dữ liệu đầu vào. Có thể tham chiếu các route channel được tạo từ Route Transform.identifier: Được sinh tự động bởi Forwarder; không cần cấu hình trong YAML.
Filter Transform
Lọc sự kiện bằng biểu thức VRL, chỉ giữ lại các sự kiện thỏa điều kiện.condition(bắt buộc): Biểu thức VRL trả về boolean. Sự kiện cho kết quảtruesẽ tiếp tục pipeline.
Route Transform
Định tuyến sự kiện vào nhiều kênh dựa trên điều kiện VRL. Mỗi route tạo ra một kênh mới mang tên route.routes(bắt buộc): Map{route_name: vrl_condition}. Sự kiện thỏa điều kiện sẽ được gửi đến kênh tương ứng (security,audit, …). Sự kiện có thể khớp nhiều route.
Throttle Transform
Giới hạn tốc độ sự kiện dựa trên ngưỡng và cửa sổ thời gian.threshold(bắt buộc): Số sự kiện tối đa cho mỗi bucket trong một cửa sổ.window_ms(bắt buộc): Kích thước cửa sổ thời gian tính bằng millisecond.key_field(tùy chọn): Template VRL để nhóm sự kiện theo khóa (ví dụ địa chỉ IP). Nếu không đặt, mọi sự kiện dùng chung một bucket.exclude(tùy chọn): Biểu thức VRL; sự kiện trả vềtruesẽ bỏ qua throttling.
Reduce Transform
Gộp nhiều sự kiện thành một sự kiện tổng hợp dựa trên điều kiện kết thúc và khóa nhóm.condition(bắt buộc): Biểu thức VRL xác định sự kiện kết thúc chuỗi (flush group).group_by(tùy chọn): Chuỗi template VRL để xác định khóa nhóm. Mặc định sử dụngsource_identifierkết hợp địa chỉ IP.time(tùy chọn): Thời gian (ms) sau đó group sẽ tự động flush nếu chưa hoàn thành.merge_strategies(tùy chọn): Map{field_name: strategy}điều khiển cách gộp giá trị. Chiến lược hỗ trợ:array,concat,concat_newline,concat_raw,discard,flat_unique,longest_array,max,min,retain,shortest_array,sum,first,last.
Dedupe Transform
Loại bỏ sự kiện trùng lặp trong cửa sổ thời gian dựa trên các trường được chỉ định.fields.match(tùy chọn): Danh sách các trường cần khớp để xem là trùng lặp. Mặc định:["_raw"].fields.ignore(tùy chọn): Danh sách trường bỏ qua khi so sánh (không được cấu hình đồng thời vớimatch).window.window_ms(tùy chọn): Kích thước cửa sổ thời gian (ms) để theo dõi bản ghi trùng (mặc định 60000).window.refresh_on_drop(tùy chọn): Khitrue, thời gian sống của bản ghi được gia hạn khi có bản trùng bị loại.
Remap Transform
Biến đổi dữ liệu bằng mã VRL inline hoặc từ file.source(tùy chọn): Đoạn mã VRL inline. Có thể dùng nhiều dòng với syntax literal.file(tùy chọn): Đường dẫn đến một file VRL duy nhất.files(tùy chọn): Danh sách file VRL sẽ được chạy tuần tự.drop_on_abort(tùy chọn, mặc địnhtrue): Loại bỏ sự kiện khi script gọiabort.drop_on_error(tùy chọn, mặc địnhfalse): Loại bỏ sự kiện khi gặp lỗi xử lý.
Gợi ý: Kết hợproute,filtervàremapđể xây dựng pipeline phức tạp trước khi gửi dữ liệu đến cácsinks.
MQTT Server Configuration
Cấu hình embedded MQTT broker:Router Configuration
-
max_connections(bắt buộc): Số kết nối tối đa (mặc định: 10000) -
max_outgoing_packet_count(bắt buộc): Số packet tối đa trong queue (mặc định: 200) -
max_segment_size(bắt buộc): Kích thước segment tối đa tính bằng bytes (mặc định: 104857600 bytes = 100MB) -
max_segment_count(bắt buộc): Số segment tối đa (mặc định: 10) -
shared_subscriptions_strategy(bắt buộc): Chiến lược cho shared subscriptions (mặc định:"random")"sticky": Sticky sessions - client luôn kết nối đến cùng broker"roundrobin": Round-robin - phân phối đều giữa các brokers"random": Random - phân phối ngẫu nhiên
-
initialized_filters(bắt buộc): Filters khởi tạo sẵn (mặc định:[]) -
custom_segments(bắt buộc): Custom segment configs (mặc định:[])
Server Configuration
-
name(bắt buộc): Tên server instance (mặc định:"v4-1") -
listen(bắt buộc): Địa chỉ listen (mặc định:"0.0.0.0:1883") -
next_connection_delay_ms(bắt buộc): Delay giữa các kết nối tính bằng ms (mặc định: 1) -
tls(tùy chọn): Cấu hình TLScapath(tùy chọn): Đường dẫn CA certificatecertpath(bắt buộc): Đường dẫn server certificatekeypath(bắt buộc): Đường dẫn server private key
-
connections(bắt buộc): Cấu hình kết nốiconnection_timeout_ms(bắt buộc): Timeout kết nối tính bằng ms (mặc định: 60000)max_payload_size(bắt buộc): Kích thước payload tối đa tính bằng bytes (mặc định: 104857600 bytes = 100MB)max_inflight_count(bắt buộc): Số message inflight tối đa (mặc định: 100)dynamic_filters(bắt buộc): Cho phép dynamic filters (mặc định:true)
Console Configuration (tùy chọn)
listen(bắt buộc): Địa chỉ listen cho debug console
Authentication Configuration
auth(bắt buộc): Danh sách cấu hình xác thựctype(bắt buộc): Loại xác thực"none": Không xác thực"basic": Username/password authentication
username(bắt buộc khi type=“basic”): Tên người dùngpassword(bắt buộc khi type=“basic”): Mật khẩu
gRPC Server Configuration
Cấu hình embedded gRPC server để nhận log events từ client (Agent/Forwarder khác). Server này cung cấp serviceLogIngestService với 2 RPC: Publish và PublishStream.
-
listen_addr(bắt buộc): Địa chỉ bind dạng"ip:port"(mặc định:"0.0.0.0:50051"). -
auth(tùy chọn): API-key authentication cho request gRPC.header_name(tùy chọn): Tên header/metadata để mang API key (mặc định:"x-api-key").api_keys(tùy chọn): Danh sách API keys hợp lệ. Nếu danh sách rỗng, auth sẽ không được bật.
-
tls(tùy chọn): TLS cho gRPC server.cert_path(bắt buộc khi bật TLS): Đường dẫn server certificate (PEM).key_path(bắt buộc khi bật TLS): Đường dẫn server private key (PEM).ca_cert_path(tùy chọn): CA bundle (PEM). Khi cấu hình, server sẽ cấu hình trust roots cho client CA.require_client_cert(tùy chọn, mặc địnhfalse): Yêu cầu client certificate (mTLS).insecure_skip_verify(tùy chọn, mặc địnhfalse).- Lưu ý runtime hiện tại: TLS runtime hiện cấu hình identity +
ca_cert_path(nếu có).require_client_certvàinsecure_skip_verifyhiện chưa được áp dụng.
-
tcp_nodelay(tùy chọn): Bật/tắt TCP_NODELAY cho listener. -
tcp_keepalive_seconds(tùy chọn): TCP keepalive (seconds) cho listener. -
max_decoding_message_size,max_encoding_message_size(tùy chọn): Giới hạn kích thước message gRPC (bytes). -
http2_keep_alive_interval_secs,http2_keep_alive_timeout_secs(tùy chọn): HTTP/2 keepalive.http2_keep_alive_while_idle(tùy chọn): Có trong schema nhưng hiện chưa được áp dụng.
-
initial_stream_window_size(tùy chọn): HTTP/2 initial stream window (bytes). -
initial_connection_window_size(tùy chọn): HTTP/2 initial connection window (bytes). -
max_concurrent_streams(tùy chọn): Max concurrent HTTP/2 streams per connection. -
max_frame_size(tùy chọn): Max HTTP/2 frame size (bytes). -
http2_adaptive_window(tùy chọn): Bật adaptive flow control. -
concurrency_limit_per_connection(tùy chọn): Giới hạn concurrent requests per connection. -
max_connection_age_secs(tùy chọn): Đóng connection sau (N) giây. -
max_connection_age_grace_secs(tùy chọn): Grace period sau max age.- Lưu ý runtime hiện tại: có trong schema nhưng hiện chưa được áp dụng.
-
timeout_secs(tùy chọn): Soft per-request timeout ở layer service.- Lưu ý runtime hiện tại: có trong schema nhưng hiện chưa được áp dụng.
-
extra(tùy chọn): Map{key: value}cho tuning/flags nâng cao (mặc định:{}). -
reflection(tùy chọn): Server-side reflection.enabled(tùy chọn): Bật reflection (mặc định:true).include_health_service(tùy chọn): Expose gRPC health service cùng reflection.- Lưu ý runtime hiện tại: runtime hiện chỉ bật reflection service; health service chưa được expose.
- Nếu bật
grpc_server.auth, hãy thêmheaders.x-api-keytrong gRPC sink của client.
Rsyslog Server Configuration
Cấu hình rsyslog server:SNMP Server Configuration
Cấu hình SNMP server cho trap listener:-
trap_addr(bắt buộc): Địa chỉ UDP để lắng nghe SNMP traps (mặc định:"0.0.0.0:162")"0.0.0.0:162": Lắng nghe trên tất cả interfaces"192.168.1.10:162": Chỉ lắng nghe trên interface cụ thể
-
max_datagram_size(bắt buộc): Kích thước tối đa trap datagram tính bằng bytes (mặc định:8192)- Datagram lớn hơn sẽ bị cắt để tránh buffer exhaustion attacks
-
trap_channel_capacity(bắt buộc): Buffer capacity cho trap channel (mặc định:1024)- Điều chỉnh dựa trên burst rate; backpressure được áp dụng khi đạt giới hạn
-
max_inflight_traps(bắt buộc): Số trap parsing tasks tối đa đồng thời (mặc định:2048)- Bảo vệ runtime khỏi burst traffic hoặc malicious traffic
-
max_poll_concurrency(bắt buộc): Số poll requests tối đa đồng thời (mặc định:64)- Ngăn pollers làm quá tải thiết bị mạng khi có nhiều sources
-
default_source(bắt buộc): Source identifier cho trap từ IP chưa được cấu hình (mặc định:"snmp_default")- Tương tự rsyslog server, trap từ thiết bị chưa có trong
includessẽ được route đến source này
- Tương tự rsyslog server, trap từ thiết bị chưa có trong
-
default_index(tùy chọn): Index mặc định cho default source events (mặc định:null) -
default_sourcetype(tùy chọn): Sourcetype mặc định cho default source events (mặc định:null) -
require_v3(bắt buộc): Yêu cầu SNMPv3 cho tất cả sources (mặc định:true)true: Từ chối khởi động poller với v1/v2cfalse: Cho phép v1/v2c (hữu ích cho testing hoặc legacy devices)
-
warn_insecure_versions(bắt buộc): Cảnh báo khi sử dụng v1/v2c (mặc định:true)- Không chặn collector nhưng cung cấp visibility về insecure protocol usage
Proxy Server Configuration
Cấu hình HTTP CONNECT proxy:Inventory Configuration
Cấu hình queue persistent cho dữ liệu:Hướng dẫn tạo chứng chỉ SSL
Tạo chứng chỉ SSL tự ký cho MQTT Broker
Để cấu hình MQTT broker với TLS, bạn cần tạo chứng chỉ SSL. Dưới đây là hướng dẫn tạo chứng chỉ tự ký:Bước 1: Tạo thư mục lưu trữ chứng chỉ
Bước 2: Tạo CA (Certificate Authority) tự ký
- Country Name: VN
- State: Ho Chi Minh
- City: Ho Chi Minh City
- Organization: Your Company
- Organizational Unit: IT Department
- Common Name: MQTT CA
- Email: admin@yourcompany.com
Bước 3: Tạo server certificate
Bước 4: Tạo server certificate từ CSR
Bước 5: Tạo client certificate (tùy chọn)
Bước 6: Cấu hình MQTT Server với TLS
Cấu hình TLS cho MQTT Client (Source và Sink)
Sau khi đã tạo chứng chỉ SSL cho MQTT broker, bạn cần cấu hình client (agent/forwarder) để kết nối với broker sử dụng TLS. Điều này đặc biệt quan trọng khi sử dụng chứng chỉ tự ký (self-signed certificates).Cấu hình MQTT Source với TLS
Khi cấu hình MQTT source để subscribe từ broker có TLS, bạn cần chỉ định đường dẫn đến CA certificate:Cấu hình MQTT Sink với TLS
Tương tự, khi cấu hình MQTT sink để publish đến broker có TLS:Cấu hình Mutual TLS (mTLS)
Nếu broker yêu cầu client certificate authentication (mutual TLS), bạn cần cung cấp cả client certificate và key:Lưu ý: Khi sử dụng mTLS, bạn thường không cần username/password vì client
certificate đã đóng vai trò xác thực.
Các tùy chọn TLS
ca_cert_path: Đường dẫn đến CA certificate file (PEM format). Bắt buộc khi sử dụng chứng chỉ tự ký hoặc custom CA.client_cert_path: Đường dẫn đến client certificate file (PEM format). Chỉ cần khi broker yêu cầu client authentication.client_key_path: Đường dẫn đến client private key file (PEM format). Phải được cung cấp cùng vớiclient_cert_path.insecure: Bỏ qua xác thực certificate (mặc định:false). Không khuyến nghị sử dụng trong môi trường production vì làm giảm bảo mật.
Xử lý lỗi TLS
Nếu bạn gặp lỗiTLS: I/O: tls handshake eof hoặc các lỗi TLS khác, hãy kiểm tra:
- CA certificate path đúng chưa? Đảm bảo đường dẫn đến file CA certificate là chính xác và file có thể đọc được.
- Certificate format đúng chưa? Các certificate phải ở định dạng PEM (text format, bắt đầu với
-----BEGIN CERTIFICATE-----). - Quyền truy cập file: Đảm bảo agent/forwarder có quyền đọc các file certificate.
- URL protocol: Sử dụng
mqtts://thay vìmqtt://cho kết nối TLS. - Port đúng chưa? Port mặc định cho MQTT over TLS là 8883, không phải 1883.
