Rsyslog系统日志管理,解决/var/log/message文件过大问题

messages 日志是核心系统日志文件。它包含了系统启动时的引导消息,以及系统运行时的其他状态消息。IO 错误、网络错误和其他系统错误都会记录到这个文件中。其他信息,比如某个人的身份切换为 root,也在这里列出。如果服务正在运行,比如 DHCP 服务器,您可以在 messages 文件中观察它的活动。通常,/var/log/messages 是您在做故障诊断时首先要查看的文件。


/var/log/messages文件中存放的就是系统的日志信息,当内核程序调试时,printk语句所产生的信息显示不出来的时候,就使用cat /var/log/messages文件的方法,查看所打印出的信息.

PS.要查看文件的最后几行,使用tai命令,tail /var/log/messages


————————————————
版权声明:本文为CSDN博主「让爱远行2015」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u011065164/article/details/75007758

打开message日志系统

高版本ubuntu系统默认没有 /var/log/messages,因为在 /etc/rsyslog.d/50-default.conf 文件中,将其注释掉了。如下图

Rsyslog系统日志管理,解决/var/log/message文件过大问题_第1张图片

所以需修改该配置文件,将注释放开。

Rsyslog系统日志管理,解决/var/log/message文件过大问题_第2张图片

然后重启rsyslog服务即可。

systemctl restart rsyslog.service

进入 /var/log/ 目录下就可以看到 messages 文件


作者:TASK_RUNNING
链接:https://www.jianshu.com/p/75d8da039815
来源:简书

目录

Rsyslog系统日志管理

一、常见的系统日志

二、日志管理程序

三、日志级别

四、日志配置

五、远程日志管理

六、日志轮转

Rsyslog系统日志管理
课程目标

了解日志的级别与作用
掌握 rsyslog 服务的本地日志和远程日志的管理
能够使用 logrotate 程序根据需求对日志进行轮转
一、常见的系统日志
日志格式:文本日志/二进制日志/数据库日志
默认的相关日志文件:
/var/log/boot.log    系统引导日志,记录开机启动信息
/var/log/dmesg        核心的启动日志
/var/log/message    系统的日志文件
/var/log/maillog    邮件服务的日志
/var/log/xferlog    ftp服务的日志
/var/log/secure        网络连接及系统登录的安全信息
/var/log/cron        定时任务的日志
/var/log/wtmp        记录所有的登入和登出    last -f 查看
/var/log/btmp        记录失败的登入尝试
二、日志管理程序
在RHEL6中,syslogd已经被rsyslog取代,它可以将日志写入数据库,并可以利用模板和插件控制输入输出。
rsyslog程序管理本地和远程日志
安装软件
根据需求修改配置文件
启动服务
测试验证
三、日志级别
# man syslog
日志信息分为以下级别,从上到下级别一次降低
    none    none不是一个等级,它表示不记录服务的所有信息
0     emerg    系统不可用
1    alert    特别留意的报警信息
2    crit    非常严重的状况
3    err        错误信息    
4    warning    警告信息
5    notice    稍微需要注意的信息
6    info    正常信息
7    debug    调试信息,开发人员使用
 
四、日志配置
[root@server ~]# rpm -q rsyslog
rsyslog-5.8.10-8.el6.x86_64
[root@server ~]# rpm -ql rsyslog
/etc/logrotate.d/syslog
/etc/pki/rsyslog    
/etc/rc.d/init.d/rsyslog        //启动脚本
/etc/rsyslog.conf        //主配置文件
/etc/rsyslog.d            //子配置文件
/etc/sysconfig/rsyslog
/sbin/rsyslogd
/usr/share/man/man5/rsyslog.conf.5.gz
/usr/share/man/man8/rsyslogd.8.gz
 
[root@server ~]# grep -v ^# /etc/rsyslog.conf 
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imklog   # provides kernel logging support (previously done by rklogd)
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$IncludeConfig /etc/rsyslog.d/*.conf
 
*.info;mail.none;authpriv.none;cron.none                /var/log/messages
 
authpriv.*                                              /var/log/secure
 
mail.*                                                  -/var/log/maillog
 
 
cron.*                                                  /var/log/cron
 
*.emerg                                                 *
 
uucp,news.crit                                          /var/log/spooler
 
local7.*                                                /var/log/boot.log
 
$template SpiceTmpl,"%TIMESTAMP%.%TIMESTAMP:::date-subseconds% %syslogtag% %syslogseverity-text%:%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n"
 
:programname, startswith, "spice-vdagent"    /var/log/spice-vdagent.log;SpiceTmpl
 
1.日志定义相关符号
配置文件中常见的表示符合
.    用来分隔服务和级别
*    任何服务,或者任何级别
=     有等号表示等于某一级别,没有等号表示大于或者等于某一级别
!    排除操作,前面有相同服务的表达式,这个操作才有意义
        代表从前面表达式所包含的内容中排除某些内容
;    用于分隔不同的    服务,级别,组合
,    用于分隔不同服务
-   用于指定目标文件时,代表异步写入
 
举例说明
mail.=info
mail.info        mail服务大于等于info级别的日志
mail.info;cron.=info    /var/log/test.log
mail,cron.err
cron.=warning
mail,cron.info
 
cron.info;cron.!=err    012456
0123456        0124567
cron.info;cron.!err        456
0123456        4567
 
特别说明:
 The facility is one of the following keywords: auth,
       authpriv, cron, daemon, kern, lpr, mail, mark, news,
       security  (same  as  auth),  syslog,  user, uucp and
       local0 through local7.(设备载体)
log facility 设备    设施:用来记录一种类型日志的日志设备
 
daemon
auth
authpriv
user
mail
lpr
news
uucp
ftp
local7
       
 

本地日志管理ssh

 [root@server ~]# man sshd_config
 SyslogFacility
         Gives the facility code that is used when logging
         messages from sshd(8).  The possible values are: DAE-
         MON, USER, AUTH, AUTHPRIV, LOCAL0, LOCAL1, LOCAL2,
         LOCAL3, LOCAL4, LOCAL5, LOCAL6, LOCAL7.  The default
         is AUTH.
更改ssh服务的默认日志记录载体
通过rsyslog程序去管理来自指定设备载体的日志记录到指定的文件(修改/etc/rsyslog.conf)
测试验证
1.修改ssh服务配置文件
[root@server ~]# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
[root@server ~]# vim /etc/ssh/sshd_config 
SyslogFacility LOCAL6
2.重启服务
[root@server ~]# service sshd restart
Stopping sshd:                                             [  OK  ]
Starting sshd:                                             [  OK  ]
3.将来自LOCAL6设备载体日志记录指定位置(rsyslog)
[root@server ~]# vim /etc/rsyslog.conf
local6.*                                                /var/log/ssh
4.重启rsyslog服务
[root@server ~]# service rsyslog restart
Shutting down system logger:                               [  OK  ]
Starting system logger:                                    [  OK  ]
5.客户端测试
[root@client ~]# ssh 10.1.1.2
Last login: Fri Apr 26 12:27:33 2019 from 10.1.1.1
[root@server log]# ll ssh
-rw------- 1 root root 0 Apr 26 13:40 ssh
[root@server log]# tail -f ssh
Apr 26 13:42:09 server sshd[2447]: Accepted publickey for root from 10.1.1.3 port 35951 ssh2
Apr 26 13:44:10 server sshd[2447]: Received disconnect from 10.1.1.3: 11: disconnected by user
此时进行ssh访问,日志会在local6和/var/log/messages里都出现
 
如果不想记录到/messages,可修改/etc/rsyslog.conf,添加local6.none,则不再显示ssh的日志
*.info;mail.none;authpriv.none;cron.none;local6.none              /var/log/messages
 

五、远程日志管理
目前:把多台服务器的日志远程记录到其中一台日志服务器集中化管理,方便对其统一分析和管理

环境:

log-server:10.1.1.2

应用服务器:10.1.1.3

ssh服务服务——>其他人远程访问该应用服务器产生ssh服务日志——>远程记录到log-server上

client:10.1.1.4

ssh:10.1.1.3——>日志记录10.1.1.2

需求:把web服务器上的ssh服务日志,远程记录到log-server上

思路:

web应用服务器上操作

将web服务器上的ssh服务的日志单独记录
指定ssh服务的设备载体
重启服务
将来自于ssh服务的日志设备载体上的日志远程发送到log-server上
以下操作在log-server上操作

通过修改配置文件,打开日志传输端口
加载相应模块 tcp | udp
打开接收端口 默认514端口
启动服务后日志默认会保存到/var/log/messages
步骤:

以下操作在log-service(10.1.1.2)服务上完成
1.加载相应模块打开接收端口(可以选择udp、tcp都打开)
[root@log-server ~]# vim /etc/rsyslog.conf
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
 
# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514
2.重启服务
service rsyslog restart
[root@log-server ~]# netstat -nltup |grep 514        //验证端口是否打开
tcp        0      0 0.0.0.0:514                 0.0.0.0:*                   LISTEN      2822/rsyslogd       
tcp        0      0 :::514                      :::*                        LISTEN      2822/rsyslogd       
udp        0      0 0.0.0.0:514                 0.0.0.0:*                               2822/rsyslogd       
udp        0      0 :::514                      :::*                                    2822/rsyslogd
 
以下操作在应用服务器完成(10.1.1.3):
1.指定ssh服务的日志文件的设备载体
[root@ssh-server ~]# vim /etc/ssh/sshd_config 
SyslogFacility LOCAL0
2.重启ssh服务
[root@ssh-server ~]# service sshd restart
3.修改/etc/rsyslog.conf来指定ssh服务的日志发送到远端去
[root@ssh-server ~]# vim /etc/rsyslog.conf 
 
# remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional
#*.* @@remote-host:514
 
local0.*        @10.1.1.2:514    //一个@表示udp,两个@表示tcp  
最关键的一步,将日志远程发送给10.1.1.2
 
 
4.重启rsyslog服务
[root@ssh-server ~]# service rsyslog restart
Shutting down system logger:                               [  OK  ]
Starting system logger:                                    [  OK  ]
 
测试验证(client:10.1.1.4)
[root@client ~]# ssh 10.1.1.3
The authenticity of host '10.1.1.3 (10.1.1.3)' can't be established.
RSA key fingerprint is a5:98:06:58:84:35:d3:f4:4c:f8:43:a1:a5:12:f5:8e.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.1.1.3' (RSA) to the list of known hosts.
[email protected]'s password: 
Last login: Fri Apr 26 14:46:31 2019 from 10.1.1.1
 
[root@log-server ~]# tail -f /var/log/messages
Apr 26 15:12:30 ssh-server sshd[2858]: Accepted password for root from 10.1.1.4 port 58561 ssh2
[root@ssh-server ~]# tail -f /var/log/messages
Apr 26 15:12:30 ssh-server sshd[2858]: Accepted password for root from 10.1.1.4 port 58561 ssh2
(不想记录就修改/etc/rsyslog.conf,将local0.none加在/var/log/messages那行里)
 
注意:selinux和防火墙,还有udp和tcp 端口514是否打开
 

六、日志轮转
日志轮循(轮转):日志轮转,切割,备份,归档

为什么要日志轮转?
避免日志过大占满/var/log的文件系统
方便日志查看
将丢弃系统中最旧的日志文件,以节省空间
日志轮转的程序是logrotate
logrotate本身不是系统守护进程,它是通过计划crond每天执行
如何进行日志轮转?
了解相关配置文件
[root@log-server ~]# rpm -ql logrotate
/etc/cron.daily/logrotate        周期性计划任务
/etc/logrotate.conf                配置文件
/etc/logrotate.d                子配置文件存放路径
/usr/sbin/logrotate
/usr/share/doc/logrotate-3.7.8
/usr/share/doc/logrotate-3.7.8/CHANGES
/usr/share/doc/logrotate-3.7.8/COPYING
/usr/share/man/man5/logrotate.conf.5.gz
/usr/share/man/man8/logrotate.8.gz
/var/lib/logrotate.status
 
[root@log-server ~]# cat /etc/logrotate.conf
# see "man logrotate" for details
# rotate log files weekly
weekly
 
# keep 4 weeks worth of backlogs    保留4周备份日志
rotate 4
 
# create new (empty) log files after rotating old ones
create
 
# use date as a suffix of the rotated file        日期作为后缀给旧文件重命名
dateext
 
# uncomment this if you want your log files compressed
#compress
 
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d    加载外部目录
 
# no packages own wtmp and btmp -- we'll rotate them here
/var/log/wtmp {
    monthly
    create 0664 root utmp        
    minsize 1M
    rotate 1    保留1份日志文件,每一个月备份一次日志文件
}
/var/log/btmp {
    missingok
    monthly
    create 0600 root utmp
    rotate 1
}
# system-specific logs may be also be configured here.
常见的一些参数:
daily        指定转储周期为每天
monthly        指定转储周期为每月
weekly        每周轮转一次
rotate 4    同一个文件最多轮转4次,4次之后就删除该文件
create 0664 root uttmp    轮转之后创建新文件,权限是0664,属于root用户和utmp组
dateext        用日期来做轮转之后的文件的后缀名
compress    用gzip对轮转后的日志进行压缩
minsize    30K    文件必须大于30k,且周期到了,才会轮转
size 30K    文件大于30k才会轮转,不论周期是否已到
missingok    如果日志文件不存在,不报错
notifempty    如果日志文件是空的,不轮转
delaycompress    下一次轮转的时候才压缩
sharedscripts    不管有多少个文件待轮转,prerotate和postrotate代码只执行一次
prerotate        如果符合轮转的条件,则在轮转之前执行prerotate和endscript之间的shell代码
postrotate        轮转完成后执行postrotate和endscript之间的shell代码
[root@server~]# cat /etc/logrotate.d/syslog 
这个子配置文件,没有指定的参数都会以默认方式轮转
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
    sharedscripts    不管有多少个文件待轮转,prerotate和postrotate代码只执行一次
    postrotate        转换完后执行postrotate和endscirpt之间的shell代码
    /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    轮转后对rsyslog的pid进行刷新(但pid其实不变)
    endscript
}
思考:为什么轮转后需要对rsyslog的pid进行刷新?
ll -i 查看文件的inode    
-HUP 平滑重启

不以时间为后缀进行轮转,在/etc/logrotate.conf/ nodateext

清空环境

重启服务

结论 

后刷新pid的话,logger -t "呵呵" "再见!"会写入旧文件(messages.1)里面

将这句话放在/bin/kill这条命令后面,会写入新文件里

最新的文件是messages,第一次强制轮转后的旧文件是messages.1,cat messages.1会看到logger -t "呵呵" "再见!",到第二次就成messages.2。而第二次轮转后的messages.1成了第一次轮转后的messages的老文件。(看时间区别)


————————————————
版权声明:本文为CSDN博主「一只晨兴夜不得寐的运维人」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42803243/article/details/122802898

你可能感兴趣的:(Linux用户态,linux,故障,syslog)