前言
日志是一个系统管理员,一个运维人员,甚至是开发人员不可或缺的东西,系统用久了偶尔也会出现一些错误,我们需要日志来给系统排错,在一些网络应用服务不能正常工作的时候,我们需要用日志来做问题定位,日志还是过往时间的记录本,我们可以通过它知道我们是否被不明用户登录过等等。
在 Linux 中大部分的发行版都内置使用 syslog 系统日志,而常见的日志一般存放在 /var/log
中。
常见日志类型
系统日志
系统日志主要是存放系统内置程序或系统内核之类的日志信息如 alternatives.log
、btmp
等等。
日志名称 | 记录信息 |
---|---|
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
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
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
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
我们可以从中得到的信息有日期与 ip 地址的来源以及的用户与工具。
安装有关的日志
在 /var/log/apt
文件夹中有两个日志文件 history.log
与 term.log
,两个日志文件的区别在于 history.log
主要记录了进行了哪个操作,相关的依赖有哪些,而 term.log
则是较为具体的一些操作,主要就是下载包,打开包,安装包等等的细节操作。
尝试清空日志后,再进行安装:
sudo apt-get install git
特殊日志
其他的日志格式也都类似于之前我们所查看的日志,主要便是时间,操作。而这其中有两个比较特殊的日志,其查看的方式比较与众不同,因为这两个日志并不是 ASCII 文件而是被编码成了二进制文件,所以我们并不能直接使用 less、cat、more 这样的工具来查看,这两个日志文件是 wtmp,lastlog。
我们查看的方法是使用 last 与 lastlog 工具来提取其中的信息:
否则会乱码:
应用日志
应用日志主要是我们装的第三方应用所产生的日志如 tomcat7
、apache2
等等。
产生日志
有两种产生日志的方式:
但由于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
第一个主要是配置的环境,也就是 rsyslog 加载什么模块,文件的所属者等。
而第二个则主要是配置的Filter Conditions。
rsyslog 工作流
rsyslog 主要是由 Input、Output、Parser 这样三个模块构成的,并且数据的走向为:首先通过 Input module 来收集消息,然后将得到的消息传给 Parser module,通过分析模块的层层处理,将真正需要的消息传给 Output module,然后便输出至日志文件中。
架构
输入接口有以下:
接口名 | 作用 |
---|---|
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
转储的日志
如果就是不断的将日志写入文件,那每天都有成百上千条日志被写入文件中,每天都会有数十兆甚至更多的日志信息被写入文件中,这样计算机的存储空间就会被这些日志白白填满了。
logratate
工具闪亮登场了。
logrotate 程序是一个日志文件管理工具。用来把旧的日志文件删除,并创建新的日志文件。我们可以根据日志文件的大小,也可以根据其天数来切割日志、管理日志,这个过程又叫做“转储”。
logrotate 是基于 CRON 来运行的,其脚本是 /etc/cron.daily/logrotate;同时我们可以在 /etc/logrotate
中找到其配置文件:
cat /etc/logrotate.conf
其中的具体含义:
# 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 //最多转储一次
}