Syslog 作為 UNIX/Linux 歷史最悠久的日誌標準,至今仍是基礎設施日誌收集的主流選擇。本文詳細說明 rsyslog (現代主流實作) 集中式日誌伺服器部署、多租戶日誌分離、加密傳輸、結構化日誌 (JSON)、異常偵測整合等進階應用,並對比 syslog-ng、Fluentd、Vector 等新世代工具。
+----------------+ TCP 514 / TLS 6514 +------------------+ 本地檔案/Elasticsearch/Splunk
| Linux/Network | ──────────────────────────► | rsyslog Server | ──────────────────────────────────►
| Devices | | (Central Log) |
+----------------+ +------------------+
/etc/rsyslog.conf
# 模組載入
module(load="imuxsock") # 本地 Unix socket
module(load="imklog") # 核心日誌
module(load="imtcp") # TCP 接收
module(load="imudp") # UDP 接收 (可選)
module(load="imptcp") # Plain TCP (效能較佳)
# 全域設定
global(
workDirectory="/var/spool/rsyslog"
maxMessageSize="64k"
parser.ParseTrustedAuth="on"
)
# 模板:依主機/程式/日期分目錄儲存
template(name="DynFile" type="string"
string="/var/log/remote/%HOSTNAME%/%PROGRAMNAME%.log")
# 模板:JSON 結構化 (供 Logstash/Beats 直接讀取)
template(name="JSON" type="list") {
property(name="timestamp" dateFormat="rfc3339")
property(name="hostname")
property(name="syslogtag")
property(name="msg" format="json")
constant(value="\n")
}
# TLS 憑證 (建議生產環境啟用)
global(
DefaultNetstreamDriver="gtls"
DefaultNetstreamDriverCAFile="/etc/rsyslog/ca.pem"
DefaultNetstreamDriverCertFile="/etc/rsyslog/server-cert.pem"
DefaultNetstreamDriverKeyFile="/etc/rsyslog/server-key.pem"
)
# TCP/TLS 監聽
input(type="imtcp" port="514" ruleset="RemoteLogs")
input(type="imtcp" port="6514" ruleset="RemoteLogsTLS"
streamDriver="gtls" streamDriverMode="1" streamDriverAuthMode="x509/name")
# 規則集:遠端日誌寫入動態檔案
ruleset(name="RemoteLogs") {
action(type="omfile" dynaFile="DynFile" asyncWriting="on" queue.size="10000")
# 同時轉發至 Elasticsearch (omelasticsearch 模組)
# action(type="omelasticsearch" server="es1" serverport="9200" template="JSON" ...)
}
ruleset(name="RemoteLogsTLS") {
action(type="omfile" dynaFile="DynFile" asyncWriting="on")
}
# 本地日誌規則保持預設
include(file="/etc/rsyslog.d/*.conf")
/etc/rsyslog.d/90-remote.conf
# 非加密 TCP (內網可信環境)
*.* @@logserver.example.com:514
# 或 TLS 加密 (跨網段/公網)
*.* @@(o)logserver.example.com:6514
# 動作佇列:網路中斷時本地緩衝
$ActionQueueType LinkedList
$ActionQueueFileName fwdRule1
$ActionResumeRetryCount -1
$ActionQueueSaveOnShutdown on
$ActionQueueMaxDiskSpace 1g
| 策略 | 實作方式 | 適用場景 |
|---|---|---|
依 $HOSTNAME 分目錄 | 模板 %HOSTNAME% | 主機數較少、單一團隊 |
依 $INPUTNAME/$FROMHOST-IP 分檔 | 規則集 if $fromhost-ip == '10.1.0.0/16' then ... | 多 VPC/資料中心 |
依 syslogtag (programname) 分檔 | 模板 %PROGRAMNAME% | 微服務架構、容器化 |
| 標籤式路由 (RFC 5424 structured-data) | msg contains "@tenant_id=" → dynaFile | SaaS 多租戶強隔離 |
# /etc/logrotate.d/rsyslog-remote
/var/log/remote/*/*.log {
daily
missingok
rotate 30
compress
delaycompress
notifempty
create 0640 syslog adm
sharedscripts
postrotate
/usr/lib/rsyslog/rsyslog-rotate
endscript
}
action(type="omkafka" topic="logs" ...) 實現高吞吐緩衝。| 工具 | 定位 | 優點 | 缺點 | 建議場景 |
|---|---|---|---|---|
| rsyslog | 傳統 Syslog 守護進程增強版 | 標準相容、效能高、模組豐富、已預裝多數發布版 | 配置語法較舊、複雜路由需 Rainerscript | 集中式收集、網路設備、舊系統整合 |
| syslog-ng | 新世代 Syslog 守護進程 | 配置更直觀、內建 GeoIP、Python 腳本、Disk Buffer | 部分企業版功能收費 | 複雜路由、多租戶、需 Python 擴展 |
| Fluentd/Fluent Bit | 統一日誌收集層 (CNCF) | 插件生態極豐富、Kubernetes 原生、結構化處理強 | Java/Ruby 執行期資源較大 | 容器/雲原生、異構日誌源整合 |
| Vector | 高效能可觀測性管道 (Rust) | 零拷貝、記憶體安全、單二進位、配置簡單 | 生態相對較新 | 高吞吐、邊緣計算、替代 Fluent Bit |
gtls 驅動)streamDriverAuthMode="x509/name")allow from 規則)0640、擁有者 syslog:admimark 間隔心跳 (預設 20 分鐘) 偵測傳輸中斷建立可靠、可擴展、可審計的集中式日誌平台,是資安合規、故障診斷、業務分析的基石。以 rsyslog 為核心,配合結構化解析、緩衝佇列、加密傳輸與現代儲存後端,即可構建企業級日誌中樞。