rsyslog 是一个 syslogd 的多线程增强版。rsyslog是Linux系统日志守护进程。默认的rsyslog配置文件是/etc/rsyslog.conf文件。程序,守护进程和内核提供了访问系统的日志信息
几乎所有的网络设备都可以通过rsyslog协议,将日志信息以用户数据报协议(UDP)方式传送到远端服务器,远端接收日志服务器必须通过rsyslogd监听UDP 端口514,并根据 rsyslog.conf配置文件中的配置处理本机,接收访问系统的日志信息,把指定的事件写入特定文件中,供后台数据库管理和响应之用。意味着可以让任何事件都登录到一台或多台服务器上,以备后台数据库用off-line(离线) 方法分析远端设备的事件。
通常,rsyslog 接受来自系统的各种功能的信息,每个信息都包括重要级。/etc/rsyslog.conf 文件通知 rsyslogd 如何根据设备和信息重要级别来报告信息。
rsyslog相关特性为:
syslog标准协议如下图:

facility.priority    target
表示将哪个信道传进来的日志,哪个日志级别(及其之上的日志级别),记录到哪个目标中
facility格式:
*表示所有的facility
logger -p local3.info 'KadeFor is testing the rsyslog and logger'
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 | 安全模块服务日志 | 
根据日志所记录问题的严重等级不同,日志优先级要求分为:FATAL、ERROR、WARN、INFO、DEBUG、TRACE。
不同版本默认日志等级也不通,为减少系统资源占用及控制日志数量,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
}
        日志文件路径:列出了需要进行轮换的多个日志文件路径,如 /log/auth/auth.log、/log/iodevice/iodevice.log 等。
rotate 7:保留 7 个轮换的日志文件,旧的日志会被删除。
maxsize 50M:如果日志文件超过 50 MB,则会进行轮换。
weekly:每周进行轮换。
missingok:如果日志文件丢失,不会报错。
notifempty:如果日志文件为空,则不进行轮换。
compress:轮换后压缩日志文件。
delaycompress:延迟压缩,意味着当前轮换的日志不会立即被压缩,而是在下次轮换时进行压缩。
sharedscripts:如果有多个日志文件被轮换,postrotate 脚本只会执行一次。
postrotate /usr/lib/rsyslog/rsyslog-rotate:在轮换后执行的脚本,通常用于重新加载或重新启动日志收集服务。
根据整体方案要求,需要在如下情况下创建新的日志文件
无需求
采用logrotate服务,并根据rsyslog配置文件进行轮转, 具体配置文件在promtail安装包
若工智机有外部设备接入,需要将外部设备产生的log进行采集记录
日志模块启动流程
Log模块是单独的Log守护进程,主要流程是由linux init进程将其启动,由system service 进程保证其正常工作,然后Log模块启动其他子模块。System service守护进程监控Log模块状态,一旦log模块异常守护进程立即将log模块进行恢复。