一、日志简介

1、日志相关服务介绍

在 CentOS 6.x 中日志服务使用 rsyslogd 服务,rsyslogd 具有以下特点:

  • 基于 TCP 网络协议传输日志信息
  • 更安全的网络传输方式
  • 有日志消息的及时分析框架
  • 后台数据库
  • 配置文件中可以写简单的逻辑判断
  • 与旧版本日志服务 syslog 配置文件相兼容
2、常见日志文件
/var/log/cron    #记录了系统定时任务相关的日志
/var/log/cups/   #记录打印信息的日志
/var/log/dmesg   #记录了系统在开机时内核自检的信息。也可以使用 dmesg 命令直接查看内核自检信息
/var/log/btmp    #记录错误登录的日志。这个文件是二进制文件,不能直接使用vim查看, 而要使用 lastb 命令查看
/var/log/lastlog #记录系统中所有用户最后一次的登录时间的日志。这个文件也是二进制文件,不能直接使用vim查看,而要使用 lastlog 命令查看
/var/log/mailog  #记录邮件信息。
/var/log/message #记录系统重要信息的日志。这个日志文件中会记录 Linux 系统的绝大多数重要信息,如果系统出现问题时,首先要检查的就应该是这个日志文件。
/var/log/secure  #记录验证和授权方面的信息,只要涉及账户和密码的程序都会记录。 比如说系统的登录,ssh 的登录,su 切换用户,sudo 授权,甚至添加用户和修改用户密码都会记录在这个日志文件中。
/var/log/wtmp    #永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机事件。同样这个文件也是一个二进制文件,不能直接使用vim查看,而需要使用 last 命令来查看
/var/run/utmp    #记录当前已经登录的用户的信息。这个文件会随着用户的登录和注销而不断变化,只记录当前登录用户的信息。不能直接使用vim查看,而要使用 w,who,users 等命令来查询

除了系统默认的日志之外,采用 RPM 方式安装的系统服务也会默认把日志记录在/var/log/目录 中(源码包安装的服务日志是在源码包指定目录中)。不过这些日志不是由 rsyslogd 服务来记录和管理的,而是各个服务使用自己的日志管理文档来记录自身日志,一些常见rpm包安装的服务,日志位置:

/var/log/httpd/ RPM 包安装的 apache 服务的默认日志目录
/var/log/mail/ RPM 包安装的邮件服务的额外日志目录
/var/log/samba/ RPM 包安装的 samba 服务的日志目录
/var/log/sssd/ 守护进程安全服务目录

二、日志服务 rsyslogd

1、日志文件格式 只要是由日志服务 rsyslogd 记录的日志文件,他们的格式是一样的。基本日志格式包含以下四列:
  • 事件产生的时间
  • 发生事件的服务器的主机名
  • 产生事件的服务名或程序名
  • 事件的具体信息。
2、rsyslogd 服务的配置文件
1.1)、/etc/rsyslog.conf 配置文件格式
# rsyslog v5 configuration file

# For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html
# If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html

#### MODULES ####

$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
# 加载 imuxsock 模块,为本地系统登录提供支持

$ModLoad imklog   # provides kernel logging support (previously done by rklogd)
# 加载 imklog 模块,为内核登录提供支持

#$ModLoad immark  # provides --MARK-- message capability
# 加载 immark 模块,提供标记信息的能力

# Provides UDP syslog reception
#$ModLoad imudp
#$UDPServerRun 514
# 加载 UPD 模块,允许使用 UDP 的 514 端口接收采用 UDP 协议转发的日志

# Provides TCP syslog reception
#$ModLoad imtcp
#$InputTCPServerRun 514
# 加载 TCP 模块,允许使用 TCP 的 514 端口接收采用 TCP 协议转发的日志

#### GLOBAL DIRECTIVES ####
#全局配置

# Use default timestamp format
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
# 定义日志的时间使用默认的时间戳格式

# File syncing capability is disabled by default. This feature is usually not required,
# not useful and an extreme performance hit
#$ActionFileEnableSync on
# 文件同步功能。默认没有开启

# Include all config files in /etc/rsyslog.d/
$IncludeConfig /etc/rsyslog.d/*.conf
# 子配置文件也同时生效

服务名+连接符号+日志等级                       日志位置
authpriv.*                                /var/log/secure
#认证服务所有等级的日志都记录在/var/log/secure  文件中

mail.*                                                  -/var/log/maillog
#邮件服务所有等级日志,保存到 /varlog/maillog              -  代表先保存到内存中。

*.info;mail.none;authpriv.none;cron.none                /var/log/messages
#所有能被rsyslog服务管理日志的服务的info等级日志,认证服务none级别日志,定时任务none等级日志都记录在 /var/log/messages文件中
。。。。。。
1.2)、连接符号说明
“.”代表只要比后面的等级高的(包含该等级)日志都记录下来。比如:“cron.info” 代表 cron 服务产生的日志,只要日志等级大于等于 info 级别,就记录
“.=”代表只记录所需等级的日志,其他等级的都不记录。比如:“*.=emerg”代表任 何日志服务产生的日志,只要等级是 emerg 等级就记录。这种用法及少见,了解就好
“.!”代表不等于,也就是除了该等级的日志外,其他等级的日志都记录。 
1.3)、日志等级说明
none                  #忽略日志
debug(LOG_DEBUG)    #一般的调试信息说明
info(LOG_INFO)      #基本的通知信息
notice(LOG_NOTICE)  #普通信息,但是有一定的重要性
warning(LOG_WARNING)#警告信息,但是还不回影响到服务或系统的运行
err(LOG_ERR)        #错误信息,一般达到 err 等级的信息以及可以影响到服务或系统的运行了
crit(LOG_CRIT)      #临界状况信息,比 err 等级还要严重
alert(LOG_ALERT)    #警告状态信息,比 crit 还要严重。必须立即采取行动
emerg(LOG_EMERG)    #疼痛等级信息,系统已经无法使用了
* 代表所有日志等级,   #比如:“authpriv.*”代表 authpriv 认证信息服务产生的日志,所有的日志等级都记录
1.4)、日志保存位置

日志记录位置就是当前日志输出到哪个日志文件中保存,当然也可以把日志输出到打印机打印, 或者输出到远程日志服务器上(当然日志服务器要允许接收才行)。

1、日志文件的绝对路径。这是最常见的日志保存方法,如“/var/log/secure”就是保存系统验证和授权信息日志的。
2、系统设备文件。如“/dev/lp0”代表第一台打印机,如果日志保存位置是打印机设备的话,当有日志时就会在打印机打印。
3、转发给远程主机。因为可以选择使用 TCP 协议和 UDP 协议传输日志信息,所以有两种发送格式。
    3-1、如使用“@100.100.100.102:514”,就会把日志内容使用 UDP 协议发送到 100.100.100.102 的 UDP 514 端口上。
    3-2、如果使用“@@192.168.0.210:514”就会把日志内容 使用 TCP 协议发送到 100.100.100.102 的 TCP 514 端口上,其中 514 是日志服务默认端口。 当然只要
         100.100.100.102 同意接收此日志,就可以把日志内容保存在日志服务器上。
4、用户名。如“root”,就会把日志发送给 root 用户,当然 root 要在在线,否则就收不到日志信息了。发送日志给用户时,可以使用“*”代表发送给所有在线用户,如“mail.*  *”就会把 mail 服务产生的所有级别的日志发送给所有在线用户。如果需要把日志发送给多个在线用户,用户名之间用“,”分隔。
5、忽略或丢弃日志。如果接受日志的对象是“~”,代表这个日志不会记录,而被直接丢弃。如“local3.*  ~”代表忽略 local3 服务类型所有的日志都不记录。
3、能被 rsyslogd 服务管理日志的服务如下
auth(LOG_AUTH)              #安全和认证相关消息(不推荐使用 authpriv 替代)
authpriv(LOG_AUTHPRIV)      #安全和认证相关消息(私有的)
cron(LOG_CRON)              #系统定时任务 cront 和 at 产生的日志
daemon(LOG_DAEMON)          #和各个守护进程相关的日志
ftp(LOG_FTP) ftp            #守护进程产生的日志
kern(LOG_KERN)              #内核产生的日志(不是用户进程产生的)
local0-local7(LOG_LOCAL0-7) #为本地使用预留的服务
lpr(LOG_LPR)                #打印产生的日志
mail(LOG_MAIL)              #邮件收发信息
news(LOG_NEWS)              #与新闻服务器相关的日志
syslog(LOG_SYSLOG)          #有 syslogd 服务产生的日志信息(虽然服务名称已经改为 rsyslogd,但是很多配置都还是沿用了 syslogd 的,这里并没有修改服务名)。
user(LOG_USER)      #用户等级类别的日志信息 uucp(LOG_UUCP) uucp 子系统的日志信息,uucp 是早期 linux 系统进行数 据传递的协议,后来也常用在新闻组服务中。
4、自定义日志
[root@centos ~]# vim /etc/rsyslog.conf

#添加自己的日志配置
*.*                          /root/os.log   # 把所有服务的所有等级日志保存在 /root/os.log文件中
#重启服务
[root@centos ~]# service rsyslog restart
Shutting down system logger:                               [  OK  ]
Starting system logger:                                    [  OK  ]

# 查看/root/目录下de os.log 日志文件
[root@centos ~]# ll
-rw-------  1 root root   663 Dec 17 09:47 os.log
12-20 18:27