1. 程式人生 > >用rsyslog管理遊戲服日誌

用rsyslog管理遊戲服日誌

message 技術 直接 notice char col pro class disable

看到有朋友用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管理遊戲服日誌