rsyslog系统日志管理

课程目标

  • 了解日志的级别及作用
  • 掌握rsyslog服务的本地日志和远程日志的管理
  • 能够使用logrotate程序根据需求对日志进行轮转

    一、常见的系统日志

  • 日志格式: 文本日志/二进制日志/数据库日志

    1. 默认的相关日志文件:
    2. /var/log/boot.log 系统引导日志,记录开机启动信息
    3. /var/log/dmesg 核心的启动日志
    4. /var/log/messages 系统的日志文件
    5. /var/log/maillog 邮件服务的日志
    6. /var/log/xferlog ftp服务的日志
    7. /var/log/secure 网络连接及系统登录的安全信息
    8. /var/log/cron 定时任务的日志
    9. /var/log/wtmp 记录所有的登入和登出 last -f 查看
    10. /var/log/btmp 记录失败的登入尝试

    二、日志管理程序

  • rsyslog可以将日志写入数据库,并可以利用模块和插件控制输入输出

  • rsyslog程序管理本地和远程日志

    • 安装软件
    • 根据需求修改配置文件
    • 启动服务
    • 测试验证

      三、日志级别

  • man syslog

  • 日志信息分为以下级别,从上到下级别依次降低
    1. none none 不算是一个级别,他表示不记录服务的所有信息
    2. 0 emerg 系统不可用
    3. 1 alert 特别留意的报警信息
    4. 2 crit 非常严重的状况
    5. 3 err 错误信息
    6. 4 warning 警告信息
    7. 5 notice 稍微需要注意的信息
    8. 6 info 正常信息
    9. 7 debug 调试信息,开发人员使用

    四、日志配置

    1. 日志定义相关符号

    ```powershell . 用来分隔服务和级别的
  • 如何服务,或者任何级别 = 有=表示等于某一级别,否则表示大于或者等于某一级别 ! 排除操作,前面有相同服务的表达式,这个操作才有意义。表示从前面表达式所包含的内容中排除某些内容 意思就是,和前面那个取交集 ; 用于分隔不同的服务.级别组合 , 用于分隔不同的服务
  • 用于指定目标文件时,代表异步写入 ```

    2. 了解配置文件

  • man rsyslog.conf 文档上表示,可以使用指定的载体,来承载你指定某个服务的日志

    五、本地日志管理

    需求1:将本地邮件服务的日志记录到 /var/log/test_mail.log 里
    思路:

  • 软件安装

  • 修改配置文件
  • 启动服务测试验证

环境:
log-server:10.1.1.2 mail服务程序
步骤:

  1. 备份并修改配置文件
    1. echo "mail.info /var/log/test_mail.log" >> /etc/rsyslog.conf
    2. /var/log/test_mail.log 这个文件会自动创建
  2. 启动服务
    1. service rsyslog restart
  3. root用户,echo hahahaha | mail -s "test mail log" stu1 发送邮件给stu1
    1. tail -f /var/log/test_mail.log 就能看到日志
    2. cat /var/spool/mail/stu1 查看这个用户收到的邮件
    3. 发个log消息测试,logger用于往系统中写入日志,他提供一个shell命令接口到syslog系统模块
      1. logger -t "Loggertest" -p mail.info "Testing log info"

需求2: 把ssh的日志单独 指定记录到/var/log/ssh 里
思路:

  1. 更改ssh服务的默认目录记录载体(在ssh服务端完成,修改ssh服务的配置文件)
  2. 通过rsyslog程序管理来自指定设备载体的日志,记录到指定的文件(修改/etc/rsyslog.conf)
  3. 测试验证

步骤:

  1. 修改ssh服务的默认的日志载体
    1. echo "SyslogFacility LOCAL6" >> /etc/ssh/sshd_config
    2. service sshd restart
  2. 将来自LOCAL6 设备载体的日志记录到指定位置(rsyslog), 空闲的设备载体(在man文档里看)
    1. echo "local6.* /var/log/ssh" >> /etc/rsyslog.conf
    2. service rsyslog restart
  3. 在log-server端测试发现,tail -f /var/log/messages 在系统日志也会记录有ssh的日志,这是因为 rsyslog 配置文件中,指定了 “ /var/log/messages“ 说明所有程序的日志都会传到messages 中去
    1. 在 /var/log/messgaes 那一行添加local6.none, 就实现messages 日志中不记录ssh的日志

  4. 六、远程日志管理

    目的:把多台服务器的日志远程记录到其中一台日志服务器集中化管理,方便对其统一分析和管理
    环境:
    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应用服务器上操作:
  1. 将web服务器上的ssh服务的日志 单独记录
    1. 指定ssh服务的设备载体
    2. 重启sshd
  2. 将来自于ssh服务的日志设备载体上的日志远程发送到log-server
  • 在log-server上操作:
  1. 修改配置文件,打开日志传输的接收端口
    1. 加载模块 tcp|udp
    2. 打开接收端口 默认514端口
  2. 启动服务后,日志默认会保存到/var/log/messages

步骤:

  • 在log-server(10.1.1.2)完成:
  1. 加载相应的模块打开端口
    ```powershell vim /etc/rsyslog/conf

    Provides UDP syslog reception //加载UDP协议的模块,端口514

    $ModLoad imudp $UDPServerRun 514

Provides TCP syslog reception //加载TCP协议的模块,端口514

$ModLoad imtcp $InputTCPServerRun 514

  1. 2. `service rsyslog restart`<br />
  2. 2. `netstat -nltup | grep 514` 查看端口是否打开<br />
  3. - 在应用服务器完成:<br />
  4. 4. 指定ssh服务器的日志文件的设备载体
  5. 1. `echo "SyslogFacility LOCAL0" >> /etc/ssh/sshd_config` <br />
  6. 1. `service sshd restart` <br />
  7. 5. 修改rsyslog,指定ssh服务的日志发送到远端去
  8. 1. `echo "local0.* @10.1.1.2:514" >> /etc/rsyslog.conf`
  9. 1. @ 代表UDP协议,@@ 代表TCP协议传输<br />
  10. 2. `service rsyslog restart` <br />
  11. - 测试验证<br />
  12. ---
  13. 远程日志单独保存
  14. - `vim /etc/rsyslog.conf` <br />
  15. ```powershell
  16. Stemplate DynFile "/var/log/system-%HOSTNAME%.log"
  17. local0.* ?DynFile //来自local0的所有日志将调用DynFile这个模板
  • service rsyslog restart
  • client端远程进行测试验证

    七、日志轮转

    日志轮询(轮转):日志轮转,切割,备份,归档

  • rpm -q logrotate

    • rpm -ql logrotate
  • 了解配置文件,cat /etc/logrotate.conf
  • 需求1:ssh服务的日志单独保存到了/var/log/ssh 里,如何进行轮转?
  • 要求:
    1. 每天进行轮转,保留5天的日志文件
    2. 日志文件大于5M,进行轮转
  • 思路:
    1. 修改logrotate的主配置文件,增加/var/log/ssh 文件的轮转
    2. 或是在 /etc/logrotate.d/ 目录创建一个文件
  • 步骤:方法1:vim /etc/logrotate.conf

    1. /var/log/ssh {
    2. missingok
    3. daily
    4. rotate 5
    5. size 5M
    6. create
    7. }
    • 删除一下日志文件, find /var/log/ -type f -delete
    • 强制轮转一下,看结果service rsyslog restart
      • logrotate -f /etc/logrotate.conf
      • 先写日志再刷新PID,刷新之前写的日志是写在老的日志文件里。
  • 方法2:创建子配置文件
    vim /etc/logrotate.d/ssh 文件内容,和上面一样
    • 不希望以时间作为后缀,花括号内加 nodateext