日志管理 您所在的位置:网站首页 转存文件上限 日志管理

日志管理

2023-08-31 18:15| 来源: 网络整理| 查看: 265

目录一、 rsyslog介绍二、系统日志文件介绍三、日志级别四、日志配置4.1 日志定义相关符号4.2 了解配置文件五、实战演练5.1 本地日志管理5.1.1 将本地ssh服务的日志记录到/var/log/sshd.log里5.2 远程管理日志5.2.1 将ssh服务的日志远程记录到日志管理服务器上保存。六、日志轮转——logrotate6.1 了解logrotate相关配置文件6.2 ssh日志轮转6.3 nginx日志的日志配置示例参考:6.4 解决logrotate无法自动轮询日志的方法

一、 rsyslog介绍

rsyslog提供高性能、强大的安全特性和模块化设计。能够接受来自各种来源的输入,转换他们,并将结果输出到不同的目的地。性能通常被认为是“令人震惊的”!

二、系统日志文件介绍 日志格式:文本日志/二进制日志/数据库日志 常见日志文件: /var/log/boot.log 系统引导日志,记录开机启动信息 /var/log/dmesg 核心的启动日志(硬件相关) /var/log/messages 系统的日志文件 /var/log/maillog 邮件服务的日志 /var/log/xferlog ftp服务的日志 /var/log/secure 网络连接及系统登录的安全信息 /var/log/cron 定时任务的日志 /var/log/wtmp 记录所有的登入和登出(last -f 查看) /var/log/btmp 记录失败的登入尝试(last -f 查看) 三、日志级别 日志信息分为以下级别,从上到下依次降低 none –什么都不记录 0 emerg –内核崩溃等严重信息 1 alert –需要立刻修改的信息 2 crit –严重级别,阻止整个系统或者整个软件不能正常工作的信息 3 err –错误级别,阻止某个功能或者模块不能正常工作的信息 4 warning –警告级别 5 notice –最具有重要性的普通条件的信息 6 info –一般信息的日志,最常用 7 debug –有调式信息的,日志信息最多 四、日志配置 4.1 日志定义相关符号 rsyslog`服务的配置文件:`/etc/rsyslog.conf 配置文件中常见的表示符号: . 用来分隔服务和日志级别 * 任何服务或者任何级别 = 有等号表示等于某一级别,没有等号表示 ! 排除操作,前面有相同服务的表达式,这个操作才有意义 ; 用于分隔不同的 服务.级别 组合 , 用于分隔不同的服务 - 用于指定目标文件是,代表异步写入 4.2 了解配置文件 *.info;mail.none;authpriv.none;cron.none /var/log/messages # 所有服务产生的日志,除了mail/验证/任务计划相关日志都记录到/var/log/messages authpriv.* /var/log/secure # 记录所有跟验证相关日志 mail.* -/var/log/maillog # 记录所有跟邮件相关的日志信息 cron.* /var/log/cron # 记录跟任务计划相关的日志 *.emerg :omusrmsg:* # 把所有级别为emerg的信息发送给所有登录到系统上的用户 uucp,news.crit /var/log/spooler local7.* /var/log/boot.log # 记录所有跟启动相关的日志信息

特别说明:

man rsyslog.conf 查看rsyslog配置的帮助信息 log facility 设备 设施:用来记录一种日志的日志设备 deamon auth authpriv user news uucp ftp local0-7 五、实战演练 5.1 本地日志管理 5.1.1 将本地ssh服务的日志记录到/var/log/sshd.log里

思路:

通过修改配置文件完成 重启rsyslog服务 测试验证

步骤:

$ vim /etc/ssh/sshd_config # 定义ssh服务的日志存储设备为local1 SyslogFacility local1 $ vim /etc/rsyslog.conf *.info;mail.none;authpriv.none;cron.none;local1.none /var/log/messages authpriv.*;local1.none /var/log/secure # 定义ssh服务的local1设备载体不再向以上文件记录日志信息(依然会记录,不过不是详细信息) local1.* /var/log/sshd.log # 定义local1设备日志文件存储在/var/log/sshd.log中 $ systemctl restart sshd $ systemctl restart rsyslog # 找另一台服务登录测试 $ tail /var/log/sshd.log Jul 12 18:43:11 lzj-01 sshd[19259]: Accepted password for root from 192.168.1.2 port 36210 ssh2 Jul 12 18:44:04 lzj-01 sshd[19259]: Received disconnect from 192.168.1.2: 11: disconnected by user 5.2 远程管理日志 5.2.1 将ssh服务的日志远程记录到日志管理服务器上保存。

环境:

192.168.1.1 log-server 192.168.1.2 ssh-server 192.168.1.3 client

思路:

在ssh-server上将ssh服务单独记录 在ssh-server上通过修改/etc/rsyslog.conf文件将本地ssh服务日志远程传送到log-server服务器上; 在log-server上打开514端口等待客户传送日志 测试验证 log-server服务器 $ vim /etc/rsyslog.conf $ModLoad imudp $UDPServerRun 514 # UDP协议 514端口 $ModLoad imtcp $InputTCPServerRun 514 # TCP协议 514端口 $ systemctl restart rsyslog $ netstat -nltup | grep 514 tcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN 19386/rsyslogd tcp6 0 0 :::514 :::* LISTEN 19386/rsyslogd udp 0 0 0.0.0.0:514 0.0.0.0:* 19386/rsyslogd udp6 0 0 :::514 :::* 19386/rsyslogd ssh-server服务器 $ vim /etc/ssh/sshd_config SyslogFacility local0 *.info;mail.none;authpriv.none;cron.none;local0.none /var/log/messages authpriv.*;local0.none /var/log/secure local0.* @@192.168.1.1:514 # 远程发送到192.168.1.1服务器上,@表示UDP @@表示TCP $ systemctl restart sshd && systemctl restart rsyslog client测试: $ ssh [email protected] log-server查看//var/log/messages日志 $ tailf /var/log/messages Jul 12 19:36:57 ssh-server sshd[17203]: Accepted password for root from 192.168.1.3 port 60279 ssh2

如果日志服务器管理多台服务器,按照上面的方法就不好区分了,解决办法(在日志管理端优化)如下:

log-server服务器通过定义模板来保存不同的日志文件 $ vim /etc/rsyslog.conf # 在文件末尾加入以下内容: $template DynFile,"/var/log/system-%HOSTNAME%.log" # 定义一个模板DynFile,将日志保存在/var/log里,文件为system-客户端的主机名.log local0.* ?DynFile # 动态调用定义的模板 $ systemctl restart rsyslog client再次测试: $ ssh [email protected] log-server验证: $ cat /var/log/system-ssh-server.log Jul 12 19:43:26 ssh-server sshd[17256]: Accepted password for root from 192.168.1.3 port 60282 ssh2 六、日志轮转——logrotate

为什么要进行日志轮转?

避免日志文件过大,占用系统空间; 方便日志查看; 丢弃系统中最旧的日志文件,节省空间 日志轮转的程序时logrotate logrotate本身不是系统守护进程,它是通过计划任务crond每天执行 6.1 了解logrotate相关配置文件 $ egrep -v '^$|^#' /etc/logrotate.conf weekly # 默认每一周执行一次rotate轮转工作 rotate 4 # 保留多少个日志文件(轮转几次).默认保留四个.就是指定日志文件删除之前轮转的次数,0 指没有备份 create # 自动创建新的日志文件,新的日志文件具有和原来的文件相同的权限;因为日志被改名,因此要创建一个新的来继续存储之前的日志 dateext # 这个参数很重要!就是切割后的日志文件以当前日期为格式结尾,如xxx.log-20131216这样,如果注释掉,切割出来是按数字递增,即前面说的xxx.log-1这种格式 include /etc/logrotate.d # 导入/etc/logrotate.d/ 目录中的各个应用配置 /var/log/wtmp { # 仅针对/var/log/wtmp 所设定的参数 monthly # 每月一次切割,取代默认的一周 create 0664 root utmp # 指定新建的日志文件权限以及所属用户和组 minsize 1M # 文件大小超过1M 后才会切割 rotate 1 # 只保留一个日志 } /var/log/btmp { missingok monthly create 0600 root utmp rotate 1 }

logrotate中其他可配置参数,具体如下:

compress # 通过gzip 压缩转储以后的日志 nocompress # 不做gzip压缩处理 copytruncate # 用于还在打开中的日志文件,把当前日志备份并截断;是先拷贝再清空的方式,拷贝和清空之间有一个时间差,可能会丢失部分日志数据。 nocopytruncate # 备份日志文件不过不截断 create mode owner group # 轮转时指定创建新文件的属性,如create 0777 nobody nobody nocreate # 不建立新的日志文件 delaycompress # 和compress 一起使用时,转储的日志文件到下一次转储时才压缩 nodelaycompress # 覆盖delaycompress 选项,转储同时压缩。 missingok # 如果日志丢失,不报错继续滚动下一个日志 errors address # 专储时的错误信息发送到指定的Email 地址 ifempty # 即使日志文件为空文件也做轮转,这个是logrotate的缺省选项。 notifempty # 当日志文件为空时,不进行轮转 mail address # 把转储的日志文件发送到指定的E-mail 地址 nomail # 转储时不发送日志文件 olddir directory # 转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统 noolddir # 转储后的日志文件和当前日志文件放在同一个目录下 sharedscripts # 运行postrotate脚本,作用是在所有日志都轮转后统一执行一次脚本。如果没有配置这个,那么每个日志轮转后都会执行一次脚本 prerotate # 在logrotate转储之前需要执行的指令,例如修改文件的属性等动作;必须独立成行 postrotate # 在logrotate转储之后需要执行的指令,例如重新启动(kill -HUP) 某个服务!必须独立成行 daily # 指定转储周期为每天 weekly # 指定转储周期为每周 monthly # 指定转储周期为每月 rotate count # 指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5 个备份 dateext # 使用当期日期作为命名格式 dateformat .%s # 配合dateext使用,紧跟在下一行出现,定义文件切割后的文件名,必须配合dateext使用,只支持%Y %m %d %s 这四个参数 size(或minsize) log-size # 当日志文件到达指定的大小时才转储,log-size能指定bytes(缺省)及KB (sizek)或MB(sizem). # 当日志文件>= log-size 的时候就转储。 以下为合法格式:(其他格式的单位大小写没有试过) # size = 5 或size 5 (>= 5 个字节就转储) # size = 100k 或size 100k # size = 100M 或size 100M

logrotate指令选项:

-d, --debug :debug模式,测试配置文件是否有错误。 -f, --force :强制转储文件。 -m, --mail=command :压缩日志后,发送日志到指定邮箱。 -s, --state=statefile :使用指定的状态文件。 -v, --verbose :显示转储过程。 6.2 ssh日志轮转

ssh服务日志现在是步骤5.1的状态!

需求:

每天进行轮转,保留5天的日志文件 日志文件大小大于5M进行轮转 $ find /var/log/ -type f | xargs rm -f $ find /var/log/ -type f -exec rm -f {} \; $ find /var/log/ -type f -delete # 将/var/log/目录下的所有文件进行删除(三种方法任选其一),方便查看而已 $ systemctl restart rsyslog # 产生logrotate服务定义的日志文件 $ logrotate -f /etc/logrotate.conf # 轮转logrotate定义的日志文件 $ vim /etc/logrotate.d/sshd /var/log/sshd.log { daily compress missingok rotate 5 size 5M } $ logrotate -f /etc/logrotate.conf # 轮询一次 # 验证 $ ls /var/log/sshd.log* /var/log/sshd.log /var/log/sshd.log-20200712.gz 6.3 nginx日志的日志配置示例参考: $ vim /etc/logrotate.d/nginx /var/log/weblog/*.log { //日志存放路径 daily //指定转储周期为每天 compress //通过gzip 压缩转储以后的日志 rotate 7 //保存7天的日志 missingok //如果日志文件丢失,不要显示错误 notifempty //当日志文件为空时,不进行轮转 dateext //使用当期日期作为命名格式,exp: nginx_access.log-20190120 sharedscripts //运行postrotate脚本 postrotate //执行的指令 if [ -f /run/nginx.pid ]; then kill -USR1 `cat /run/nginx.pid` fi endscript //结束指令 } 6.4 解决logrotate无法自动轮询日志的方法

现象说明: 使用logrotate轮询nginx日志,配置好之后,发现nginx日志连续两天没被切割,检查后确定配置文件一切正常,这是为什么呢?? 强行启动记录文件维护操作,纵使logrotate指令认为没有需要,应该有可能是logroate认为nginx日志太小,不进行轮询。 故需要强制轮询,即在/etc/cron.daily/logrotate脚本中将-t 参数替换成-f 参数

$ vim /etc/cron.daily/logrotate #!/bin/sh /usr/sbin/logrotate /etc/logrotate.conf EXITVALUE=$? if [ $EXITVALUE != 0 ]; then /usr/bin/logger -f logrotate "ALERT exited abnormally with [$EXITVALUE]" fi exit 0 $ systemctl restart crond # 重启cron服务


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有