Linux日志服务初识

1,238 阅读7分钟
本文主要从日志分类、分割日志和日志收集等几个方面介绍了和服务器日志有关的工具。
上篇文章回顾:阵列卡缓存电池充放电问题详解


对经常在服务器上面工作的人来说,日志的阅读和利用往往是非常重要的。偶尔出现了问题或解决之后,查看相关日志往往是定位问题原因的主要方法。因此,让我们来了解一下和服务器日志有关的工具。

1、/var/log 下的日志分类

首先来看看这个目录,下面存放大部分的系统日志,以下是比较常用的几个日志文件:
/var/log/message :核心系统日志文件,包含系统启动引导,系统运行状态和大部分错误信息等都会记录到这个文件,因此这个日志是故障诊断的首要查看对象。
/var/log/dmesg:核心启动日志,系统启动时会在屏幕显示与硬件有关的信息,这些信息会保存在这个文件里面。
/var/log/secure:验证,授权和安全日志,常见的用户登录验证相关日志就存放在这里。
/var/log/spooler:UUCP和news设备相关的日志信息
/var/log/cron:与定时任务相关的日志信息
/var/log/maillog:记录每一个发送至系统或者从系统发出的邮件活动
/var/log/boot:系统引导日志

2、logrotate 分割日志工具

目前大部分 linux 系统都会默认安装有 logrotate,日志分割工具。而这个工具的功能就是大家在 /var/log/ 目录下面看到的形如 messages-20181028 样式的日志,在使用 logrotate 进行配置后就可以按照时间或者大小对日志进行分割存储。如果对 /etc/logrotate.conf 文件和 /etc/logrotate.d/目录没有改动,可以看到 /etc/logrotate.conf 默认配置:

/etc/logrotate.conf

# 按周轮训
weekly
# 保留4周日志备份
rotate 4# 标记分割日志并创建当前日志
create
# 使用时间作为后缀
dateext
# 对 logrotate.d 目录下面的日志种类使用
include /etc/logrotate.d
# 对于wtmp 和 btmp 日志处理在这里进行设置
/var/log/wtmp {
    monthly
    create 0664 root utmp
 minsize 1M
    rotate 1
}
/var/log/btmp {
    missingok
    monthly
    create 0600 root utmp
    rotate 1
}

那么在 /etc/logrotate.d/ 目录下面。我们来看比较典型的两类日志,按时间和大小处理。

/etc/logrotate.d/syslog

/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
    missingok # 忽略文件相关错误
    sharedscripts # 所有指令完成之后,执行script中内容
    postrotate
  /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true # 对每次的轮循处理后,rsyslog重新读取配置运行
    endscript
}

/etc/logrotate.d/syslog 对日志的处理,是继承了 /etc/logrotate.conf 里面的配置,因此就会对日志 cron,maillog,messages,secure,spooler 进行按周分割,并保留 4 周内的分割日志,久远的日志将进行删除。

/etc/logrotate.d/yum

/var/log/yum.log {
    missingok
    notifempty # 日志为空不轮循
    size 30k
    yearly
    create 0600 root root
}

而在 /etc/logrotate.d/yum 里面可以看到指定了 size 和 yearly,因此对于 yum 类日志将会按日志大小进行年分割。如果日志达到设定的大小,那么将会在现有的日志上面进行分割。而一年内如果为达到设定大小,则按年进行分割。

此外,如果你在服务器上面安装了mysql,httpd 或者其他应用服务后,logrotate 它会自动在 /etc/logrotate.d/ 下面创建对应的日志处理方式,基本是继承 logrotate.conf。

/etc/logrotate.d/httpd

/var/log/httpd/*log {
    missingok
    notifempty
    sharedscripts
    delaycompress
    postrotate
        /bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true
    endscript
}

因此,不论是你服务器上面系统日志还是应用日志,面对日志量太大的问题,都可以使用 logrotate 进行设置处理。

3、rsyslog 日志收集

rsyslog 是一个可以进行日志转发和收集的工具,利用它可以拥有一台日志收集服务器,从而可以减少客户端日志的压力,对于相关日志的统一也是非常有用的,同时还有相应的前端展示工具来进行日志的查看统计。

rsyslog 不仅可以进行系统日志的收集,同时也支持应用日志的收集,只不过如果收集应用自定义日志的话,需要在客户端机器上面进行设置。因我们业务种类较多,不可能在初始化装机时在业务服务器上面配置相同的应用日志服务。因此,业务可以根据自己的需求,进行相关配置。下面让我们看一下当前我们使用的rsyslog服务情况。

ps aux | grep rsyslog 查看服务是否正常运行

root     14468  0.0  3.6 664592 69584 ?        Ssl  Nov06   0:31 /usr/sbin/rsyslogd -n

rsyslog 的配置文件为 /etc/rsyslog.conf,当我们想把一台服务器变成rsyslog日志收集服务器的时候,对这个配置文件进行修改即可。

在服务端配置有以下两个地方需要进行修改和配置:

/etc/rsyslog.conf

开启udp日志传输模式
$ModLoad imudp
$UDPServerRun 514

设置日志收集路径,包括客户端机器名与日志类型
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$template RemoteLogs,"/home/syslogs/%HOSTNAME%/%PROGRAMNAME%.log"
*.*  ?RemoteLogs
& ~

而在业务机器上面,只需要在配置的末尾,开启日志转发即可:

/etc/rsyslog.conf

#*.*                @10.21.109.2
#authpriv.*              @@10.101.10.199
*.*             @syslog.sys.srv

@ 表示使用 UDP 进行转发,正好对应服务端开启了 UDP 收集方式。

在经过上面的配置之后,重启 systemctl restart rsyslog.service ,这样一个日志收集服务就成功建立了。我们可以看一下在rsyslog服务器上面收集到的日志是什么样子:

日志收集

[root@amazing00 amazing01]# pwd
/home/syslogs/amazing01 # 可以看到这是在配置里面设置好的路径,转发过来的日志信息会以客户端的主机名进行识别和收集
[root@amazing00 amazing01]# ll
total 5484
-rw------- 1 root root    8651 Nov 15 03:24 anacron.log
-rw------- 1 root root     284 Nov 13 15:56 auditd.log
-rw------- 1 root root  126201 Nov 15 15:20 CROND.log
-rw------- 1 root root     245 Nov  7 17:56 groupadd.log
-rw------- 1 root root      96 Nov  6 10:18 kernel.log
-rw------- 1 root root      90 Nov  7 17:37 passwd.log
-rw------- 1 root root    1980 Nov  7 17:57 polkitd.log
-rw------- 1 root root   10633 Nov  8 10:14 root.log
-rw------- 1 root root     434 Nov 12 03:16 rsyslogd.log
-rw------- 1 root root   39812 Nov 15 15:01 run-parts(.log
-rw------- 1 root root 4763118 Nov 15 05:42 sshd.log
-rw------- 1 root root  606036 Nov 15 15:20 systemd.log
-rw------- 1 root root    1343 Nov  8 13:53 systemd-logind.log
-rw------- 1 root root     313 Nov  7 17:56 useradd.log
-rw------- 1 root root     874 Nov  7 17:57 yum.log

从这台amazing01机器上面转发过来的日志,我们可以看到和正常服务器/var/log下面的日志文件名是不一样的。这里按照每一条系统日志的种类进行了分类收集,十分的清楚和方便查询。

最后,rsyslog 还有一个相应的前端日志展示工具 loganalyzer,其利用的工具有 httpd,php和mysql。

这个前端工具适用于中小型服务器集群,对于我们当前的rsyslog服务收集的机器日志非常多,考虑对rsyslog服务器的压力,所以不建议采用这个前端展示工具。

4、日志相关的展望

对于日志的分析和利用,是运维工作需要经常接触的,有时候可以考虑用日志做一些功能,比如监控错误日志产生,根据日志预测等等,那么可能会对工作起到一定的帮助效果,减少日常重复的运维工作。


本文首发于公众号“小米运维”,点击查看原文