┌─────────────┐ UDP:514 ┌──────────────┐ MySQL ┌────────────────┐
│ Linux/Win │ ──────────────▶ │ rsyslog │ ─────────────▶ │ LogAnalyzer │
│ 客戶端 │ Syslog 消息 │ 服務端 │ 寫入數據庫 │ Web 界面查看 │
└─────────────┘ └──────────────┘ └────────────────┘
▲ ▲
│ EvtSys (Windows) │ ommysql 模塊
└──────────────────────────────┘
# CentOS 7 示例 yum install -y epel-release yum install -y rsyslog rsyslog-mysql mariadb-server mariadb php php-mysql php-gd httpd
systemctl start mariadb mysql_secure_installation # 導入 rsyslog 表結構 mysql -u root -p < /usr/share/doc/rsyslog-*/mysql-create-db.sql # 創建專用用戶 mysql -u root -p -e " CREATE DATABASE Syslog; GRANT ALL ON Syslog.* TO 'logger'@'localhost' IDENTIFIED BY 'logger123'; FLUSH PRIVILEGES; "
# /etc/rsyslog.conf
# 載入 MySQL 輸出模塊
module(load="ommysql")
# 模板:標準格式寫入數據庫
template(name="StdSQLFormat" type="list" option.sql="on") {
constant(value="INSERT INTO SystemEvents (Message, Facility, Priority, FromHost, DeviceReportedTime, ReceivedAt) VALUES (")
property(name="msg" format="json")
constant(value=",")
property(name="syslogfacility")
constant(value=",")
property(name="syslogpriority")
constant(value=",")
property(name="fromhost")
constant(value=",")
property(name="timereported" dateformat="mysql")
constant(value=",")
property(name="timegenerated" dateformat="mysql")
constant(value=")")
}
# 所有日誌寫入 MySQL
*.* action(type="ommysql" server="127.0.0.1" db="Syslog" uid="logger" pwd="logger123" template="StdSQLFormat")
# 接收網絡日誌
module(load="imudp")
input(type="imudp" port="514" ruleset="remote")
ruleset(name="remote") {
*.* action(type="ommysql" server="127.0.0.1" db="Syslog" uid="logger" pwd="logger123" template="StdSQLFormat")
}
# 本地日誌保留寫文件
*.info;mail.none;authpriv.none;cron.none /var/log/messages
authpriv.* /var/log/secure
mail.* -/var/log/maillog
cron.* /var/log/cron
*.emerg :omusrmsg:*
uucp,news.crit /var/log/spooler
local7.* /var/log/boot.log
systemctl enable --now rsyslog mariadb httpd firewall-cmd --permanent --add-port=514/udp firewall-cmd --permanent --add-service=http firewall-cmd --reload
# 下載安裝 cd /var/www/html wget https://download.adiscon.com/loganalyzer/loganalyzer-4.1.12.tar.gz tar xzf loganalyzer-*.tar.gz mv loganalyzer-*/src loganalyzer touch loganalyzer/config.php chmod 666 loganalyzer/config.php chown -R apache:apache loganalyzer # 瀏覽器訪問 https://server-ip/loganalyzer 按向導完成安裝 # 步驟:語言 → 數據庫配置 → 管理員賬號 → 完成
# 官方:https://www.evtsys.com/ # 解壓到 C:\EvtSys
C:\EvtSys> evtsys -i -h 192.168.1.100 -p 514 # -i 安裝服務 # -h rsyslog 服務端 IP # -p 端口(默認 514) net start evtsys
# 服務端查看數據庫 mysql -u logger -p Syslog -e "SELECT * FROM SystemEvents ORDER BY ID DESC LIMIT 5;" # LogAnalyzer 界面應實時顯示 Windows 事件日誌
| 現象 | 排查方向 |
|---|---|
| 數據庫無數據 | 1) rsyslog 錯誤日誌 /var/log/messages 2) ommysql 模塊是否加載 3) 防火牆 514/udp 4) MySQL 用戶權限 |
| LogAnalyzer 顯示亂碼 | 數據庫/表/連接字符集統一 utf8mb4,PHP mysqli 設置 charset |
| Windows 日誌不全 | EvtSys 配置 -f 參數指定要轉發的日誌類型 |
| 高並發寫入慢 | 啟用 rsyslog action.queue.type="LinkedList" 異步隊列 |
SystemEvents 表,定期歸檔FromHost, DeviceReportedTime, Facility 建立聯合索引PARTITION BY RANGE 自動清理舊數據這套方案成熟穩定,支援 Linux/Windows/網絡設備全平台日誌聚合,是中小企業日誌中心的首選開源方案。