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模块进行恢复。