用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
1
2
3
4
|
# Options for rsyslogd # -x disables DNS lookups for remote messages # See rsyslogd(8) for more details RSYSLOGD_OPTIONS= "-r" |
/etc/rsyslog.conf,接受TCP请求,端口是514,省略了其他配置
1
2
3
|
# 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/13 template(name="msg" type="string" string="%syslogtag% %msg%\n" ) template(name="info_file" type="string" string="/data/log/%syslogtag:1:9%-%$year%-%$month%-%$day%.log" ) template(name="error_file" type="string" string="/data/log/%syslogtag:1:9%-error-%$year%-%$month%-%$day%.log" ) LOCAL4.=info;LOCAL4.=notice;LOCAL4.=warning ?info_file;msg LOCAL4.=err;LOCAL4.=crit;LOCAL4.=alert;LOCAL4.=emerg ?error_file;msg
接收LOCAL4类型的日志,定制log文件名和内容格式,err级别以上和以下等级的日志分别放在不同的log文件。
注:修改配置文件需要root权限。如果没有/data/log目录,需手动创建,并修改文件权限,chown syslog:adm /data/log
配置文件修改后,重启rsyslog服务, /etc/init.d/rsyslog restart,监听状态
(2). 修改client配置文件
/etc/rsyslog.d/50-default.conf,将LOCAL4类型的所有日志,转发到远程主机上
1
2
|
# 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,比如,一天产生一个文件,以及定制日志的格式。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)