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

一.rsyslog服务   

在系统日常的工作中,进程会产生很多的日志信息,这些信息如果都放进内存的话,那么很快就会因为内存不足而导致系统崩溃的,

这就需要有一个“搬运工”来将在内存中产生的日志信息回收到硬盘中存储起来,而这个“搬运工”就是本章要介绍的rsyslog服务。

1.rsyslog的简介

rsyslog是syslog的升级版本, 其在RHEL5的版本中, 名称为syslog。在RHEL6/7其升级为rsyslog。 rsyslog是一个日志管理系统,记录过去某个时间发生的事件,

及事件级别进行定义并记录到指定位置。其支持C/S架构,可通过UDP/TCP协议提供日志记录服务。rsyslog日志格式较为简单。

 

2.rsyslog服务的进程

syslogd : 系统日志(用户空间的各应用程序相关的日志)

Klogd : 内核日志(kernel相关的日志),在RHEL6中, Klogd由syslog代为管理.

 

3.rsyslog的特性

  • 多线程的服务,并发性能好
  • 可以使用udp,tcp,ssl,tls,relp等协议完成信息收集
  • 将日志可存储在mysql,pgsql,oracle等数据库管理系统中
  • 强大的自定义过滤器,实现过滤日志信息中任何部分内容
  • 自定义输出格式

 

4.rsyslog的管理

 

rsyslog管理的日志文件为:

/var/log/messages          ##服务信息日志

/var/log/secure                ##系统登陆日志

/var/log/cron                 ##定时任务日志

/var/log/maillog               ##邮件日志

/var/log/boot.log             ##系统启动日志

 

rsyslog服务的主配置文件为:etc/rsyslog.conf

 

修改服务配置文件的书写格式为:

"服务的类型.服务的级别"         +  服务日志存放位置如:/var/log/file    


日志类型分为:

auth                      ##pam产生的日志authpriv                

authpriv           ##ssh,ftp等登陆信息的验证信息

cron                      ##时间任务相关

kern                      ##内核

lpr                    ##打印

mail                      ##邮件

mark(syslog)-rsyslog        ##服务内部的信息,时间标识

news                    ##新闻组   

user                     ##用户程序产生的相关信息

uucp                    ##unix to unix copy, unix主机之间相关的通讯    

local 1~7                ##自定义的日志设备



日志级别分为:

debug                ##有调式信息的,日志信息最多

info                  ##一般信息的日志,最常用

notice                 ##最具有重要性的普通条件的信息

warning                ##警告级别

err                   ##错误级别,组织某个功能或者模块不能正常工作的信息

crit                  ##严重级别,组织整个系统或者整个软件不能正常工作的信息

alert                     ##需要立刻修改的信息

emerg                  ##内核崩溃等严重信息

none                    ##什么都不记录



注意:上述从上到下,级别从低到高,记录的信息越来越少,详细的可以查看手册:man 3 syslog





5.日志的远程同步

当我们用一台主机去管理多台主机时,为了同时监测多台主机,我们需要让所有的主机自动发送他们的日志到服务端,

这就是日志的远程同步,下面介绍详细操作。

在日志的发送方:
          vim  /etc/rsyslog.conf        ##修改rsysylog服务配置文件
在第54行之后    *.*   @172.25.254.200           ##@表示udp协议发送,@@表示tcp协议发送
                   

在日志接受方:
           vim  /etc/rsyslog.conf        ##修改rsysylog服务配置文件       
在第15行    $ModLoad imudp             ##日志接受模块
在第16行    $UDPServerRun 514          ##开启接受端口

systemctl  restart rsyslog        ##修改完配置文件之后要重启服务
systemctl  stop    firewalld              ##关闭火墙
systemctl  disable firewalld          ##设定火墙开机不启动


测试:
在发送方和接受方都清空日志文件
> /var/log/messages

在日志发送方
logger test

在日志接收方查看
cat /var/log/messages

 

        ——————关于udp与tcp协议——————

1.udp协议

简介:UDP 是User Datagram Protocol的简称, 它的中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,

提供面向事务的简单不可靠信息传送服务,IETF RFC 768是UDP的正式规范。UDP在IP报文的协议号是17。 UDP协议全称是用户数据报协议,在网络中它与TCP协议一

样用于处理数据包,是一种无连接的协议。在OSI模型中,在第四层--传输层,处于IP协议的上一层。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,

也就是说,当报文发送之后,是无法得知其是否安全完整到达的。UDP协议的主要作用是将网络数据流量压缩成数据包的形式。一个典型的数据包就是一个二进制数据的

传输单位。每一个数据包的前8个字节用来包含报头信息,剩余字节则用来包含具体的传输数据。

连接方式:在选择使用协议的时候,选择UDP必须要谨慎。在网络质量令人十分不满意的环境下,UDP协议数据包丢失会比较严重。但是由于UDP的特性:它不属于连接型协议,

因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。

比如我们聊天用的ICQ和QQ就是使用的UDP协议。

 

2.tcp协议

简介:TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。在简化的计算机网络OSI模型中,它

完成第四层传输层所指定的功能,用户数据报协议(UDP)是同一层内另一个重要的传输协议。在因特网协议族(Internet protocol suite)中,TCP层是位于IP层之上,应用层之下的

中间层。不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换。

TCP是因特网中的传输层协议,使用三次握手协议建立连接。当主动方发出SYN连接请求后,等待对方回答TCP的三次握手SYN+ACK,并最终对对方的 SYN 执行 ACK 确认。这一过程

与打电话很相似,先拨号振铃,等待对方摘机说"喂",然后才说明是谁。在一个TCP连接中,仅有两方进行彼此通信。广播和多播不能用于TCP。这种建立连接的方法可以防止产生错误

的连接,TCP使用的流量控制协议是可变大小的滑动窗口协议。

 

 



        ——————日志采集格式的设定——————


$template LOGFMT, "%timegenerated% %FROMHOST-IP% %syslogtag% %msg%\n"


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




         ——————时间同步服务————————

1.服务名称:
chronyd

Rhel7时间同步服务器(默认)chrony    端口:323

chrony是一个开源软件,可实现系统时钟和时钟服务器同步,让时间保持精确

它由两部分组成:chronyd和chronyc

其中chronyd是后台运行的守护进程,用于调整内核中运行的系统时钟和时钟服务器同步。

Chronyc提供了用户界面,用于监控性能并进行多样化的配置。

启动chrony时,系统会自动读取/etc/chronyd.conf配置文件中的设置

 

systemctl start chronyd

chronyc sources –v      查看时间同步源,查看时间同步进度

*说明时间同步完成,如果为?说明不成功,检查防火墙再看看chronyd有没有重启。

chronyc sourcestats -v    查看时间同步源状态

 

配置文件简介:

vim /etc/chrony.conf

server 0.centos.pool.ntp.org iburst        //”必须以server “格式使用,添加的是时钟服务器

server 1.centos.pool.ntp.org iburst

server 2.centos.pool.ntp.org iburst

server 3.centos.pool.ntp.org iburst

 

# Ignore stratum in source selection.

stratumweight 0        //设置当chronyd从可用源中选择同步源时,每个层应该添加多少距离到同步距离。默认设置为0,让chronyd在选择源时忽略源的层级。
 

# Record the rate at which the system clock gains/losses time.

driftfile /var/lib/chrony/drift      //记录系统时钟增益/损耗时间的速率。

 

# Enable kernel RTC synchronization.

rtcsync       //该指令启动一个内核模式,作用:系统时间每11分钟会拷贝到实时时钟    

 

# In first three updates step the system clock instead of slew

# if the adjustment is larger than 10 seconds.

makestep 10 3       //chronyd将根据需求通过减慢或加速时钟,使得系统逐步纠正所有时间偏差。
 

# Allow NTP client access from local network.

#allow 192.168/16       

#deny 192.168.25.100     //这里可以指定一台主机、子网或者网络作为白/黑名单
allow表示允许哪些客户端来共享本机的时间
 

# Listen for commands only on localhost.

bindcmdaddress 127.0.0.1      //允许限制chronyc监听哪个网络接口的命令包

bindcmdaddress ::1

 

# Serve time even if not synchronized to any NTP server.

#local stratum 10       //这个功能开启后,本机不去同步别人的时间到本机

 

keyfile /etc/chrony.keys    //该配置文件中,参数generatecommandkey指定了产生一个SHA1或MD5加密的密码,存放在/etc/chrony.keys中

2.操作流程:

 

在服务端:

      vim /etc/chrony.conf

在第22行    allow 172.25.254.0/24           ##允许哪些客户端来同步本机时间
在第29行    local stratum 10                  ##本机不同不任何主机的时间,本机只作为时间源
systemctl restart chronyd                      ##重启服务
timedatectl set-timezone Asia/Shanghai              ##更改当前时区为东八区


在客户端:


         vim /etc/chrony.conf
server 172.25.254.209 iburst                   ##本机立即同步200的时间##
systemctl restart chronyd                 ##重启服务
timedate set-timezone Asia/Shanghai               ##更改当前时区为东八区

测试:


在客户端:
chronyc sources -v

结果如下:

Number of sources = 1

  .-- Source mode  '^' = server, '=' = peer, '#' = local clock.
 / .- Source state '*' = current synced, '+' = combined , '-' = not combined,
| /   '?' = unreachable, 'x' = time may be in error, '~' = time too variable.
||                                                 .- xxxx [ yyyy ] +/- zzzz
||                                                /   xxxx = adjusted offset,
||         Log2(Polling interval) -.             |    yyyy = measured offset,
||                                  \            |    zzzz = estimated error.
||                                   |           |                        
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================

^? 172.25.254.209                0   6     0   10y     +0ns[   +0ns] +/-    0ns





        ——————timedatectl命令——————
1.命令:
timedatectl         ##管理系统时间


2.常用参数:        
timedatectl   status         ##显示当前时间信息
             set-time        ##设定当前时间
             set-timezone     ##设定当前时区
             setlocal-rtc 0|1     ##设定是否使用utc时间
             list-timezone      ##查看支持的所有时区


        ——————journal命令——————

1.命令

journalctl                    ##日志查看工具,直接查看内存中的日志

2.常用参数

    -n   3                     ##查看最近三条日志
    -p   err                       ##查看错误日志
    -o   verbose                 ##查看日志的详细参数
    --since"时间"                ##查看从什么时间开始的日志
    --until                    ##查看到什么时间为止的日志



3.如何使用systemd-journald 保存系统日志

 

默认systemd-journald是不保存系统日志到硬盘的,那么关机后再次开机只能看到本机开机之后的日志

上一次关机之前的日志是无法查看的,要想查看关机之前的日志需要以下操作:



mkdir /var/log/journal
chgrp systemd-journal /var/log/journal
chmod g+s /var/log/journal
killall -1 systemd-journald

ls /var/log/journal


注:产生的数据不能用cat看,直接输入journalctl即可查看

posted on 2018-07-28 15:38  对方正在输入你的  阅读(382)  评论(0编辑  收藏  举报

导航