LINUX日志文件
Linux的日志文件
所有Linux系统都会生成系统日志,可以对其进行检查以查找有关正在运行的系统的信息。这些日志文件可以包含大量信息,从简单的信息消息到关键的系统问题。创建的大多数日志文件都是纯文本格式。
按照约定,大多数创建的日志文件位于目录/ var / log /
下。这是系统消息和已记录/记录的标准区域。根据您使用的Linux发行版,您可能会有一个消息
文件或一个syslog
文件,其中包含最近的活动。日志文件通常由syslogd
或rsyslogd
日志记录恶魔创建。这些恶魔具有很高的可配置性,可以将消息过滤到指定的文件中。除了处理本地事件外,还可以将消息记录到专用于接收此类消息的远程服务器。在大型组织中,拥有专用的syslog服务器是很常见的。稍后将介绍一些基本配置选项。
以下是一些较常见的日志文件的列表。其中一些是特定于发行版的:
日志文件 | 描述 |
---|---|
/var/log/messages | 全局系统消息记录在这里。(某些系统上的默认日志记录区域) |
/var/log/syslog | 全局系统消息记录在此处。(某些系统上的默认日志记录区域) |
/var/log/auth.log | 系统授权信息,包括用户登录信息 |
/var/log/kern.log | 内核消息记录在这里 |
/var/log/mail.log | 包含来自邮件服务器的日志记录信息 |
/var/log/boot.log | 系统启动消息记录在这里 |
/var/log/cups.log | 打印机相关的消息记录在这里 |
/var/log/wtmp | 包含与登录到系统的用户有关的信息 |
/var/log/samba | smbd和nmbd的Samba日志文件。如果配置,则可以包含用户的特定日志文件。 |
/var/log/dpkg.log | 包含来自使用dpkg安装或删除软件包的安装的信息 |
/var/log/zypper.log | 包含来自zypper软件包管理器工具的消息 |
/var/log/apt | 包含来自使用APT的程序包更新的信息 |
/var/log/dmesg | 包含内核环形缓冲区消息 |
syslogd
或rsyslogd
守护程序处理系统上的大多数日志。
rsyslogd
Rsyslogd是syslogd服务的可靠扩展版本。为了清晰起见,Linux使用rsyslogd作为它的机制来记录中心区域中的日志文件,或者将日志文件分割到单独的目录中。还可以将信息发送到专用的日志服务器。多个进程可以写入同一区域而不会导致文件锁定。简单的命令可以直接从脚本中写入这个区域。
配置文件
rsyslogd在系统上的行为取决于它的配置。这个文件通常位于/etc/rsyslog.conf
中。此文件包含描述记录消息时应该如何处理消息的文本。在这里,您可以为特定的消息类型指定特定的目录。默认的日志记录规则通常位于/etc/rsyslog.d/
之下。
Ubuntu下rsyslog .conf的例子
/etc/rsyslog.conf
# Default logging rules can be found in /etc/rsyslog.d/50-default.conf ################# #### MODULES #### ################# $ModLoad imuxsock # provides support for local system logging $ModLoad imklog # provides kernel logging support (previously done by rklogd) #$ModLoad immark # provides --MARK-- message capability # provides UDP syslog reception #$ModLoad imudp #$UDPServerRun 514 # provides TCP syslog reception #$ModLoad imtcp #$InputTCPServerRun 514 ########################### #### GLOBAL DIRECTIVES #### ########################### # # Use traditional timestamp format. # To enable high precision timestamps, comment out the following line. # $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat # Filter duplicated messages $RepeatedMsgReduction on # # Set the default permissions for all log files. # $FileOwner syslog $FileGroup adm $FileCreateMode 0640 $DirCreateMode 0755 $Umask 0022 $PrivDropToUser syslog $PrivDropToGroup syslog # # Where to place spool files # $WorkDirectory /var/spool/rsyslog # # Include all config files in /etc/rsyslog.d/ # $IncludeConfig /etc/rsyslog.d/*.conf
#井号用于表示一个注释或注释掉一个不需要的函数。
注意最后一行$IncludeConfig /etc/rsyslog.d/*.conf
.这是我们可以指定自定义规则/映射的地方。
# Default rules for rsyslog. # # For more information see rsyslog.conf(5) and /etc/rsyslog.conf # # First some standard log files. Log by facility. # auth,authpriv.* /var/log/auth.log *.*;auth,authpriv.none -/var/log/syslog #cron.* /var/log/cron.log #daemon.* -/var/log/daemon.log kern.* -/var/log/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 # # Logging for INN news system. # news.crit /var/log/news/news.crit news.err /var/log/news/news.err news.notice -/var/log/news/news.notice # # 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 # The named pipe /dev/xconsole is for the `xconsole' utility. To use it, # you must invoke `xconsole' with the `-file' option: # # $ xconsole -file /dev/xconsole [...] # # NOTE: adjust the list below, or you'll go crazy if you have a reasonably # busy site.. # daemon.*;mail.*;\ news.err;\ *.=debug;*.=info;\ *.=notice;*.=warn |/dev/xconsole
默认的日志记录区域称为syslog
*.*;auth,authpriv.none -/var/log/syslog
什么是Facilities 和Levels?
每当rsyslogd守护进程接收到一条日志消息时,它都会根据消息类型(功能)和级别(优先级)进行操作。这些映射可以在/etc/syslog.conf
或者/etc/syslog.d/*.conf
文件中看到。
配置文件中的每个条目都可以指定一个或多个功能/级别选择器,然后是一个操作。选择器由一个或多个设施和一个操作组成。动作通常是接收消息的目录和文件的名称。
facility.level action
例如: mail.* -/var/log/mail
。
mail 是facility, level是星号表示全部, action是/var/log/mail
Facility
Facility代表讯息的创建者,这些设施通常包括:
auth, authpriv, cron, daemon, kern, lpr, mail, mark, news, syslog, user, local0 - local7, "*"
level(优先级)
级别指定严重性阈值。这些可以是:(优先级最低的优先)
debug, info, notice, warning, err, crit, alert, emerg.
Actions
action 部分是消息的目的地。该操作可以是文件名,如/var/log/syslog
,也可以是前缀为@
的主机名或IP地址。后一种选择在大型组织和企业中很流行。通常,与安全相关的消息可能被发送到中央日志服务器以进行进一步检查。
rsyslog.conf结构
由于rsyslogd是syslogd的增强版本,它可以处理称为sysklogd的旧式旧样式构造。它还处理旧版的rsyslog。但是,当您使用所谓的RainerScript
时,rsyslog的真正功能就会发挥作用。这是rsyslog的新样式格式,可以轻松处理复杂的情况。
来自/ openSUSE的/etc/rsyslog.conf
的示例部分
# # NetworkManager into separate file and stop their further processing # if ($programname == 'NetworkManager') or \ ($programname startswith 'nm-') \ then -/var/log/NetworkManager & ~ # # email-messages # mail.* -/var/log/mail mail.info -/var/log/mail.info mail.warning -/var/log/mail.warn mail.err /var/log/mail.err # # news-messages # news.crit -/var/log/news/news.crit news.err -/var/log/news/news.err news.notice -/var/log/news/news.notice
使用logger命令进行消息测试
logger是syslog模块的shell命令界面。Logger允许您直接在系统日志中输入条目。
在其最简单的形式,我们可以执行日志I am a test
。然后该消息将转到我们的默认区域(可能是/var/log/syslog或/var/log/messages),这取决于您如何配置您的规则。您还可以使用-p或——priority
选项指定优先级。
john@john-desktop:/var/log$ logger "I am a Test of logger" Mar 22 22:39:51 john-desktop kernel: [ 9588.319477] dev_remove_pack: edad0884 not found. Mar 22 22:45:01 john-desktop CRON[4087]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1) Mar 22 22:47:31 john-desktop john: I am a Test of logger
基本的Logger使用说明
Usage: logger [options] [message] Options: -d, --udp use UDP (TCP is default) -i, --id log the process ID too -f, --file <file> log the contents of this file -h, --help display this help text and exit -n, --server <name> write to this remote syslog server -P, --port <number> use this UDP port -p, --priority <prio> mark given message with this priority -s, --stderr output message to standard error as well -t, --tag <tag> mark every line with this tag -u, --socket <socket> write to this Unix socket -V, --version output version information and exit
dmesg
dmesg
是代表显示消息的特殊命令。dmesg将显示内核的消息缓冲区。如果要在引导过程中快速查看从屏幕飞过的消息,dmesg非常有用。另一个有用的技巧是将dmesg命令的输出重定向到一个临时文件:dmesg> /tmp/temp.txt。