日志回收策略


Rsyslog介绍

Rsyslog是什么

rsyslog 是一个 syslogd 的多线程增强版。rsyslog是Linux系统日志守护进程。默认的rsyslog配置文件是/etc/rsyslog.conf文件。程序,守护进程和内核提供了访问系统的日志信息

几乎所有的网络设备都可以通过rsyslog协议,将日志信息以用户数据报协议(UDP)方式传送到远端服务器,远端接收日志服务器必须通过rsyslogd监听UDP 端口514,并根据 rsyslog.conf配置文件中的配置处理本机,接收访问系统的日志信息,把指定的事件写入特定文件中,供后台数据库管理和响应之用。意味着可以让任何事件都登录到一台或多台服务器上,以备后台数据库用off-line(离线) 方法分析远端设备的事件。

通常,rsyslog 接受来自系统的各种功能的信息,每个信息都包括重要级。/etc/rsyslog.conf 文件通知 rsyslogd 如何根据设备和信息重要级别来报告信息。

rsyslog相关特性为:


Rsyslog相关术语


Rsyslog日志格式

syslog标准协议如下图:

facility.priority target 表示将哪个信道传进来的日志,哪个日志级别(及其之上的日志级别),记录到哪个目标中 facility格式: *表示所有的facility


Rsyslog 存储

logger 命令用于产生日志

logger -p local3.info 'KadeFor is testing the rsyslog and logger'

工智机软件log方案介绍

Log采集以及存储方案采用 rsyslog + logrotate + slog实现,通过实现slog接口对于底层syslog接口进行封装对上层统一接口方便统一log输出格式,具体框架如下图:

基础功能介绍

# if you experience problems, check
# if you experience problems, check
# rsyslog v3: load input modules  
# If you do not load inputs, nothing happens!  
# You may need to set the module load path if modules are not found.  
#  
# Ported from debian's sysklogd.conf 
$ModLoad immark   # provides --MARK-- message capability  
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)  
$ModLoad imklog   # kernel logging (formerly provided by rklogd)  
 
#  
# Set the default permissions  
#  
$FileOwner root  
$FileGroup adm  
$FileCreateMode 0640  
$DirCreateMode 0755  
$Umask 0022 
$template sinsegye_format, "%$NOW% %TIMESTAMP:8:15%  %syslogtag%%msg%\n"
#$ActionFileDefaultTemplate sinsegye_format

auth,authpriv.*                 /var/log/auth.log
*.*;auth,authpriv.none          -/var/log/syslog
cron.*                          /var/log/cron.log
daemon.*                        -/var/log/daemon.log
lpr.*                           -/var/log/lpr.log
mail.*                          -/var/log/mail.log
user.*                          -/var/log/user.log

kern.*                          /log/kernel/kern.log
local7.*                         /log/kernel/boot.log
local1.*                        /log/service/service.log;sinsegye_format
local2.*                        /log/app/app.log;sinsegye_format
#
# Logging for the mail system.  Split it up so that
# it is easy to write scripts to parse these files.
#
mail.info                       -/var/log/mail.info
mail.warn                       -/var/log/mail.warn
mail.err                        /var/log/mail.err

# Logging for INN news system
#
news.crit                       /var/log/news.crit
news.err                        /var/log/news.err
news.notice                     -/var/log/news.notice

#
# Some `catch-all' logfiles.
#
*.=debug;\
          auth,authpriv.none;\
        news.none;mail.none     -/var/log/debug
*.=info;*.=notice;*.=warn;\
       auth,authpriv.none;\
       cron,daemon.none;\
       mail,news.none          -/var/log/messages

#
# Emergencies are sent to everybody logged in.
#
*.emerg                         :omusrmsg:*
    
#
# Include all config files in /etc/rsyslog.d/
#
$IncludeConfig /etc/rsyslog.d/*.conf
- 下面是针对syslog中Service、Kernel、Application三个的输出配置
#  Default rules for rsyslog.
#
#           For more information see rsyslog.conf(5) and /etc/rsyslog.conf

template(name="sinsegyetmplate" type="string" string="[%TIMESTAMP:::date-rfc3339%] [%hostname%] [%syslogseverity-text%] %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n")

auth,authpriv.* /log/auth/auth.log;sinsegyetmplate
local3.* -/log/service/service.log;sinsegyetmplate
local4.* -/log/application/application.log;sinsegyetmplate
#cron.*             /var/log/cron.log
daemon.* -/log/daemon/daemon.log
kern.* -/log/kern/kern.log
#lpr.*              -/var/log/lpr.log
#mail.* -/var/log/mail.log
#user.*             -/var/log/user.log

#
# Logging for the mail system.  Split it up so that
# it is easy to write scripts to parse these files.
#
#mail.info          -/var/log/mail.info
#mail.warn          -/var/log/mail.warn
#mail.err /var/log/mail.err

#
# Some "catch-all" log files.
#
#*.=debug;\
#   auth,authpriv.none;\
#   news.none;mail.none -/var/log/debug
#*.=info;*.=notice;*.=warn;\
#   auth,authpriv.none;\
#   cron,daemon.none;\
#   mail,news.none      -/var/log/messages

#
# Emergencies are sent to everybody logged in.
#
*.emerg :omusrmsg:*

#
# I like to have messages displayed on the console, but only on a virtual
# console I usually leave idle.
#
#daemon,mail.*;\
#   news.=crit;news.=err;news.=notice;\
#   *.=debug;*.=info;\
#   *.=notice;*.=warn   /dev/tty8


日志功能描述

日志源

日志要求方便后期查询处理,主要分为Kernel日志、Service日志、Application日志、Peripheral日志。这些日志源主要方便IDE汇总以及云端制定特定日志文件回读

系统 日志源 日志内容
工智机系统 Kernel Linux kernel日志
-- Service Linux 常驻Service 运行日志
-- Application 各个组件或应用程序日志
-- IO_DEVICES 关键外设日志
-- COMMUNICATION_BUS 总线相关服务的日志
-- RUNTIME Codesys runtime日志
-- EXTENSION_COMPONENTS 扩展组件的日志
-- SYSTEM_MAINTENANCE 系统维护和诊断日志
-- TEMPORARY_DEBUGGING 调试日志
-- SAFETY_SYSTEMS 安全模块服务日志

日志级别

根据日志所记录问题的严重等级不同,日志优先级要求分为:FATALERRORWARNINFODEBUGTRACE

不同版本默认日志等级也不通,为减少系统资源占用及控制日志数量,Release版本默认等级为INFO,INFO以下的日志不会被输出。Debug版本默认的等级为全部日志。交付给用户必须是默认等级,即Release版本的等级为INFO。

日志格式

日志格式主要分为2种:kernel格式以及非kernel格式。

工智机日志要求分区如下:

Log下子目录结构如下:

/log 
    - kernel #kernel 的log 
    - service # service log 
    - application # app log
    - rte # codesys rte log
    - xxxxxxx

示例

/log/auth/auth.log
/log/iodevice/iodevice.log
/log/commbus/commbus.log
/log/safetybus/safetybus.log
/log/service/service.log
/log/application/application.log
/log/rte/rte.log
/log/maintenance/maintenance.log
/log/temp/temp.log
/log/daemon/daemon.log
/log/kern/kern.log
{
	rotate 7
	maxsize 50M
	weekly
	missingok
	notifempty
	compress
	delaycompress
	sharedscripts
	postrotate
		/usr/lib/rsyslog/rsyslog-rotate
	endscript
}

配置解析

根据整体方案要求,需要在如下情况下创建新的日志文件


日志上传

无需求


日志清除


日志轮转

采用logrotate服务,并根据rsyslog配置文件进行轮转, 具体配置文件在promtail安装包


外设日志

若工智机有外部设备接入,需要将外部设备产生的log进行采集记录


日志功能设计

日志模块启动流程 Log模块是单独的Log守护进程,主要流程是由linux init进程将其启动,由system service 进程保证其正常工作,然后Log模块启动其他子模块。System service守护进程监控Log模块状态,一旦log模块异常守护进程立即将log模块进行恢复。