Linux日志(rsyslog、logrotate、journalctl、logger)

一、日志文件

所谓日志(Log)是指系统所指定对象的某些操作和其操作结果按时间有序的集合。每个日志文件由日志记录组成,每条日志记录描述了一次单独的系统事件

通常情况下,系统日志是用户可以直接阅读的文本文件,其中包含了一个时间戳和一个信息或者子系统所特有的其他信息。日志文件为服务器、工作站、防火墙和应用软件等IT资源相关活动记录必要的、有价值的信息,这对系统监控、查询、报表和安全审计是十分重要的。

日志文件中的记录可提供以下用途:监控系统资源;审计用户行为;对可疑行为进行告警;确定入侵行为的范围;为恢复系统提供帮助;生成调查报告;为打击计算机犯罪提供证据来源

linux主机在后台有相当多的daemons同时在工作,这些工作中的进程总是会显示一些信息,这些重要信息最终会被记录到日志文件中。日志文件可以记录系统在什么时间、哪个主机、哪个服务、出现了什么信息等内容,这些信息也包括用户识别数据。系统故障排除须知等信息,善于利用这些日志信息,当系统出现出现错误时,可以从日志信息定位问题找到解决方案。

(一)Linux常见的日志文件

日志文件是重要的系统信息文件,其中记录了许多重要的系统事件,包括用户的登录信息、系统的启动信息、系统的安全信息、邮件相关信息、各种服务相关信息等。这些信息有些非常敏感,所以在 Linux 中这些日志文件只有 root 用户可以读取。

系统日志文件保存在/var/log/目录下,它是用来保存系统的动态数据

  • /var/log/boot.log

    开机启动的时候系统内核会去检测与启动硬件,然后开始启动各种内核支持的功能。这些流程都会记录到该文件中,不过只会存储本次开机启动的信息,之前的启动信息并不会保留下来

  • /var/log/cron

    记录计划任务crontab有没有被执行、执行过程中的错误、以及/etc/crontab是否编写正确等

  • /var/log/dmesg

    记录系统在开机的时候内核检测过程所产生的各项信息

  • /var/log/maillog或/var/log/mail/*

    记录邮件的往来信息。主要是记录postfix(SMTP协议提供者)与dovecat(POP3协议提供者)所产生的信息

  • /var/log/messages

    这个文件相当重要,几乎系统发生的错误信息(或重要信息)都会记录到这个文件中

  • /var/log/secure

    只要涉及到需要帐号密码登录的情况,那么当登陆时(无论登陆正确或错误)都会记录到该文件中。包括系统的login程序,图形用户界面模式登录所使用的gdm、su、sudo等程序,还有网络连接的ssh、telnet等程序,登录信息都会被记录到这里

  • /var/log/wtmp、/var/log/faillog

    这两个文件可以记录正确登录系统者的账户信息(wtmp)与错误登录时所使用的账户信息(faillog)

  • 其他服务的日志文件

除系统默认的日志之外,采用 RPM 包方式安装的系统服务也会默认把日志记录在 /var/log/ 目录中(源码包安装的服务日志存放在源码包指定的目录中)

不过这些日志不是由 rsyslogd 服务来记录和管理的,而是各个服务使用自己的日志管理文档来记录自身的日志。以下介绍的日志目录在你的 Linux 上不一定存在,只有安装了相应的服务,日志才会出现。服务日志如下表 所示:

日志文件 说明
/var/log/httpd/ RPM包安装的apache服务的默认日志目录
/var/log/mail/ RPM包安装的邮件服务的额外日志目录
/var/log/samba/ RPM包安装的Samba服务的日志目录
/var/log/sssd/ 守护进程安全服务目录
/var/log/httpd/ RPM包安装的httpd服务的日志目录
/var/log/nginx/ RPM包安装的nginx服务的日志目录

(二)日志文件的产生

  1. 由软件开发商自行定义写入的日志文件与相关格式。
  2. 由Linux发行版本自行提供的日志文件管理服务来统一管理。只要将信息丢给这个服务后,它就会自己分门别类地将各种信息放置到相关的日志文件中,Centos提供rsyslog.service这个服务来统一管理日志文件

要注意的是,如果任凭日志文件持续记录的话,由于系统产生的信息天天都有,那么日志文件的容量将会越来越大,如果日志文件容量太大时,可能会导致系统空间不足,以及大文件读写效率不佳等问题

针对日志文件的服务与程序有:

  • systemd-journald.service :最主要的信息记录者,由systemd提供
  • rsyslog.service:主要收集登录系统与网络等服务的信息
  • logrotate:主要在进行日志文件的轮循功能

CenTOS 7.x 使用systemd提供的journalctl日志管理

CenTOS7.x除了既有的rsyslog.service之外,其实最上层还使用了systemd自己的日志文件管理功能,它使用的是systemd-journald.service这个服务。 基本上,系统由systemd所管理,那所有经由systemd启动的服务,如果再启动或结束的过程中发生一些问题或是正常的信息,就会将该信息由systemd-journald.service以二进制的方式记录下来,之后再将这些信息发送给rsyslog.service做进一步的记录。
systemd-journald.service的记录主要放置在内存中,因此在读取方面性能比较好。可以通过journalctl以及systemctl status unit.service 来查看各个不同服务的日志文件

(三)日志文件内容的一般格式

一般来说,系统产生的信息并记录下来的内容中,每条信息均会记录下面几项重要内容:

  1. 事件发生的日期和时间
  2. 发生此事件的主机名
  3. 启动此事件的服务名称(如systemd、crond等)或命令与函数名称(如su、login…)
  4. 该信息的实际内容

这些信息的内容是可以进行更改的,而且,这些信息可以作为系统除错之用。

二、rsyslog.service:记录日志文件的服务

(一)概述

rsyslog是一个快速处理收集系统日志的开源程序,提供了高性能、安全功能和模块化设计。

rsyslog 是syslog 的升级版,它将多种来源输入输出转换结果到目的地, rsyslog被广泛用于Linux系统以通过TCP/UDP协议转发或接收日志消息。

对于包括Linux系统,Windows服务器,路由器,交换机及其它主机能在网络上发送日志信息的这类设备,日志服务器都可以用作于它们在网络上的重要日志监控点。通过日志服务器,你能从不同的主机及设备过滤和合并日志信息于一个单一的位置,所以你能很容易的查看及存档日志信息。

rsyslog 作为标准的 syslog 守护进程,预装在了大多数的 Linux 发行版中。在客户端/服务器架构的配置下,rsyslog 同时扮演了两种角色:

  • 一种是配置成日志收集服务器,rsyslog进程可以从网络中收集其它主机上的日志数据,这些主机会将日志配置为发送到另外的远程服务器;
    在这里插入图片描述
    在这里插入图片描述

  • 另一种是配置为客户端,用来过滤和发送内部日志消息并保存到本地目录中(如/var/log)或一台可以路由到的远程rsyslog服务器上。

rsyslog特性:

  1. 支持输出日志到各种数据库,如 MySQL,PostgreSQL,MongoDB,ElasticSearch,等等;
  2. 通过 RELP + TCP 实现数据的可靠传输(基于此结合丰富的过滤条件可以建立一种 可靠的数据传输通道供其他应用来使用);
  3. 精细的输出格式控制以及对消息的强大 过滤能力;
  4. 高精度时间戳;队列操作(内存,磁盘以及混合模式等); 支持数据的加密和压缩传输等。

(二)rsyslog.service的配置文件

==主配置文件:/etc/rsyslog.conf 自定义配置文件:/etc/rsyslog.d/*.conf ==

为了让不同的信息放置到不同的文件当中,好让我们分门别类的进行日志文件的管理,所以,将各种类别服务的日志文件记录在不同的文件里面,就是/etc/rsyslog.conf所要做的规范了

主配置文件 /etc/rsyslog.conf 大概分为三个部分:MODULES、GLOBAL DIRECTIVES、RULES

1. MODULES

用来配置要加载的模块,这个部分是针对接收配置的,主要是指定接收日志的协议和端口。 若要配置日志服务器,则需要将相应的配置项去掉注释。

#### MODULES ####  --->启动/sbin/rsyslogd要加载的模块
格式:$ModLoad module-name #注释
            $ModLoad 是关键字(/sbin/rsyslogd程序中定义的变量名)
            module-name:出现在/lib64/rsyslog/ 中的模块名称,记住不带.so

#### MODULES ####             #定义模块的相关信息,这个部分是针对接收配置的,主要是指定接收日志的协议和端口。若要配置日志服务器,则需要将相应的配置项去掉注释。

$ModLoad imuxsock             #imuxsock模块,支持本地系统日志的模块
$ModLoad imjournal            #imjournal模块,支持对系统日志的访问(此模块与上一模块默认启用)
#$ModLoad imklog              #imklog模块,支持内核日志的模块
#$ModLoad immark              #immark模块,支持日志标记

# Provides UDP syslog reception    #提供远程rsyslog日志的udp协议的接收支持
# $ModLoad imudp                   #imudp模块,用于支持udp协议
# $UDPServerRun 514                #允许通过514端口接收使用udp协议的远程日志(如果要修改为非514的端口, 需要设置selinux)
# Provides TCP syslog reception    #提供远程rsyslog日志的tcp协议的接收支持(如果要修改为非514的端口, 需要设置selinux)
# $ModLoad imtcp                   #imtcp模块,用于支持tcp协议
# $InputTCPServerRun 514           #允许通过514端口接收使用tcp协议的远程日志

模块:

[root@server /lib64/rsyslog]# ls
imdiag.so      lmnsd_ptcp.so  omprog.so
imfile.so      lmregexp.so    omruleset.so
imjournal.so   lmstrmsrv.so   omstdout.so
imklog.so      lmtcpclt.so    omtesting.so
immark.so      lmtcpsrv.so    omuxsock.so
impstats.so    lmzlibw.so     pmaixforwardedfrom.so
imptcp.so      mmanon.so      pmcisconames.so
imtcp.so       mmcount.so     pmlastmsg.so
imudp.so       mmexternal.so  pmrfc3164sd.so
imuxsock.so    mmutf8fix.so   pmsnare.so
lmnet.so       omjournal.so
lmnetstrms.so  ommail.so

2. GLOBAL DIRECTIVES

全局配置,配置ryslog守护进程的全局属性,比如定义日志格式默认模板(日志采集格式)、工作目录

#### GLOBAL DIRECTIVES #### ----->全局规则设定
     格式:
           #注释
           规则内容
      例如:
         # Include all config files in /etc/rsyslog.d/
         $IncludeConfig /etc/rsyslog.d/*.conf		 含义为启动时要读取/etc/rsyslog.d/中所有以.conf为结尾的文件
         $WorkDirectory /var/lib/rsyslog 			 指定工作目录
         
 #### GLOBAL DIRECTIVES ####    #定义全局日志格式的指令;主要用来配置模板,模板的作用是指定你希望在日志文件中保存的日志格式。

# Where to place auxiliary files
$WorkDirectory /var/lib/rsyslog       #工作目录

# Use default timestamp format
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat   #定义日志格式默认模板(可以自行设定日志记录格式)

# $ActionFileEnableSync on                             #文件同步功能,很少用,默认禁止

# Include all conifig files in /etc/rsyslog.d/
$IncludeConfig /etc/rsyslog.d/*.conf                   #需要引入的自定义配置文件的路径

$OmitLocalLogging on                                      #关闭通过本地日志接口接收消息,现使用imjournal模块作为替代

# File to store the position in the journal
$IMJournalStateFile imjournal.state                   #将文件存储在日志中

用户可根据需求自定义要记录的日志内容和格式等

模板(templates)

模板允许指定日志信息的内容和格式,也可用于生成动态文件名,在规则中使用

定义如下:

$template TEMPLATE_NAME,"text %PROPERTY% more text", [OPTION]

# 其中TEMPLATE_NAME是模板的名字(自行定义),PROPERTY是rsyslog本身支持的一些属性参数。

系统默认格式为:$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat

自定义默认的日志格式举例:

第一种: 在【GLOBAL DIRECTIVES】中配置日志采集格式

  1. 全局指令必须以 $ 开头

  2. 内部变量需要使用 一对百分号 括起来

  3. 日志采集格式:$template myFORMAT,“%timegenerated% %FROMHOST-IP% %syslogtag% %msg%\n”

    • $template 采集格式定义
    • myFROMAT 模块名,可随意命名
    • %timegenerated% 显示日志时间
    • %FROMHOST-IP% 显示主机IP
    • %syslogtag% 日志记录目标
    • %msg% 日志内容,或者%rawmsg%
    • \n 换行符
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat

# 在配置文件的【GLOBAL DIRECTIVES】区域添加以下一行
$template myFORMAT,“%timegenerated% %FROMHOST-IP% %syslogtag% %msg%\n”

如果像以上这样配置,那么要想采用默认的日志格式(即RSYSLOG_TraditionalFileFormat), 则在每条规则后不需要做其他任何设置;对于需要使用自定义日志格式(模块)的规则就需要在日志文件后添加自定义的模板名, 并用;号分隔

au
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值