作者:无聊人生918_644 | 来源:互联网 | 2023-07-28 17:29
日志数据记录了系统软件执行过程中的运行状态及所有系统行为,通过日志分析,可以感知过去发生了什么,继而帮助开发进行产品功能完善、问题定位及产品优化,同时可以进行审计追踪,提高系统的安
日志数据记录了系统软件执行过程中的运行状态及所有系统行为,通过日志分析,可以感知过去发生了什么,继而帮助开发进行产品功能完善、问题定位及产品优化,同时可以进行审计追踪,提高系统的安全性,linux日志数据格式遵循syslog协议,早期的linux发行版内置syslog作为日志记录程序,当前业界普遍基于rsyslog替代syslog的功能,部分发行版已默认使用rsyslog作为日志收集工具。
Rsyslog整体架构
rsyslog(rocket-fast system for log)是一个GPLv3的开源项目,源码托管在GitHub,它提供了高性能,高安全功能和模块化设计,上图为rsyslog官方网站的一张介绍图片,由图可以看出,rsyslog可以支持多种输入输出,能够满足多种场景的需求,rsyslog即能够满足企业级需求,同时也可以扩展到小型系统,还可以支持多种数据转储及日志过滤方式。
上图为rsyslog的架构图,介绍了rsyslog的整体架构,标明了rsyslog的消息流,参考图中架构,rsyslog整体分为输入模块、预处理模块、主队列模块、过滤模块、执行队列模块和输出模块。各个模块如下:
- Input模块:该模块是日志消息输入,rsyslog支持多种输入模式,每种输入对应不同的模块实现,比如imtcp模块、imudp模块、imklog模块等。
- 预处理模块:该模块主要用于解决各种syslog协议实现间的差异,举例说明如果日志系统client端使用rsyslog、server端使用syslog-ng,如果自己不做特殊处理syslog-ng是无法识别的。但是反过来,rsyslog的server端就可以识别syslog-ng发过来的消息。
- 主队列模块:该模块负责消息的存储,从Input传入的未经过滤的消息放在主队列中,过滤后的消息放入到不同action queue中,再由action queue送到各个输出模块。
- 过滤模块:该模块处理消息的分析和过滤,rsyslog可以根据消息的任何部分进行过滤。
- 执行队列模块:
- 输出模块:该模块依据配置文件对消息做处理,转换成对应的数据格式,对于不同的输出通道,提供不同的输出模块,比如omfile、omprog、omtcp、ommysql等。
日志接口
rsyslogd是rsyslog的守护进程,用于日志信息的处理,linux提供了一套syslog函数,如下:
#include
void openlog (char*ident,int option ,int facility);
void syslog(int priority,char*format,……)
void closelog();接口使用示例如下:
#include
int main(int argc, char **argv)
{
openlog("MyMsgMARK", LOG_CONS | LOG_PID, 0);
syslog(LOG_DEBUG, "hello world '%s'/n", argv[0]);
closelog();
return 0;
}