集中化日誌管理是合規審計、故障診斷、安全審計的基礎設施。本文以 CentOS 7/8 為例,詳細記錄 rsyslog (伺服端/客戶端) + MySQL + LogAnalyzer (Web 分析介面) 全棧部署流程。
| 角色 | IP | 核心元件 |
|---|---|---|
| 日誌伺服器 | 192.168.0.100 | nginx + PHP + MySQL + rsyslog + rsyslog-mysql + LogAnalyzer |
| 日誌客戶端 | 192.168.0.101 | rsyslog |
# 安裝 nginx, PHP, MySQL(MariaDB)
yum install -y nginx php php-fpm php-mysql mariadb-server mariadb
systemctl enable --now nginx php-fpm mariadb
# 資料庫初始化
mysql_secure_installation
yum install -y rsyslog rsyslog-mysql
/etc/rsyslog.conf# 載入模組
module(load="imuxsock") # 本地 syslog
module(load="imklog") # 核心日誌
module(load="ommysql") # MySQL 輸出
module(load="imudp") # UDP 接收
module(load="imtcp") # TCP 接收(建議啟用)
# UDP/TCP 接收埠
input(type="imudp" port="514" ruleset="remote")
input(type="imtcp" port="514" ruleset="remote")
# 遠端日誌寫入 MySQL 規則集
ruleset(name="remote") {
action(type="ommysql" server="localhost" db="Syslog" uid="rsyslog" pwd="StrongPasswd")
# 同時保留本地檔案(可選)
action(type="omfile" file="/var/log/remote-hosts.log")
}
# 本地日誌亦可寫入 MySQL(視需求)
*.* action(type="ommysql" server="localhost" db="Syslog" uid="rsyslog" pwd="StrongPasswd")
mysql -u root -p <
systemctl stop rsyslog
systemctl disable --now syslog # 停用舊 syslog
systemctl enable --now rsyslog
# 下載解壓
wget https://download.adiscon.com/loganalyzer/loganalyzer-4.1.12.tar.gz
tar xzf loganalyzer-*.tar.gz
mkdir -p /var/www/html/loganalyzer
cp -r loganalyzer-*/src/* /var/www/html/loganalyzer/
# 建立配置檔並授權
touch /var/www/html/loganalyzer/config.php
chown nginx:nginx /var/www/html/loganalyzer/config.php
chmod 666 /var/www/html/loganalyzer/config.php
# nginx 虛擬主機配置(略),指向 /var/www/html/loganalyzer
systemctl reload nginx
https://192.168.0.100/loganalyzer/# 安裝 rsyslog
yum install -y rsyslog
# 配置轉發至伺服器 /etc/rsyslog.conf
*.* @192.168.0.100:514 # UDP
# *.* @@192.168.0.100:514 # TCP(更可靠)
# 重啟服務
systemctl enable --now rsyslog
gtls 模組,雙向憑證驗證,防竄改竊聽。module(load="imrelp") 提供可靠傳輸、緩衝、壓縮。@vip:514。queue.type="LinkedList" queue.size="100000" queue.dequeuebatchsize="4000" 緩衝突發流量。| 現象 | 排查方向 |
|---|---|
| 客戶端日誌未出現在 Web | 1. tcpdump -i eth0 port 514 確認封包到達2. tail -f /var/log/messages | grep rsyslog 看伺服端錯誤3. MySQL show processlist 檢查寫入阻塞 |
| LogAnalyzer 顯示亂碼 | 資料庫/表/連線字元集統一 utf8mb4;PHP mysqli_set_charset |
| UDP 丟包嚴重 | 改用 TCP/RELP;調大 net.core.rmem_max、net.core.wmem_max |
rsyslog + LogAnalyzer 以輕量元件構建企業級日誌中心,核心在於模組化配置、資料庫效能與傳輸可靠性。生產環境建議導入 RELP/TLS、分區表策略,並納入監控告警體系。