linux 如何查看系统日志

Linux系统拥有很是灵活和强大的日志功能,能够保存几乎全部的操做记录,并能够从中检索出咱们须要的信息。

大部分Linux发行版默认的日志守护进程为 syslog,位于 /etc/syslog 或 /etc/syslogd,默认配置文件为 /etc/syslog.conf,任何但愿生成日志的程序均可以向 syslog 发送信息。 

Linux系统内核和许多程序会产生各类错误信息、警告信息和其余的提示信息,这些信息对管理员了解系统的运行状态是很是有用的,因此应该把它们写到日志文件中去。完成这个过程的程序就是syslog。syslog能够根据日志的类别和优先级将日志保存到不一样的文件中。例如,为了方便查阅,能够把内核信息与其余信息分开,单独保存到一个独立的日志文件中。默认配置下,日志文件一般都保存在“/var/log”目录下。数据库

日志类型

下面是常见的日志类型,但并非全部的Linux发行版都包含这些类型:
安全

类型 说明
auth 用户认证时产生的日志,如login命令、su命令。
authpriv 与 auth 相似,可是只能被特定用户查看。
console 针对系统控制台的消息。
cron 系统按期执行计划任务时产生的日志。
daemon 某些守护进程产生的日志。
ftp FTP服务。
kern 系统内核消息。
local0.local7 由自定义程序使用。
lpr 与打印机活动有关。
mail 邮件日志。
mark 产生时间戳。系统每隔一段时间向日志文件中输出当前时间,每行的格式相似于 May 26 11:17:09 rs2 -- MARK --,能够由此推断系统发生故障的大概时间。
news 网络新闻传输协议(nntp)产生的消息。
ntp 网络时间协议(ntp)产生的消息。
user 用户进程。
uucp UUCP子系统。

日志优先级

常见的日志优先级请见下标:
服务器

优先级 说明
emerg 紧急状况,系统不可用(例如系统崩溃),通常会通知全部用户。
alert 须要当即修复,例如系统数据库损坏。
crit 危险状况,例如硬盘错误,可能会阻碍程序的部分功能。
err 通常错误消息。
warning 警告。
notice 不是错误,可是可能须要处理。
info 通用性消息,通常用来提供有用信息。
debug 调试程序产生的信息。
none 没有优先级,不记录任何日志消息。

常见日志文件

全部的系统应用都会在 /var/log 目录下建立日志文件,或建立子目录再建立日志文件。例如:
网络

文件/目录 说明
/var/log/boot.log 开启或重启日志。
/var/log/cron 计划任务日志
/var/log/maillog 邮件日志。
/var/log/messages 该日志文件是许多进程日志文件的汇总,从该文件能够看出任何***企图或成功的***。
/var/log/httpd 目录 Apache HTTP 服务日志。
/var/log/samba 目录 samba 软件日志


/etc/syslog.conf 文件

/etc/syslog.conf 是 syslog 的配置文件,会根据日志类型和优先级来决定将日志保存到何处。典型的 syslog.conf 文件格式以下所示:ide

*.err;kern.debug;auth.notice /dev/console
daemon,auth.notice           /var/log/messages
lpr.info                     /var/log/lpr.log
mail.*                       /var/log/mail.log
ftp.*                        /var/log/ftp.log
auth.*                       @see.xidian.edu.cn
auth.*                       root,amrood
netinfo.err                  /var/log/netinfo.log
install.*                    /var/log/install.log
*.emerg                      *
*.alert                      |program_name
mark.*                       /dev/console

第一列为日志类型和日志优先级的组合,每一个类型和优先级的组合称为一个选择器;后面一列为保存日志的文件、服务器,或输出日志的终端。syslog 进程根据选择器决定如何操做日志。

对配置文件的几点说明:ui

  • 日志类型和优先级由点号(.)分开,例如 kern.debug 表示由内核产生的调试信息。this

  • kern.debug 的优先级大于 debug。spa

  • 星号(*)表示全部,例如 *.debug 表示全部类型的调试信息,kern.* 表示由内核产生的全部消息。操作系统

  • 可使用逗号(,)分隔多个日志类型,使用分号(;)分隔多个选择器。命令行


对日志的操做包括:

  • 将日志输出到文件,例如 /var/log/maillog 或 /dev/console。

  • 将消息发送给用户,多个用户用逗号(,)分隔,例如 root, amrood。

  • 经过管道将消息发送给用户程序,注意程序要放在管道符(|)后面。

  • 将消息发送给其余主机上的 syslog 进程,这时 /etc/syslog.conf 文件后面一列为以@开头的主机名,例如@see.xidian.edu.cn。

logger 命令

logger 是Shell命令,能够经过该命令使用 syslog 的系统日志模块,还能够从命令行直接向系统日志文件写入一行信息。

logger命令的语法为:

logger [-i] [-f filename] [-p priority] [-t tag] [message...]

每一个选项的含义以下:

选项 说明
-f filename 将 filename 文件的内容做为日志。
-i 每行都记录 logger 进程的ID。
-p priority 指定优先级;优先级必须是形如 facility.priority 的完整的选择器,默认优先级为 user.notice。
-t tag 使用指定的标签标记每个记录行。
message 要写入的日志内容,多条日志以空格为分隔;若是没有指定日志内容,而且 -f filename 选项为空,那么会把标准输入做为日志内容。


例如,将ping命令的结果写入日志:

$ ping 192.168.0.1 | logger -it logger_test -p local3.notice&
$ tail -f /var/log/userlog
Oct 6 12:48:43 kevein logger_test[22484]: PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.
Oct 6 12:48:43 kevein logger_test[22484]: 64 bytes from 192.168.0.1: icmp_seq=1 ttl=253 time=49.7 ms
Oct 6 12:48:44 kevein logger_test[22484]: 64 bytes from 192.168.0.1: icmp_seq=2 ttl=253 time=68.4 ms
Oct 6 12:48:45 kevein logger_test[22484]: 64 bytes from 192.168.0.1: icmp_seq=3 ttl=253 time=315 ms
Oct 6 12:48:46 kevein logger_test[22484]: 64 bytes from 192.168.0.1: icmp_seq=4 ttl=253 time=279 ms
Oct 6 12:48:47 kevein logger_test[22484]: 64 bytes from 192.168.0.1: icmp_seq=5 ttl=253 time=347 ms
Oct 6 12:48:49 kevein logger_test[22484]: 64 bytes from 192.168.0.1: icmp_seq=6 ttl=253 time=701 ms
Oct 6 12:48:50 kevein logger_test[22484]: 64 bytes from 192.168.0.1: icmp_seq=7 ttl=253 time=591 ms
Oct 6 12:48:51 kevein logger_test[22484]: 64 bytes from 192.168.0.1: icmp_seq=8 ttl=253 time=592 ms
Oct 6 12:48:52 kevein logger_test[22484]: 64 bytes from 192.168.0.1: icmp_seq=9 ttl=253 time=611 ms
Oct 6 12:48:53 kevein logger_test[22484]: 64 bytes from 192.168.0.1: icmp_seq=10 ttl=253 time=931 ms

ping命令的结果成功输出到 /var/log/userlog 文件。

命令 logger -it logger_test -p local3.notice 各选项的含义:

  • -i:在每行都记录进程ID;

  • -t logger_test:每行记录都加上“logger_test”这个标签;

  • -p local3.notice:设置日志类型和优先级。

日志转储

日志转储也叫日志回卷或日志轮转。Linux中的日志一般增加很快,会占用大量硬盘空间,须要在日志文件达到指定大小时分开存储。

syslog 只负责接收日志并保存到相应的文件,但不会对日志文件进行管理,所以常常会形成日志文件过大,尤为是WEB服务器,轻易就能超过1G,给检索带来困难。

大多数Linux发行版使用 logrotate 或 newsyslog 对日志进行管理。logrotate 程序不但能够压缩日志文件,减小存储空间,还能够将日志发送到指定 E-mail,方便管理员及时查看日志。

例如,规定邮件日志 /var/log/maillog 超过1G时转储,每周一次,那么每隔一周 logrotate 进程就会检查 /var/log/maillog 文件的大小:

  • 若是没有超过1G,不进行任何操做。

  • 若是在1G~2G之间,就会建立新文件 /var/log/maillog.1,并将多出的1G日志转移到该文件,以给 /var/log/maillog 文件瘦身。

  • 若是在2G~3G之间,会继续建立新文件 /var/log/maillog.2,并将 /var/log/maillog.1 的内容转移到该文件,将 /var/log/maillog 的内容转移到 /var/log/maillog.1,以保持 /var/log/maillog 文件不超过1G。


能够看到,每次转存都会建立一个新文件(若是不存在),命名格式为日志文件名加一个数字(从1开始自动增加),以保持当前日志文件和转存后的日志文件不超过指定大小。

logrotate 的主要配置文件是 /etc/logrotate.conf,/etc/logrotate.d 目录是对 /etc/logrotate.conf 的补充,或者说为了避免使 /etc/logrotate.conf 过大而设置。

能够经过 cat 命令查看它的内容:

$cat /etc/logrotate.conf
# see "man logrotate" for details  //能够查看帮助文档
# rotate log files weekly
weekly                             //设置每周转储一次
# keep 4 weeks worth of backlogs
rotate 4                           //最多转储4次
# create new (empty) log files after rotating old ones
create                             //当转储后文件不存储时建立它
# uncomment this if you want your log files compressed
#compress                          //以压缩方式转储
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d           //其余日志文件的转储方式,包含在该目录下
# no packages own wtmp -- we'll rotate them here
/var/log/wtmp {                    //设置/var/log/wtmp日志文件的转储参数
    monthly                        //每个月转储
    create 0664 root utmp          //转储后文件不存在时建立它,文件全部者为root,所属组为utmp,对应的权限为0664
    rotate 1                       //最多转储一次
}


注意:include 容许管理员把多个分散的文件集中到一个,相似于C语言的 #include,将其余文件的内容包含进当前文件。

include 很是有用,一些程序会把转储日志的配置文件放在 /etc/logrotate.d 目录,这些配置文件会覆盖或增长 /etc/logrotate.conf 的配置项,若是没有指定相关配置,那么采用 /etc/logrotate.conf 的默认配置。

因此,建议将 /etc/logrotate.conf 做为默认配置文件,第三方程序在 /etc/logrotate.d 目录下自定义配置文件。

logrotate 也能够做为命令直接运行来修改配置文件。


系统日志是由一个名为syslog的服务管理的,如如下日志文件都是由syslog日志服务驱动的:

 /var/log/message 系统启动后的信息和错误日志,记录Linux操做系统常见的系统和服务错误信息   /var/log/secure Linux系统安全日志,记录用户和工做组变坏状况、用户登录认证状况 

 /var/log/maillog 与邮件相关的日志信息  

 /var/log/cron 与定时任务相关的日志信息  

 /var/log/spooler 与UUCP和news设备相关的日志信息  

 /var/log/boot.log 守护进程启动和中止相关的日志消息    

 /var/log/lastlog :记录最后一次用户成功登录的时间、登录IP等信息

 /var/log/btmp :记录Linux登录失败的用户、时间以及远程IP地址

 /var/log/dmesg这个是硬件的


系统:  

# uname -a   # 查看内核/操做系统/CPU信息  

# cat /etc/issue  

# cat /etc/redhat-release # 查看操做系统版本  

# cat /proc/cpuinfo  # 查看CPU信息  

# hostname   # 查看计算机名  

# lspci -tv   # 列出全部PCI设备  

# lsusb -tv   # 列出全部USB设备  

# lsmod    # 列出加载的内核模块  

# env    # 查看环境变量  


资源:  

# free -m   # 查看内存使用量和交换区使用量  

# df -h    # 查看各分区使用状况  

# du -sh <目录名>  # 查看指定目录的大小  

# grep MemTotal /proc/meminfo # 查看内存总量  

# grep MemFree /proc/meminfo # 查看空闲内存量  

# uptime   # 查看系统运行时间、用户数、负载  

# cat /proc/loadavg  # 查看系统负载  


磁盘和分区:  

# mount | column -t  # 查看挂接的分区状态  

# fdisk -l   # 查看全部分区  

# swapon -s   # 查看全部交换分区  

# hdparm -i /dev/hda  # 查看磁盘参数(仅适用于IDE设备)  

# dmesg | grep IDE  # 查看启动时IDE设备检测情况  


网络:  

# ifconfig   # 查看全部网络接口的属性  

# iptables -L   # 查看防火墙设置  

# route -n   # 查看路由表  

# netstat -lntp   # 查看全部监听端口  

# netstat -antp   # 查看全部已经创建的链接  

# netstat -s   # 查看网络统计信息  


进程:  

# ps -ef   # 查看全部进程  

# top    # 实时显示进程状态(另外一篇文章里面有详细的介绍)  


用户:  

# w    # 查看活动用户  

# id <用户名>   # 查看指定用户信息  

# last    # 查看用户登陆日志  

# cut -d: -f1 /etc/passwd # 查看系统全部用户  

# cut -d: -f1 /etc/group # 查看系统全部组 

# crontab -l   # 查看当前用户的计划任务  


服务:  

# chkconfig –list  # 列出全部系统服务  

# chkconfig –list | grep on # 列出全部启动的系统服务  


程序:  

# rpm -qa   # 查看全部安装的软件包

相关文章
相关标签/搜索