用rsyslog管理遊戲服日誌
看到有朋友用rsyslog,發現挺不錯的。由於版本更新比較快,網上很多資料介紹相對比較舊,遇到了一些問題,記錄下來以便日後查看。英文好的同學可以直接查看官網(http://www.rsyslog.com)了解各個版本。PS:本文並不介紹rsyslog知識,只是把實踐過程中操作記錄下來。
1. 遊戲服用rsyslog的好處
分等級,不同等級的日誌可以存到不同的文件中。比如,把遊戲中error及以上級別的日誌放在error.log裏(需要經常查看的),低於error級別的日誌放在info.log裏。
可以讓遠程主機管理日誌。比如,遊戲開了很多服,放在不同的主機上,要查看日誌需要登錄到不同的主機,會累死,如果讓一臺主機當成“日誌文件服務器”,記錄其他主機的日誌,這樣進入一臺主機即可。
2. 版本
rsyslog可以用於遠程管理日誌,我用了兩臺機器,一臺做client,一臺做server。
server用阿裏雲的,Linux版本是ubuntu,rsyslog版本是8.16.0
client用本地的虛擬機,Linux版本ubuntu,rsyslog版本也是8.16.0
裝ubuntu一般都自帶裝rsyslog,如果沒裝,參照官網安裝。最好保證client,server版本一致。
配置文件由/etc/rsyslog.conf /etc/rsyslog.d/50-default.conf /etc/default/rsyslog 三個文件
註:版本不一樣,配置文件路徑可能不相同。
3. 實踐
(1).修改server配置文件
/etc/default/rsyslog,設置RSYSLOGD_OPTION="-r",表示接受外部主機的請求。 也可以設置有關參數限制相應的ip
# Options for rsyslogd # -x disables DNS lookups for remote messages # See rsyslogd(8) for more details RSYSLOGD_OPTIONS="-r"
/etc/rsyslog.conf,接受TCP請求,端口是514,省略了其他配置
# provides TCP syslog reception module(load="imtcp") input(type="imtcp" port="514")
/etc/rsyslog.d/50-default.conf,設置日誌級別(level),設施(facility)和動作(action)
# Add by lxd 2017/11/11 LOCAL4.=info;LOCAL4.=notice;LOCAL4.=warning /data/log/info.log LOCAL4.=err;LOCAL4.=crit;LOCAL4.=alert;LOCAL4.=emerg /data/log/err.log
接收LOCAL4類型的日誌,err級別以上的日誌,輸出到/data/log/err.log文件;info以上err以下級別輸出到/data/log/info.log文件
註:修改配置文件需要root權限。如果沒有/data/log目錄,需手動創建,並修改文件權限,chown syslog:adm /data/log
配置文件修改後,重啟rsyslog服務, /etc/init.d/rsyslog restart,監聽狀態
(2). 修改client配置文件
/etc/rsyslog.d/50-default.conf,將LOCAL4類型的所有日誌,轉發到遠程主機上
# Add by lxd 2017/11/11 LOCAL4.* @@xxx.xxx.xxx.xxx:514
重啟rsyslog服務,/etc/init.d/rsyslog restart
4. 測試
#include "syslog.h" int main(int args, char** argv){ const char* name = "lxd"; const char* msg = "client"; openlog(name, LOG_ODELAY|LOG_PERROR, LOG_LOCAL4); syslog(LOG_DEBUG, "%d:%s", LOG_DEBUG, msg); syslog(LOG_INFO, "%d:%s", LOG_INFO, msg); syslog(LOG_NOTICE, "%d:%s", LOG_NOTICE, msg); syslog(LOG_WARNING, "%d:%s", LOG_WARNING, msg); syslog(LOG_ERR, "%d:%s", LOG_ERR, msg); syslog(LOG_CRIT, "%d:%s", LOG_CRIT, msg); syslog(LOG_ALERT, "%d:%s", LOG_ALERT, msg); syslog(LOG_EMERG, "%d:%s", LOG_EMERG, msg); closelog(); return 0; }
編譯運行以上代碼,查看server的tcp連接,發現一個客戶端連接已經建立
打開/data/log目錄,多了兩個日誌文件,err.log記錄err以上級別的日誌,info.log記錄err以下info以上級別的日誌,成功~
接下來要做的是日誌文件rotating,比如,一天產生一個文件,以及定制日誌的格式。
如果按以上步驟實驗不成功的,歡迎聯系作者。qq:591560293
用rsyslog管理遊戲服日誌