青蛙学Linux—日志
1、日志分类
在Linux下日志可以分为以下三类:
- 内核及系统日志:内核和系统运行中产生的日志,由syslog/rsyslog统一管理(从CentOS 6开始使用rsyslog,配置文件为/etc/syslog.conf)
- 用户日志:记录系统用户登录退出等相关信息,包括用户名、登录的终端、登录时间、来源主机、正在进行的操作等
- 应用程序日志:应用程序运行中产生的日志,一些应用程序会自己管理日志而不是使用syslog/rsyslog
2、rsyslog
rsyslog是syslog的一个多线程增强版日志管理系统,大部分的Linux发行版都已经改用rsyslog进行日志管理。
rsyslog配置文件:
/etc/rsyslog.conf
配置文件内容及详解:
# rsyslog configuration file # For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html # If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html #### MODULES #### #### 加载的模块 #### # The imjournal module bellow is now used as a message source instead of imuxsock. $ModLoad imuxsock # provides support for local system logging (e.g. via logger command) $ModLoad imjournal # provides access to the systemd journal #$ModLoad imklog # reads kernel messages (the same are read from journald) #$ModLoad immark # provides --MARK-- message capability # 允许本机514端口接收其他主机通过UDP协议发送的日志 # Provides UDP syslog reception #$ModLoad imudp #$UDPServerRun 514 # 允许本机514端口接收其他主机通过TCP协议发送的日志 # Provides TCP syslog reception #$ModLoad imtcp #$InputTCPServerRun 514 #### GLOBAL DIRECTIVES #### #### 全局配置 #### # Where to place auxiliary files $WorkDirectory /var/lib/rsyslog # Use default timestamp format $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat # File syncing capability is disabled by default. This feature is usually not required, # not useful and an extreme performance hit #$ActionFileEnableSync on # Include all config files in /etc/rsyslog.d/ $IncludeConfig /etc/rsyslog.d/*.conf # Turn off message reception via local log socket; # local messages are retrieved through imjournal now. $OmitLocalLogging on # File to store the position in the journal $IMJournalStateFile imjournal.state #### RULES #### #### 记录日志的规则 #### # Log all kernel messages to the console. # Logging much else clutters up the screen. #kern.* /dev/console # Log anything (except mail) of level info or higher. # Don't log private authentication messages! *.info;mail.none;authpriv.none;cron.none /var/log/messages # The authpriv file has restricted access. authpriv.* /var/log/secure # Log all the mail messages in one place. mail.* -/var/log/maillog # 路径前的-表示使用异步传输模式,隔一段时间向硬盘写入数据,以防止大量的日志造成硬盘I/O负担 # Log cron stuff cron.* /var/log/cron # Everybody gets emergency messages *.emerg :omusrmsg:* # 调用omusrmsg模块 # Save news errors of level crit and higher in a special file. uucp,news.crit /var/log/spooler # Save boot messages also to boot.log local7.* /var/log/boot.log # ### begin forwarding rule ### # The statement between the begin ... end define a SINGLE forwarding # rule. They belong together, do NOT split them. If you create multiple # forwarding rules, duplicate the whole block! # Remote Logging (we use TCP for reliable delivery) # # An on-disk queue is created for this action. If the remote host is # down, messages are spooled to disk and sent when it is up again. #$ActionQueueFileName fwdRule1 # unique name prefix for spool files #$ActionQueueMaxDiskSpace 1g # 1gb space limit (use as much as possible) #$ActionQueueSaveOnShutdown on # save messages to disk on shutdown #$ActionQueueType LinkedList # run asynchronously #$ActionResumeRetryCount -1 # infinite retries if host is down # 将本机日志发送到remote-host。@@表示使用TCP协议,@表示使用UDP协议 # remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional #*.* @@remote-host:514 # ### end of the forwarding rule ###
2.1、日志记录规则详解
记录规则遵循如下格式:
facility.level action # facility.level字段也被称为seletor(选择条件)
facility:设备(也称日志类型)
- auth:由PAM产生的用户认证日志
- authpriv:包括特权登录在内的用户认证,如ssh登录
- cron:任务计划产生的日志
- daemon:某些守护进程产生的日志
- kern:系统内核产生的日志
- lpr:与打印机活动有关的日志
- mail:邮件日志
- mark:rsyslog生成时间戳,格式类似 May 26 11:17:09 rs2 -- MARK --,用于推断事件产生的大概时间
- news:网络新闻传输协议nntp产生的日志
- ntp:网络时间协议ntp产生的日志
- user:用户进程产生的日志
- uucp:UUCP子系统产生的日志
- local0-local7:用户自定义的日志类型,可以在应用程序里使用
注意:facility中可以使用通配符*,代表除mark外的所有类型
level:日志级别
- emerg:紧急情况,系统不可用,一般会通知所有用户
- alert:需要立即修复
- crit:危险情况,可能会阻碍程序的部分功能
- err:一般错误消息
- warning:警告
- notice:不是错误,但可能需要处理
- info:通用性消息,一般用来提供有用信息
- debug:调试程序产生的消息
- none:没有优先级,不记录任何日志消息
seletor:选择条件
- ;:同时定义多个选择条件
- .:表示大于等于某个级别的信息
- *:所有日志信息
- =:仅包含本优先级的日志信息
- !:不等于,本优先级日志信息除外
action:动作
- file:指定日志文件的绝对路径
- terminal 或print:发送到串行或并行设备标识符,例如/dev/ttyS2
- @host:远程主机,@后可以是IP也可以是域名
- username:指定用户,可以使用,指定多个用户,这些用户必须已登录到主机
- *:所有用户,所有已登录的用户都将收到信息
- ^:^后跟可执行脚本或程序的绝对路径,可以将日志内容作为脚本的第一个参数
3、常用日志文件
系统自身的日志及大部分应用程序的日志文件默认都保存在/var/log目录下。在Linux下有以下一些常用的日志文件(均保存在/var/log目录):
- messages:公共日志文件,记录Linux内核消息及各种应用程序的公共日志消息,包括启动、IO错误、网络错误、程序故障等。对于未使用独立日志文件的应用程序或服务,一般都可以从该文件获得相关的事件记录信息
- cron:记录crond计划任务产生的事件消息
- dmesg:包含内核缓冲信息(kernel ring buffer)。在系统启动时,屏幕上显示许多与硬件有关的信息,此日志文件保存系统上次启动时产生的这些信息。而dmesg命令可以查看本次系统启动时的信息。
- maillog:记录进入或发出系统的电子邮件活动
- boot.log:记录系统启动时的软件日志信息,及系统启动时屏幕上滚动的信息
- secure:记录用户远程登录,认证过程中的事件信息
- wtmp:记录系统所有登录和退出信息。该文件为二进制文件,通过last命令查看
- btmp:记录错误登录系统的信息。该文件为二进制文件,通过lastb命令查看
- lastlog:记录每一个用户最后一次成功和不成功的登录事件。该文件为二进制文件,通过lastlog命令查看