前言

日志是一个系统管理员,一个运维人员,甚至是开发人员不可或缺的东西,系统用久了偶尔也会出现一些错误,我们需要日志来给系统排错,在一些网络应用服务不能正常工作的时候,我们需要用日志来做问题定位,日志还是过往时间的记录本,我们可以通过它知道我们是否被不明用户登录过等等。

在 Linux 中大部分的发行版都内置使用 syslog 系统日志,而常见的日志一般存放在 /var/log 中。
image.png

常见日志类型

系统日志

系统日志主要是存放系统内置程序或系统内核之类的日志信息如 alternatives.logbtmp 等等。

日志名称 记录信息
alternatives.log 系统的一些更新替代信息记录
apport.log 应用程序崩溃信息记录
apt/history.log 使用 apt-get 安装卸载软件的信息记录
apt/term.log 使用 apt-get 时的具体操作,如 package 的下载、打开等
auth.log 登录认证的信息记录
boot.log 系统启动时的程序服务的日志信息
btmp 错误的信息记录
Consolekit/history 控制台的信息记录
dist-upgrade dist-upgrade 这种更新方式的信息记录
dmesg 启动时,显示屏幕上内核缓冲信息,与硬件有关的信息
dpkg.log dpkg 命令管理包的日志。
faillog 用户登录失败详细信息记录
fontconfig.log 与字体配置有关的信息记录
kern.log 内核产生的信息记录,在自己修改内核时有很大帮助
lastlog 用户的最近信息记录
wtmp 登录信息的记录。wtmp 可以找出谁正在进入系统,谁使用命令显示这个文件或信息等
syslog 系统信息记录

alternatives.log

  1. update-alternatives 2016-07-02 13:36:16: run with --install /usr/bin/x-www-browser x-www-browser /usr/bin/google-chrome-stable 200
  2. update-alternatives 2016-07-02 13:36:16: run with --install /usr/bin/gnome-www-browser gnome-www-browser /usr/bin/google-chrome-stable 200
  3. update-alternatives 2016-07-02 13:36:16: run with --install /usr/bin/google-chrome google-chrome /usr/bin/google-chrome-stable 200

我们可以从中得到的信息有程序作用,日期,命令,成功与否的返回码。

auth.log

image.png
我们可以从中得到的信息有日期与 ip 地址的来源以及的用户与工具。

安装有关的日志

/var/log/apt 文件夹中有两个日志文件 history.logterm.log,两个日志文件的区别在于 history.log 主要记录了进行了哪个操作,相关的依赖有哪些,而 term.log 则是较为具体的一些操作,主要就是下载包,打开包,安装包等等的细节操作。
尝试清空日志后,再进行安装:

sudo apt-get install git

image.png

特殊日志

其他的日志格式也都类似于之前我们所查看的日志,主要便是时间,操作。而这其中有两个比较特殊的日志,其查看的方式比较与众不同,因为这两个日志并不是 ASCII 文件而是被编码成了二进制文件,所以我们并不能直接使用 less、cat、more 这样的工具来查看,这两个日志文件是 wtmp,lastlog。

我们查看的方法是使用 last 与 lastlog 工具来提取其中的信息:
image.png

否则会乱码:
image.png

应用日志

应用日志主要是我们装的第三方应用所产生的日志如 tomcat7apache2 等等。

产生日志

有两种产生日志的方式:
image.png
但由于syslog 已经年老体衰跟不上时代的需求,所以他被 rsyslog 所代替。

rsyslog 的全称是 rocket-fast system for log,它提供了高性能,高安全功能和模块化设计。rsyslog 能够接受各种各样的来源,将其输入,输出的结果到不同的目的地。rsyslog 可以提供超过每秒一百万条消息给目标文件。

如果使用的linux 版本没有rsyslog,可以手动下载:

sudo apt-get update
sudo apt-get install -y rsyslog
sudo service rsyslog start
ps aux | grep syslog

配置日志文件

rsyslog 的配置文件有两个,

  • 一个是 /etc/rsyslog.conf
  • 一个是 /etc/rsyslog.d/50-default.conf

image.png
第一个主要是配置的环境,也就是 rsyslog 加载什么模块,文件的所属者等。

image.png
而第二个则主要是配置的Filter Conditions。

rsyslog 工作流

image.png
rsyslog 主要是由 Input、Output、Parser 这样三个模块构成的,并且数据的走向为:首先通过 Input module 来收集消息,然后将得到的消息传给 Parser module,通过分析模块的层层处理,将真正需要的消息传给 Output module,然后便输出至日志文件中。

架构

image.png
输入接口有以下:

接口名 作用
im3195 RFC3195 Input Module
imfile Text File Input Module
imgssapi GSSAPI Syslog Input Module
imjournal Systemd Journal Input Module
imklog Kernel Log Input Module
imkmsg /dev/kmsg Log Input Module
impstats Generate Periodic Statistics of Internal Counters
imptcp Plain TCP Syslog
imrelp RELP Input Module
imsolaris Solaris Input Module
imtcp TCP Syslog Input Module
imudp UDP Syslog Input Module
imuxsock Unix Socket Input

配置语法

在配置中 rsyslog 支持三种配置语法格式:

  • sysklogd
  • legacy rsyslog
  • RainerScript

写入日志

与日志相关的还有一个还有常用的命令 logger,logger 是一个 shell 命令接口,可以通过该接口使用 Syslog 的系统日志模块,还可以从命令行直接向系统日志文件写入信息。

#首先将syslog启动起来
sudo service rsyslog start

#向 syslog 写入数据
ping 127.0.0.1 | logger -it logger_test -p local3.notice &

#查看是否有数据写入
sudo tail -f /var/log/syslog

image.png

转储的日志

如果就是不断的将日志写入文件,那每天都有成百上千条日志被写入文件中,每天都会有数十兆甚至更多的日志信息被写入文件中,这样计算机的存储空间就会被这些日志白白填满了。

logratate 工具闪亮登场了。

logrotate 程序是一个日志文件管理工具。用来把旧的日志文件删除,并创建新的日志文件。我们可以根据日志文件的大小,也可以根据其天数来切割日志、管理日志,这个过程又叫做“转储”。

logrotate 是基于 CRON 来运行的,其脚本是 /etc/cron.daily/logrotate;同时我们可以在 /etc/logrotate 中找到其配置文件:

cat /etc/logrotate.conf

image.png
其中的具体含义:

# see "man logrotate" for details  //可以查看帮助文档
# rotate log files weekly
weekly                             //设置每周转储一次(daily、weekly、monthly当然可以使用这些参数每天、星期,月 )
# 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                          //通过gzip压缩方式转储(nocompress可以不压缩)
# 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                       //最多转储一次
}