Linux从入门到精通——系统日志管理

####系统日志管理###        程序产生日志

    【进程和操作系统内核需要能够为发生的事件记录日志,这些日志可用于系统审核和问题的故障排除,一般这些日志永久存储/var/log目录中。】

1.rsyslog      vim /etc/rsyslog.conf

    Syslog 守护进程 — 一个用来接收、处理和发送 syslog 信息的程序。它可以远程发送 syslog 到一个集中式的服务器或写入到一个本地文件。常见的例子包括 rsyslogd 和 syslog-ng。在这种使用方式中,人们常说“发送到 syslog”。
Syslog 协议 — 一个指定日志如何通过网络来传送的传输协议和一个针对 syslog 信息(具体见下文) 的数据格式的定义。它在 RFC-5424 中被正式定义。对于文本日志,标准的端口是 514,对于加密日志,端口是 6514。在这种使用方式中,人们常说“通过 syslog 传送”。
     rsyslog是一个开源工具,广泛用于linux系统以通TCP/UDP协议转发或者接受日志消息
     此服务是用来采集日志,不生成日志,收集日志并且搬到指定位置
     此服务的主配置文件为/etc/rsyslog.conf
     指定日志保存位置修改配置文件,修改后需要重启rsyslog服务才能生效
       *.*   /var/log/student.log

2.rsyslog的管理
     /var/log/message    ##服务信息日志,大多数系统日志信息在这里
     /var/log/secure     ##安全和身份认证相关的消息和错误的日志文件
     /var/log/maillog    ##与邮件服务器相关的日志文件
     /var/log/cron       ##与定时人物相关的日志文件
     /var/log/boot.log   ##与系统启动有关的日志文件

         【UDP:直接发送  TCP:询问后才发送】
   

           "什么类型.什么级别"           /var/log/file                  ##日志采集规则

     (1)日志类型分为:
      auth                              ##pam产生的日志
      authpriv                        ##ssh,ftp等登陆信息的验证信息
      cron                              ##时间任务相关
      kern                              ##内核
      lpr                                 ##打印
      mail                              ##邮件
      mark(syslog)-rsyslog    ##服务内部的信息,时间标识
      news                            ##新闻组   
      user                             ##用户程序产生的相关信息
      uucp                             ##unix to unix copy, unix主机之间相关的通讯
      local 1~7                      ##自定义的日志设备


     (2)日志级别分为:
      debug        ##有调式信息的,日志信息最多
      info            ##一般信息的日志,最常用
      notice        ##最具有重要性的普通条件的信息
      warning     ##警告级别
      err             ##错误级别,组织某个功能或者模块不能正常工作的信息
      crit            ##严重级别,组织整个系统或者整个软件不能正常工作的信息
      alert          ##需要立刻修改的信息
      emerg       ##内核崩溃等严重信息
      none         ##什么都不记录

       【注意:从上到下,级别从低到高,记录的信息越来越少】
       【详细的可以查看手册:man 3 syslog】
  
3.日志的远程同步
   (1)在日志发送方:
     vim /etc/rsyslog.conf
     *.*   @172.25.254.210  ## @表示udp协议发送 @@表示tcp协议发送
           日志接受方IP
                                      

     systemctl restart rsyslog
            【如果光在发送方开启同步日志,接受方是收不到同步日志的】

   (2)在日志接受方:
     vim /etc/rsyslog.conf
     15 $ModLoad imudp      ##日志接受模块
     16 ¥UDPServerRun 514  ##开启接受端口
            【开启端口但是有防火墙还是收不到同步的日志】
                                     

     systemctl restart rsyslog
     systemctl stop firewalld         ##关闭火墙
     systemctl disable firewalld      设定火墙开机关闭

                                      

  

   (3)测试:
      在发送方和接受方都清空日志文件
      > /var/log/messages      ##方便查看结果

   (4)在日志接受方查看
      cat /var/log/messages

                                        

4.日志采集格式的设定
     vim  /etc/rsyslog.conf
     $template LOGFMT, "%timegenerated% %FROMHOST-IP% %syslogtag% %msg% "
     

    %timegenerated%        ##显示日志时间
      %FROMHOST-IP%      ##显示主机ip
      %syslogtag%          ##日志记录目标
      %msg%                  ##日志内容
                             ##换行

      *.*              /var/log/westos;LOGFMT

      cat /var/log/westos

 

5.时间同步服务
   (1)服务名称:chronyd

  Chrony是一个开源的自由软件,它能保持系统时钟与时钟服务器(NTP)同步,让时间保持精确。

  它由两个程序组成:chronyd和chronyc。

  chronyd是一个后台运行的守护进程,用于调整内核中运行的系统时钟和时钟服务器同步。它确定计算机增减时间的比率,并对此进行补偿。

  chronyc提供了一个用户界面,用于监控性能并进行多样化的配置。它可以在chronyd实例控制的计算机上工作,也可以在一台不同的远程计算机上工作。

  在很多情况下,chrony相对于ntp程序来说,都有不少优势

   

   (2)在服务端:vim /etc/chronyd.conf
      22.allow 172.25.254.0/24         ##允许那些客户端同步本机时间
      29.local stratum 10            ##本机不同步任何主机的时间,本机作为时间源

                                               

      systemctl restart chronyd
      timedatectl set-timezone Asia/Shanghai   ##更改当前时区为东8区
   (3)在客户端:vim /etc/chrony.conf
      server 172.25.254.110 iburst       ##本机立即同步110主机时间
      systemctl restart chronyd

                                                  

      timedatectl set-timezone Asia/Shanghai    ##更改当前时区为东8区
   (4)测试:
      chronyc sources -v
      210 Number of source = 1

6.timedatectl命令

  timedatectl命令可以查询和更改系统时钟和设置,你可以使用此命令来设置或更改当前的日期,时间和时区,或实现与远程NTP服务器的自动系统时钟同步。

      timedatectl                  ##管理系统时间
      status                         ##显示当前时间信息
      set-time                      ##设定当前时间
      set-timezone               ##设定当前时区
      set-local-rtc 0|1          ##设定是否使用utc时间
      list-timezone               ##查看支持的所有时区

  (1).显示系统的当前时间和日期

  timedatectl
  # timedatectl status
  # 两条命令效果等价

[root@rhel1 ~]# timedatectl 
       Local time: Sat 2017-10-07 10:55:22 CST
   Universal time: Sat 2017-10-07 02:55:22 UTC
         RTC time: Sat 2017-10-07 02:55:22
        Time zone: Asia/Shanghai (CST, +0800)
      NTP enabled: no
NTP synchronized: yes
  RTC in local TZ: no
       DST active: n/a

  注意NTP synchronized值,只有时间服务器自己同步完成时间之后,才能为其它服务器提供时间同步服务。

  (2).设置日期与时间

  timedatectl set-time "YYYY-MM-DD HH:MM:SS"

  timedatectl set-time "YYYY-MM-DD"

  timedatectl set-time "HH:MM:SS"
  (3).查看所有可用的时区

  timedatectl list-timezones    # 亚洲

  timedatectl list-timezones |  grep  -E "Asia/Shanghai*"  #中国上海

  (4).设置时区

  timedatectl set-timezone Asia/Shanghai

  

  手动修改时间时,必须把NTP enabled 设置为no.

  [root@rhel1 ~]# date
    Sun Oct  8 11:00:51 CST 2017
  [root@rhel1 ~]# timedatectl
         Local time: Sat 2017-10-07 11:31:45 CST
      Universal time: Sat 2017-10-07 03:31:45 UTC
           RTC time: Sun 2017-10-08 03:01:57
          Time zone: Asia/Shanghai (CST, +0800)
         NTP enabled: no
    NTP synchronized: no
      RTC in local TZ: no
         DST active: n/a

  如果把NTP enabled 修改为yes时,表示开启自动同步时间,此时,是不能手动修改时间的。

  如果为No时,表示关闭自动同步时间。

  [root@rhel1 ~]# timedatectl set-ntp yes
  [root@rhel1 ~]# timedatectl set-time "2017-10-08 11:00:50"
    Failed to set time: Automatic time synchronization is enabled
  [root@rhel1 ~]# timedatectl set-ntp no
  [root@rhel1 ~]# timedatectl set-time "2017-10-08 11:00:50"
  [root@rhel1 ~]# date
  Sun Oct  8 11:00:51 CST 2017



7.journal

  systemd-journald和rsyslog:

    • 一种改进的日志管理服务,是 syslog 的补充,收集来自内核、启动过程早期阶段、标
      准输出、系统日志,守护进程启动和运行期间错误的信息
    • 将消息写入到结构化的事件日志中(数据库),默认情况下重启后删除
    • syslog 的信息也可以由 systemd-journald 转发到 rsyslog 中进一步处理
    • 默认情况下,systemd 的日志保存在 /run/log/journal 中,系统重启就会清除,这是RHEL7的新特性。通过新建 /var/log/journal目录,日志会自动记录到这个目录中,并永久存储。
    • rsyslog 服务随后根据优先级排列日志信息,将它们写入到 /var/log目录中永久保存

   (1)journalctl            ##日志查看工具
          -n 3               ##查看最近三条日志
          -p err             ##查看错误日志
          -0 verbose       ##查看日志的详细参数
          --since           ##查看从什么时间开始的日志
          --until          ##查看到什么时间为止的日志

                                             

   (2)如何是使用systemd-journald保存系统日志
     

     默认情况下,systemd日志保存在/run/log/journal中,systemd-journald是不保存系统日志到硬盘的,那么关机后再开机只能看到本次开机之后的日志,上次关机之前的日志是无法查看的。如果将日志保存在/var/log/journal目录,这样做的优点是启动后就可以利用历史数据,形成永久日志

        实现步骤:
      mkdir /var/log/journal
      chgrp systemd-journal /ver/log/journal
      chmod g+s /ver/log/journal
      killall -1 systemd-journald

      ls /ver/log/journal
  

原文地址:https://www.cnblogs.com/purple5252/p/11911367.html