11.1. 日志介绍¶
日志主要记录时间、地点、任务和事件。
11.1.1. 日志基础概念¶
11.1.1.1. 日志的提供程序¶
系统 |
包 |
提供程序 |
描述 |
---|---|---|---|
redhat5 |
sysklogd |
syslogd,klogd |
syslog记录应用,klogd记录内核 |
centos6 |
rsyslog |
rsyslogd |
兼容sysklogd,多线程,支持mysql数据库 |
centos7 |
rsyslog |
同上 |
同上 |
11.1.1.2. 日志的设施¶
设施 |
描述 |
---|---|
LOG_AUTH |
安全和认证(弃用) |
LOG_AUTHPRIV |
安全和认证 |
LOG_CRON |
计划任务的,包含cron,at |
LOG_DAEMON |
系统守护 |
LOG_FTP |
ftp |
LOG_KERN |
内核 |
LOG_LOCAL[0-7] |
自定义 |
LOG_LPR |
打印机 |
LOG_MAIL |
邮件 |
LOG_NEWS |
新闻 |
LOG_SYSLOG |
syslogd |
LOG_USER |
用户 |
LOG_UUCP |
unix to unix cp |
11.1.1.3. 日志级别¶
级别 |
描述 |
---|---|
LOG_EMERG |
系统恐慌 |
LOG_ALERT |
必须立即采取措施解决 |
LOG_CRIT |
严格问题 |
LOG_ERR |
错误 |
LOG_WARNING |
警告 |
LOG_NOTICE |
正常通知 |
LOG_INFO |
普通信息 |
LOG_DEBUG |
调试级别 |
11.1.2. rsyslog配置文件¶
rsyslog的配置文件主要包括三个大的片段
- 全局片段
全局设置,加载模块。
- 模板片段
运行你指定日志消息的格式
- 输出通道
给通道定义个规则,在输出上设置
- 规则
规则有选择器和动作构成
11.1.2.1. 模块说明¶
模块名 |
功能 |
---|---|
omsnmp |
snmp陷阱输出模块 |
ommysql |
mysql输出模块 |
omrelp |
可靠的relp协议输出模块 |
ompgsql |
postgresql输出模块 |
omlibdbi |
通用数据库输出模块 |
imfile |
文件输入模块 |
imudp |
udp syslog的输入插件 |
imtcp |
tcp syslog的输入插件 |
imrelp |
可靠的relp协议输入模块 |
impgsapi |
tcp和gss-enable的输入插件 |
immark |
支持掩码消息 |
imklog |
内核日志 |
imuxsock |
unix套接字 |
11.1.2.2. 输出位置说明¶
输出位置 |
样例 |
描述 |
---|---|---|
文件 |
/var/log/sample.log |
直接输出到指定的文件去 |
管道 |
command
|
直接重定向到某个命令 |
终端 |
/dev/console |
直接输出的指定的登陆终端 |
远程主机 |
@192.168.0.1 |
直接输出到远程指定主机 |
用户列表 |
root,zhaojiedi1992 |
直接输出到2个用户对应的登陆终端 |
所有用户 |
直接给所有登陆用户发送 |
|
数据库表 |
192.168.0.1,dbname,username,password |
连接指定主机的数据库表 |
丢弃 |
~ |
丢弃日志,不记录 |
输出通道 |
||
shell执行 |
^execute_file; template |
模板作为字一个参数去执行脚本 |
11.1.2.3. 默认配置位置的日志记录规则说明¶
[root@102 ~]$vim /etc/rsyslog.conf
#记录所有设置的info级别的信息,但是排除mail,authpriv,cron的信息。
*.info;mail.none;authpriv.none;cron.none /var/log/messages
# 安全日志的所有级别的信息都记录到本机的/var/log/secure文件中去
authpriv.* /var/log/secure
# 记录所有邮件的信息到/var/log/maillog中去,“-”代表异步写入。
mail.* -/var/log/maillog
# 记录计划任务(cron,at)的所有级别信息到/var/log/cron文件中去
cron.* /var/log/cron
# 不管是那个设施产生的emerg级别的信息,发送给登陆的所有用户
*.emerg :omusrmsg:*
# unix to unix cp和新闻的严格级别记录到/var/log/spooler
uucp,news.crit /var/log/spooler
# 启动信息记录到/var/log/boot.log,这个local是自定义的,系统已经占用一个
local7.* /var/log/boot.log
11.1.3. 样例配置¶
11.1.3.1. 修改sshd的所有日志信息到到单独的文件¶
[root@102 ~]$vim /etc/rsyslog.d/sshd.conf
[root@102 ~]$cat /etc/rsyslog.d/sshd.conf
local1.* /var/log/sshd.log
[root@102 ~]$vim /etc/ssh/sshd_config
# 修改如下2行内容
SyslogFacility LOCAL1
LogLevel INFO
[root@102 ~]$systemctl restart sshd
[root@102 ~]$systemctl restart rsyslog
[root@102 ~]$ssh localhost
Last login: Thu Feb 1 09:41:16 2018 from localhost
Welcom you this system
[root@102 ~]$cat /var/log/sshd.log
Feb 1 09:42:14 102 sshd[35620]: Accepted publickey for root from ::1 port 39986 ssh2: RSA SHA256:i9zugMHEhLi77fPoR1gpco04UbuNtRcBJZkb6lLSCt4
11.1.3.2. 修改sshd的所有日志信息到远程主机¶
# 这里涉及到2台主机,主要思路先启用服务器端的监听,然后在客户端配置要配置要推送地址
[root@centos-158 ~]# vim /etc/rsyslog.conf
# 解注释如下4行
$ModLoad imudp
$UDPServerRun 514
$ModLoad imtcp
$InputTCPServerRun 514
[root@102 ~]$vim /etc/rsyslog.d/sshd.conf
[root@102 ~]$cat /etc/rsyslog.d/sshd.conf
local1.* /var/log/sshd.log
[root@102 ~]$vim /etc/ssh/sshd_config
# 修改如下2行内容
SyslogFacility LOCAL1
LogLevel INFO
# 重启服务
[root@102 ~]$systemctl restart sshd
[root@102 ~]$systemctl restart rsyslog
# 重启服务并查看监听
[root@centos-158 ~]# service rsyslog restart
[root@centos-158 ~]# ss -tunl |grep 514
udp UNCONN 0 0 *:514 *:*
udp UNCONN 0 0 :::514 :::*
tcp LISTEN 0 25 *:514 *:*
tcp LISTEN 0 25 :::514 :::*
# 接下来是客户端的配置
[root@102 ~]$vim /etc/rsyslog.d/sshd.conf
[root@102 ~]$cat /etc/rsyslog.d/sshd.conf
local1.* @172.19.104.175
[root@102 ~]$vim /etc/ssh/sshd_config
# 修改如下2行内容
SyslogFacility LOCAL1
LogLevel INFO
[root@102 ~]$systemctl restart sshd
[root@102 ~]$systemctl restart rsyslog
# 102客户端尝试登陆下
[root@102 ~]$ssh zhao@localhost
zhao@localhost's password:
jlsdfjslfs
Permission denied, please try again.
zhao@localhost's password:
Permission denied, please try again.
zhao@localhost's password:
Permission denied (publickey,password).
# 服务端查看日志是否记录了
[root@centos-158 ~]# tail /var/log/sshd.log
Feb 1 10:24:14 102 sshd[37196]: Failed password for zhao from ::1 port 40016 ssh2
Feb 1 10:24:15 102 sshd[37196]: Failed password for zhao from ::1 port 40016 ssh2
Feb 1 10:24:15 102 sshd[37196]: Failed password for zhao from ::1 port 40016 ssh2
Feb 1 10:24:15 102 sshd[37196]: Connection closed by ::1 port 40016 [preauth]
Note
如果网络不稳定,可以使用@@替换@,@@使用的tcp协议,@使用的udp协议。
11.1.3.3. 常见日志文件¶
文件 |
功能 |
描述 |
---|---|---|
/var/log/message |
包含大部分的日志信息 |
|
/var/log/btmp |
失败登陆的日志信息 |
使用lastb命令查看 |
/var/log/wtpm |
成功登陆的日志信息 |
使用last命令查看 |
/var/log/lastlog |
每个用户最近一次登陆的日志信息 |
使用lastlog命令查看 |
/var/log/dmesg |
系统引导过程中的日志信息 |
使用dmesg命令查看 |
/var/log/anaconda |
anaconada的日志信息 |
11.1.3.4. journalctl命令使用¶
systemd统一管理所有unit的启动日志,值使用journalctl就可以管理日志。
- -a
显示所有字段
- -f
最新的信息
- -e
跳到最后一页
- -n
显示最近的几行
- -r
反转输出,新的放前面
- -o
指定输出格式
- --utc
时间为utc时间
- -k
显示内核信息
- -p
设置level
- -S
开始时间
- --since
开始时间,日志格式’2012-10-30 18:17:16’
- -U
开始时间
- --until
开始时间,日志格式’2012-10-30 18:17:16’
- -F
指定的字段
- --disk-usage
当前日志占用系统空间情况
- --no-pager
不分页
- -f
实时滚动显示
- -u
指定服务进程
11.1.3.5. 样例使用¶
# 查看所有日志(默认情况下 ,只保存本次启动的日志)
journalctl
# 查看内核日志(不显示应用日志)
journalctl -k
# 查看系统本次启动的日志
journalctl -b
journalctl -b -0
# 查看上一次启动的日志(需更改设置)
journalctl -b -1
# 查看指定时间的日志
journalctl --since="2017-10-30 18:10:30"
journalctl --since "20 min ago"
journalctl --since yesterday
journalctl --since "2017-01-10" --until "2017-01-11 03:00"
journalctl --since 09:00 --until "1 hour ago"
# 显示尾部的最新10行日志
journalctl -n
# 显示尾部指定行数的日志
journalctl -n 20
# 实时滚动显示最新日志
journalctl -f
日志管理journalctl
# 查看指定服务的日志
journalctl /usr/lib/systemd/systemd
# 查看指定进程的日志
journalctl _PID=1
# 查看某个路径的脚本的日志
journalctl /usr/bin/bash
# 查看指定用户的日志
journalctl _UID=33 --since today
# 查看某个 Unit 的日志
journalctl -u nginx.service
journalctl -u nginx.service --since today
# 实时滚动显示某个 Unit 的最新日志
journalctl -u nginx.service -f
# 合并显示多个 Unit 的日志
journalctl -u nginx.service -u php-fpm.service --since today
# 以 JSON 格式(单行)输出
journalctl -b -u nginx.service -o json
# 以 JSON 格式(多行)输出,可读性更好
journalctl -b -u nginx.serviceqq -o json-pretty
# 显示日志占据的硬盘空间
journalctl --disk-usage
# 指定日志文件占据的最大空间
journalctl --vacuum-size=1G
# 指定日志文件保存多久
journalctl --vacuum-time=1years