当前位置 > 主页 > 万和大讲堂 >


如何在 RHEL 7 中管理系统日志(配置、轮换以及导入到数据库)—南京RHCE认证培训分享

2016-09-13 11:25

  为了确保你的 RHEL 7 系统安全,你需要通过查看日志文件来监控系统中发生的所有活动。这样,你就可以检测到任何不正常或有潜在破坏的活动并进行系统故障排除或者其它恰当的操作。本文南京万和RHCE认证培训和大家分享的是如何在 RHEL 7 中管理系统日志。


  RHCE 考试 - Part:使用 Rsyslog 和 Logrotate 管理系统日志


  在 RHEL 7 中,rsyslogd 守护进程负责系统日志,它从 /etc/rsyslog.conf(该文件指定所有系统日志的默认路径)和 /etc/rsyslog.d 中的所有文件(如果有的话)读取配置信息。


  Rsyslogd 配置


  快速浏览一下 rsyslog.conf 会是一个好的开端。该文件分为 3 个主要部分:模块(rsyslong 按照模块化设计),全局指令(用于设置 rsyslogd 守护进程的全局属性),以及规则。正如你可能猜想的,最后一个部分指示记录或显示什么以及在哪里保存(也称为选择子selector),这也是这篇文章关注的重点。


  rsyslog.conf 中典型的一行如下所示:


  


  Rsyslogd 配置


  在上面的图片中,我们可以看到一个选择子包括了一个或多个用分号分隔的“设备:优先级”Facility:Priority对,其中设备描述了消息类型(参考RFC 3164 4.1.1 章节,查看 rsyslog 可用的完整设备列表),优先级指示它的严重性,这可能是以下几种之一:


  ◎debug

  ◎info

  ◎notice

  ◎warning

  ◎err

  ◎crit

  ◎alert

  ◎emerg


  尽管 none 并不是一个优先级,不过它意味着指定设备没有任何优先级。


  南京万和RHCE认证培训提醒大家注意给定一个优先级表示该优先级以及之上的消息都应该记录到日志中。因此,上面例子中的行指示 rsyslogd 守护进程记录所有优先级为 info 以及以上(不管是什么设备)的除了属于 mail、authpriv、以及 cron 服务(不考虑来自这些设备的消息)的消息到 /var/log/messages。


  你也可以使用逗号将多个设备分为一组,对同组中的设备使用相同的优先级。例如下面这行:


  *.info;mail.none;authpriv.none;cron.none                /var/log/messages


  也可以这样写:


  *.info;mail,authpriv,cron.none                /var/log/messages


  换句话说,mail、authpriv 以及 cron 被分为一组,并使用关键字 none。


  创建自定义日志文件


  要把所有的守护进程消息记录到 /var/log/tecmint.log,我们需要在 rsyslog.conf 或者 /etc/rsyslog.d 目录中的单独文件(这样易于管理)添加下面一行:


  daemon.*    /var/log/tecmint.log


  然后重启守护进程(注意服务名称不以 d 结尾):


  # systemctl restart rsyslog


  在随便重启两个守护进程之前和之后查看下自定义日志的内容:


  

  创建自定义日志文件


  作为一个自学练习,我建议你重点关注设备和优先级,添加额外的消息到已有的日志文件或者像上面那样创建一个新的日志文件。


  使用 Logrotate 轮换日志


  为了防止日志文件无限制增长,logrotate 工具用于轮换、压缩、移除或者通过电子邮件发送日志,从而减轻管理会产生大量日志文件系统的困难。(译者注:日志轮换(rotate)是系统管理中归档每天产生的日志文件的自动化过程)


  Logrotate 作为一个 cron 任务(/etc/cron.daily/logrotate)每天运行,并从 /etc/logrotate.conf 和 /etc/logrotate.d 中的文件(如果有的话)读取配置信息。


  对于 rsyslog,即使你可以在主文件中为指定服务包含设置,为每个服务创建单独的配置文件能帮助你更好地组织设置。


  下面和南京万和RHCE认证培训一起来看一个典型的 logrotate.conf:


  

  Logrotate 配置


  在上面的例子中,logrotate 会为 /var/log/wtmp 进行以下操作:尝试每个月轮换一次,但至少文件要大于 1MB,然后用 0664 权限、用户 root、组 utmp 创建一个新的日志文件。下一步只保存一个归档日志,正如轮换指令指定的:


  

  每月 Logrotate 日志


  让我们再来看看 /etc/logrotate.d/httpd 中的另一个例子:


  


  轮换 Apache 日志文件


  你可以在 logrotate 的 man 手册(man logrotate 和 man logrotate.conf)中阅读更多有关它的设置。


  作为一个系统工程师,很可能由你决定多久按照什么格式保存一次日志,这取决于你是否有一个单独的分区/逻辑卷给 /var。否则,你真的要考虑删除旧日志以节省存储空间。另一方面,根据你公司和客户内部的政策,为了以后的安全审核,你可能必须要保留多个日志。有疑惑?请咨询南京万和RHCE认证培训


  保存日志到数据库


  当然检查日志可能是一个很繁琐的工作(即使有类似 grep 工具和正则表达式的帮助)。因为这个原因,rsyslog 允许我们把它们导出到数据库(OTB 支持的关系数据库管理系统包括 MySQL、MariaDB、PostgreSQL 和 Oracle 等)。


  指南的这部分假设你已经在要管理日志的 RHEL 7 上安装了 MariaDB 服务器和客户端:


  


  然后使用 mysql_secure_installation 工具为 root 用户设置密码以及其它安全考量:


 

  保证 MySQL 数据库安全


  南京万和RHCE认证培训提醒大家注意如果你不想用 MariaDB root 用户插入日志消息到数据库,你也可以配置用另一个用户账户。如何实现的介绍已经超出了本文的范围,但在 MariaDB 知识 中有详细解析。为了简单在这篇指南中我们会使用 root 账户。


  下一步,从 GitHub 下载 createDB.sql 脚本并导入到你的数据库服务器:


  # mysql -u root -p < createDB.sql


  

  保存服务器日志到数据库


  最后,添加下面的行到 /etc/rsyslog.conf:


  $ModLoad ommysql


  $ActionOmmysqlServerPort 3306


  *.* :ommysql:localhost,Syslog,root,YourPasswordHere


  重启 rsyslog 和数据库服务器:


  # systemctl restart rsyslog


  # systemctl restart mariadb


  使用 SQL 语法查询日志


  现在执行一些会改变日志的操作(例如停止和启动服务),然后登录到你的数据库服务器并使用标准的 SQL 命令显示和查询日志:


  USE Syslog;


  SELECT ReceivedAt, Message FROM SystemEvents;


  

  在数据库中查询日志


  总结


  在这篇文章中南京万和RHCE认证培训介绍了如何设置系统日志,如果轮换日志以及为了简化查询如何重定向消息到数据库。南京万和RHCE认证培训希望这些技巧能对你准备 RHCE 考试 和日常工作有所帮助。

最近开班 more>
  • 全栈开发
  • 前端基础班
  • 软件测试
  • Java大数据开发工程师
  • 云原生精英班
  • 开发课程基础班第四期
  • 开发课程基础班第三期
  • 开发课程基础班第二期
  • 开发课程基础班第一期
  • Java Web UI Python
  • CISP
  • HCIE-Datacom(HCIA,HCIP基础)
  • HCIP-Datacom(HCIA基础)
  • HCIA-Datacom(0基础)
  • HCIE-Datacom(HCIA,HCIP基础)
  • HCIP-Datacom(HCIA基础)
  • HCIA-Datacom(0基础)
  • OCM 12C
  • OCP 19C
  • RHCE 9.0
  • 脱产班
  • 脱产班
  • 脱产班
  • 脱产班
  • 脱产班
  • 脱产班
  • 脱产班
  • 脱产班
  • 脱产班
  • vip班
  • 考试计划
  • 脱产班
  • 脱产班
  • 脱产班
  • 双休班
  • 双休班
  • 双休班
  • 双休班
  • 业余班
  • 业余班
  • 10月16日
  • 9月23日
  • 9月2日
  • 9月30日
  • 8月26日
  • 10月8日
  • 9月23日
  • 9月16日
  • 9月9日
  • 随时开课
  • 9月21日
  • 10月17日
  • 9月18日
  • 9月2日
  • 11月2日
  • 10月26日
  • 9月7日
  • ——
  • 随时开课
  • 9月26日
    • 姓 名 :
    • 电 话 :
    • 课 程 :

技术交流群

  • Java大数据交流群560819979加入
  • Python技术交流群595083299加入
  • Oracle技术交流群595119011加入
  • Web前端技术交流群604697610加入
  • Huawei技术交流群482919361加入
  • Redhat技术交流群587875348加入
  • UI设计技术交流群511649801加入
  • Cisco技术交流群596886705加入
  • IT运维技术交流群605888381加入