Linux日志文件

什么是日志文件

【仔细而确实地分析以及备份系统的日志文件】是一个系统管理员应该要进行的任务之一。那么是是日志文件呢?简单来说,就是记录系统活动信息的几个文件,例如:何时、何地(来源 IP)、何人(什么服务名称)、做什么什么操作(信息登录)。

日志文件简易说明

要知道的是,我们的Linux主机在后台有相当多的daemons同时在工作,这些工作中的进程总是会显示一些信息,这些显示的信息最终会被记录到日志文件中。也就是是说,记录这些系统的重要信息就是日志文件的工作。

日志文件的重要性

为什么说日志文件很重要,重要到系统管理员需要随时要注意它?我们可以这么说:

日志文件是记录系统运行过程中发生的事件和错误的文件。系统管理员需要随时注意它,因为通过查询日志文件,可以解决系统错误、网络服务问题以及了解过往事件的记录。比如,如果系统出现问题,管理员可以查询日志文件了解具体原因;如果网络服务无法启动,管理员可以查询特定的日志文件解决问题;而且日志文件还可以记录系统中的重要事件,例如网络攻击等。因此,日志文件对于系统管理员来说,是非常重要的工具。

Linux常见的日志文件文件名

日志文件可以帮助我们了解很多系统重要的事件,包括登录者的部分信息,因此日志文件的权限通常是仅设置为仅有root能够读取而已。而由于日志文件可以记录系统这么多的详细信息,所以,一个有经验的主机管理员会随时地查看自己的日志文件,以随时掌握系统的最新动态。

常见的日志文件有如下几个:

  • /var/log/boot.log

/var/log/boot.log 是Linux系统在引导时记录的日志文件,它包含了系统启动期间所有的启动信息和错误信息。在系统启动过程中,Linux会执行一系列的启动脚本,包括加载内核、初始化硬件、挂载文件系统、启动服务等。这些启动过程中的信息会被记录到/var/log/boot.log文件中,方便系统管理员在系统启动时分析和解决问题。通常,这个文件会在每次系统启动时被更新。
/var/log/boot.log文件中的信息通常是以时间戳和进程ID(PID)为标识进行记录的,方便系统管理员进行问题定位和分析。在这个文件中,可以找到很多有用的信息,例如硬件检测信息、文件系统挂载信息、网络配置信息、启动服务信息以及错误信息等。通常情况下,这些信息可以帮助系统管理员快速识别系统启动过程中的问题,并加以解决。

  • /var/log/cron

/var/log/cron日志文件是Linux系统中记录cron作业执行情况的日志文件。cron是一个Linux系统中用于定时执行任务的工具,它可以让用户在指定的时间和频率自动执行一些操作,例如备份数据、执行脚本等。当cron作业执行时,它会将执行结果写入/var/log/cron文件中,方便用户查看作业执行情况以及排查问题。
/var/log/cron日志文件中记录了每个cron作业的执行时间、执行结果以及执行命令等信息。每条记录通常包括以下几个字段:

  1. 时间戳:记录作业执行时间的时间戳。
  2. 主机名:执行作业的主机名。
  3. cron作业执行用户:执行作业的用户。
  4. 执行命令:执行的命令或脚本。
  5. 执行结果:执行命令的结果,包括标准输出和错误输出。
    /var/log/cron日志文件可以帮助系统管理员追踪cron作业的执行情况,当作业无法正常执行或者出现错误时,管理员可以通过查看日志文件来定位问题并进行排查。此外,管理员还可以通过配置logrotate等工具来定期轮换/var/log/cron日志文件,以免日志文件过大影响系统性能。
  • /var/log/dmesg

/var/log/dmesg是Linux系统中记录内核启动信息的日志文件。在Linux系统引导时,内核会执行一系列的操作,例如检测硬件、加载驱动程序、初始化系统等。在这个过程中,内核会输出一些信息,包括硬件信息、驱动程序信息、系统参数等。这些信息会被记录到/var/log/dmesg文件中,以便管理员进行查看和分析。
/var/log/dmesg文件中的信息通常是内核输出的最新信息,包括一些重要的信息,例如内核版本、CPU信息、内存信息、硬盘信息、设备驱动信息、系统参数等。这些信息对于系统管理员来说是非常有用的,可以帮助管理员快速了解系统的硬件配置和系统参数,以及在系统启动过程中出现的问题。
需要注意的是,/var/log/dmesg文件通常只记录内核启动时的信息。如果需要查看完整的系统日志,应该查看其他日志文件,例如/var/log/messages/var/log/syslog等。同时,/var/log/dmesg文件的大小是有限制的,当文件大小达到一定值时,系统会自动清除旧的记录,以腾出空间记录新的日志信息。

  • /var/log/lastlog

/var/log/lastlog 日志文件是一个系统日志文件,用于记录用户最后一次登录的相关信息。它记录了每个用户最后一次登录系统的时间、来源IP地址和登录方式等信息。
当一个用户成功登录到系统时,系统会记录该用户的登录信息到 /var/log/lastlog 日志文件中。如果该用户之前从未登录过系统,那么 /var/log/lastlog 文件中将没有该用户的记录。
需要注意的是,/var/log/lastlog 日志文件只能由 root 用户或者有权限的用户才能访问和查看。同时,该文件的格式是二进制格式,无法直接查看。如果需要查看该文件的内容,需要使用特定的工具,如 lastlog 命令。
/var/log/lastlog 日志文件对于系统管理员来说非常有用,可以帮助他们追踪用户的登录历史和行为,进一步保障系统的安全性。

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

/var/log/maillog/var/log/mail/* 日志文件是用于记录邮件系统的日志文件。邮件系统通常包括邮件服务器、邮件代理、邮件客户端等组件,这些组件会在邮件的发送、接收和传递过程中产生大量的日志信息。
/var/log/maillog 文件是一个主要的邮件系统日志文件,它记录了邮件系统的各种操作事件,如邮件的发送、接收、投递、转发、垃圾邮件过滤等等。该文件中的日志信息可以帮助系统管理员了解邮件系统的运行状况、排查邮件系统的故障以及监控邮件的安全性。
/var/log/mail/* 目录包含了一些其他的邮件系统日志文件,如 mail.errmail.infomail.warn 等。这些文件包含了不同级别的邮件系统日志信息,可以根据需要进行查看。例如,mail.err 文件记录了邮件系统的错误信息,而 mail.info 文件记录了一般的信息。
需要注意的是,邮件系统日志文件可能会非常庞大,因此系统管理员需要定期对其进行清理和归档,以避免占用过多的磁盘空间。同时,为了保障邮件系统的安全性,这些日志文件只能由 root 用户或者有权限的用户才能访问和查看。

  • /var/log/messages

/var/log/messages 日志文件是一个系统日志文件,用于记录系统各个组件的日志信息,如内核、系统服务、应用程序等。它包含了系统的各种操作事件,如启动、关机、用户登录、系统错误等等。
/var/log/messages 文件中的日志信息非常丰富,可以帮助系统管理员了解系统的运行状况和问题。例如,该文件中的错误信息可以帮助管理员快速定位系统故障,而登录信息可以帮助管理员追踪用户的登录历史和行为。
需要注意的是,/var/log/messages 文件是一个非常重要的系统日志文件,因此需要定期备份和归档,以避免日志文件过大导致系统性能下降。同时,为了保障系统的安全性,该文件只能由 root 用户或者有权限的用户才能访问和查看。
除了 /var/log/messages 文件之外,不同的 Linux 发行版还可能有其他的系统日志文件,如 Red Hat 系统中的 /var/log/secure 文件用于记录安全相关的日志信息。系统管理员需要根据实际情况选择查看不同的系统日志文件来了解系统的运行状况。

  • /var/log/secure

/var/log/secure 日志文件是一个系统日志文件,主要用于记录与系统安全相关的信息,如用户登录、认证、授权、sudo 使用等等。该日志文件包含了系统的安全事件,可以帮助系统管理员了解系统的安全状况和监控系统的安全性。
/var/log/secure 文件通常包含了以下类型的安全事件信息:

用户登录和注销事件,包括登录方式、来源 IP 地址、登录时间等信息;

用户密码认证事件,包括密码认证成功或失败、认证方式、用户名称等信息;

sudo 使用事件,包括执行的命令、执行用户、执行时间等信息;

PAM 认证事件,包括 PAM 模块名称、认证结果等信息;

SELinux 安全事件,包括 SELinux 策略的执行结果等信息。
需要注意的是,/var/log/secure 文件是一个非常重要的系统日志文件,其中的安全事件信息可以帮助管理员了解系统的安全状况并及时发现潜在的安全威胁。因此,该日志文件只能由 root 用户或者有权限的用户才能访问和查看。

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

/var/log/wtmp 日志文件是一个系统日志文件,用于记录系统中所有用户的登录和注销事件。该日志文件包含了用户登录和注销的时间、源 IP 地址、登录方式等信息,可以帮助系统管理员追踪用户的登录历史和行为,以及监控系统的安全状况。
/var/log/wtmp 文件通常包含了以下类型的登录事件信息:

用户登录和注销事件,包括登录方式、来源 IP 地址、登录时间等信息;

远程登录事件,包括 SSH、telnet 等远程登录方式的登录事件信息;

控制台登录事件,包括本地终端登录方式的登录事件信息。
需要注意的是,/var/log/wtmp 文件是一个非常重要的系统日志文件,其中包含了非常敏感的用户登录信息,因此只能由 root 用户或者有权限的用户才能访问和查看。
/var/log/faillog 日志文件是一个系统日志文件,用于记录系统中用户登录认证失败的事件。该日志文件包含了用户登录失败的次数、时间、来源 IP 地址等信息,可以帮助系统管理员了解系统的安全状况和监控用户的登录行为。
/var/log/faillog 文件通常包含了以下类型的登录失败事件信息:

用户密码认证失败事件,包括密码认证失败的次数、时间、来源 IP 地址等信息;

PAM 认证失败事件,包括 PAM 模块名称、认证结果等信息;

SSH 登录失败事件,包括 SSH 认证失败的次数、时间、来源 IP 地址等信息。
需要注意的是,/var/log/faillog 文件是一个非常重要的系统日志文件,其中包含了用户的登录认证失败信息,可以帮助管理员发现潜在的安全威胁和密码暴力破解行为。因此,该日志文件只能由 root 用户或者有权限的用户才能访问和查看。

  • **/var/log/httpd/ *、/var/log/samba/ ***

/var/log/httpd/* 日志文件是一个系统日志文件,用于记录 Apache HTTP 服务器的访问日志和错误日志信息。该日志文件包含了 HTTP 请求的详细信息、响应代码、来源 IP 地址等信息,可以帮助系统管理员了解服务器的访问情况,以及排查 HTTP 请求的问题和错误。

/var/log/samba/* 日志文件是一个系统日志文件,用于记录 Samba 服务器的访问日志和错误日志信息。该日志文件包含了 Samba 服务器的访问情况、用户登录信息、文件和目录操作信息等,可以帮助管理员了解 Samba 服务器的使用情况和排查访问问题。

日志文件内容的一般格式

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

  • 事件发生的日期与时间

  • 发生此事件的主机名

  • 启动此事件的服务名称(如 systemd、cron等)或命令与函数名称(如 su、login…)

  • 该信息的实际内容

    当然这些信息【详细度】是可以修改的,而且这些信息可以作为系统除错之用。我们来拿登录时一定会记录账户信息的 /var/log/secure为例:

    使用cat /var/log/secure

image-20230516164832684

我们拿第一条数据(共两行)来说明,该数据是说:【在5月16日 的14:26分左右,在名为localhost主机登录,由login这个程序产生的信息,内容显示root 在tty1登录了,而相关的权限设置是通过pam_unix模块处理(共两行内容)】后面的信息说明可以自行翻译一下

其实还有很多的信息值得查看,尤其是/var/log/messages的内容。记得常常去【巡视】日志文件的内容。尤其是下面几种情况

  • 当你觉得系统似乎不太正常时
  • 某个daemon老是无法正常启动时
  • 某个用户老是无法登录时
  • 某个daemon执行过程老是不顺畅时

还有很多,反正觉得系统不太正常,就得要查询查询日志文件了。

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

Linux日志文件主要由rsyslog.service负责,查看Linux是否启动了rsyslog

[root@localhost ~]# ps aux |grep rsyslog
root       1084  0.0  0.0 216400  4092 ?        Ssl  14:26   0:00 /usr/sbin/rsyslogd -n
# 确实有启动的,daemon执行文件名为rsyslogd
[root@localhost ~]# systemctl status rsyslog.service
● rsyslog.service - System Logging Service
   Loaded: loaded (/usr/lib/systemd/system/rsyslog.service; enabled; vendor preset: enabled)
   Active: active (running) since 二 2023-05-16 14:26:44 CST; 2h 46min ago
     Docs: man:rsyslogd(8)
           http://www.rsyslog.com/doc/
 Main PID: 1084 (rsyslogd)
   CGroup: /system.slice/rsyslog.service
           └─1084 /usr/sbin/rsyslogd -n

# 也有启动这个服务,也有默认开机时也要启动这个服务

rsyslog.service的配置文件:/etc/rsyslog.conf

rsyslogd有一个主要的配置文件,即/etc/rsyslog.conf,用于配置记录哪些服务、哪个等级的信息以及将它们记录在哪里(设备或文件)。这个配置文件非常重要,因为它规定了日志记录的行为和位置。在这个配置文件中,用户可以通过指定不同的规则和模板来控制日志记录的行为。

服务名称[.=!]信息等级    信息记录的文件名或设备或主机
# 下面以mail这个服务产生的info等级为例
mail.info           /var/log/maillog_info
# 这一行说明:mail服务产生的大于等于info等级的信息,都记录到/var/log/maillog_info文件中的意思

我们将上面的数据简单的分为三个部分来说明:

服务名称

Linux内核的syslog支持的服务类型主要有下面这些

相对序号服务类型说明
0kern(kernel)用于记录内核相关的消息。
1user用于记录用户级别的消息。
2mail用于记录邮件相关的消息
3daemon用于记录守护进程相关的消息,例如systemd的信息就与这个有关
4auth用于记录安全相关的消息,如用户登录、身份验证等。
5syslog用于记录系统日志相关的消息。
6Ipr用于记录打印相关的消息。
7news用于记录新闻组相关的消息。
8uucp用于记录UUCP相关的消息。
9cron用于记录计划任务相关的消息(cron,at)
10authpriv与auth类似,但仅记录对安全性有影响的消息。
11ftp与FTP通讯协议有关的信息输出
16~23local0~local7用于用户自定义的日志记录服务,可以根据需要进行配置。

信息等级

同一个服务所产生的信息也是有差别的,有启动时仅通知系统而已的一般信息(informantion),有出现还不至于影响到正常运行的警告信息(warn),还有系统硬件发生严重错误时,所产生的重大问题信息(error)。信息到底有多少种严重的等级?基本上,Linux内核的syslog将信息分为8个主要的等级,根据syslog.h的定义,信息名称与数值的对应如下:

等技数值等级名称说明
7debug这是最低级别的日志信息,表示调试信息,通常用于调试应用程序或系统问题,只有在调试过程中才会产生这种级别的日志信息。
6info这个级别表示一般的信息事件,如应用程序启动、停止、用户登录、注销等。
5notice这个级别表示需要注意的事件,如系统启动、停止、重新加载配置文件等。
4warning
(warn)
这个级别表示系统中发生了警告事件,如硬盘空间不足、系统资源占用过高等。
3err
(error)
这个级别表示系统中发生了错误,但不会影响系统的整体稳定性,如应用程序错误、系统配置错误等。
2crit这个级别表示需要立即采取行动,但不会影响系统的整体稳定性,如系统资源不足、网络连接中断等。
1alert这个级别表示需要立即采取行动,但不会影响系统的整体稳定性,如严重的应用程序错误。
0emerg
(panic)
这是最高级别的日志信息,表示系统已经不可用,需要立即采取行动,如系统崩溃、硬件故障等。通常只有在最严重的情况下才会产生这种级别的日志信息。

基本上,在0(emerg)到6(info)的等级之间,等级数值越高代表越没事,等级靠近0则代表系统出现致命问题。

除了常规的0-6等级之外,还有两个特殊等级:debug和none。

  • Debug等级:该等级主要用于开发人员进行调试和测试时使用。在此等级下,程序会输出更详细的信息以供开发人员进行调试。
  • None等级:该等级主要用于禁止输出日志信息。在此等级下,程序不会输出任何日志信息,可以用于生产环境中减少日志输出对性能的影响。

当我们想要做一些错误检测,或是忽略掉某些服务的信息时,就用这两个东西。

信息等级之前还有【.=!】的连接符号,它代表的意思是这样的:

  • .:代表【比后面还要严重的等级(含该等级)都被记录下来】的意思,例如:mail.info 代表只要是mail的信息,而且该信息等级严重于info(含info本身)时,就会被记录下来的意思。
  • .=:代表所需要的等级就是后面接的等级而已,其他的不要
  • .!:代表不等于,就是除了该等级外的其他等级都记录。

一般来说,我们比较常用的是【.】这个连接符号

信息记录的文件名或设备或主机

再来则是这个信息要放置哪里的设置。下面是一些常见的放置处

  • 文件的绝对路径:通常就是放在/var/log 里面的文件
  • 打印机或其他:例如 /dev/lp0 这个打印机设备
  • 用户名称:显示给用户
  • 远程主机:例如 @localhost 当然,要对方主机也能支持才行
  • *:代表【目前在线的所有人】,类似wall这个命令的意义

服务、daemon与函数名称

syslog是一种系统日志服务,可以帮助收集和记录系统中发生的各种事件和错误信息,以便于系统管理员进行故障排除和性能优化。在Linux系统中,syslog通常由rsyslogd服务来管理。下面对syslog、rsyslogd和rsyslog-service进行详细解释:

  1. syslog
    syslog是一种标准的系统日志服务,用于记录各种系统事件和错误信息,包括系统启动和停止、用户登录和注销、应用程序错误等。syslog将日志信息存储在本地或远程的日志服务器上,以便于系统管理员进行查看和分析。
  2. rsyslogd
    rsyslogd是一种syslog服务的实现,它是Linux系统上最常用的syslog服务程序之一。rsyslogd可以通过配置文件进行自定义设置,以便于满足不同的系统日志需求。rsyslogd还支持通过网络将日志信息发送到远程日志服务器,以便于进行集中管理和分析。
  3. rsyslog-service
    rsyslog-service是Linux系统上的一个systemd服务单元,它用于管理rsyslogd服务的启动、停止和重启。rsyslog-service可以通过systemctl命令进行管理,例如:
  • systemctl start rsyslog:启动rsyslogd服务;

  • systemctl stop rsyslog:停止rsyslogd服务;

  • systemctl restart rsyslog:重启rsyslogd服务。
    使用rsyslog-service可以方便地管理rsyslogd服务,并确保其在系统启动时自动启动。

rsyslog.conf 语法练习

  1. 如果我要将我的mail相关的数据写入 /var/log/maillog当中,那么在/etc/rsyslog.conf的语法如何设计?
mail.info  /var/log/maillog

当我们等级使用info 时,那么【任何严重于info等级(含info这个等级)之上的信息,都会被写入到后面接的文件之中。】这样我们就可以将所以mail的登录信息都记录在/var/log/maillog里面

  1. 我要将新闻组数据(news)及计划任务(cron)的信息都写入到一个称为/var/log/cronnews的文件中,但是这两个程序的警告信息则额外地记录在 /var/log/cronnews.warn中,那么应该如何设置rsyslog.conf?

很简单,既然是两个程序,那么只要以分号来隔开了,此外,由于在第二个文件中我只要记录警告信息,因此设置上需要指定【.=】这个符号,所以语法称为了:

news.*;cron.* /var/log/cronnews
news.=warn;cron.=warn  /var/log/cronnews.warn

代码解释

这是两个rsyslog.conf的日志处理规则示例:

  • news.*;cron.* /var/log/cronnews
    这个规则将所有news和cron类别的日志消息记录到/var/log/cronnews文件中。其中,星号(*)表示匹配所有的消息级别,分号(;)用于分隔多个规则。因此,这个规则将匹配所有news和cron类别的日志消息,并将其记录到/var/log/cronnews文件中。

  • news.=warn;cron.=warn /var/log/cronnews.warn
    这个规则将所有news和cron类别的日志消息中级别为warn的记录到/var/log/cronnews.warn文件中。其中,等号(.=)用于仅匹配指定级别的消息,因此这个规则将仅匹配级别为warn的消息,并将其记录到/var/log/cronnews.warn文件中。

此外你需要注意的是,news与cron的警告信息也会写入/var/log/cronnews内。

  1. 我的messages这个文件需要记录所有的信息,但是就是不想要记录cron、mail及news的信息,那应该怎么写才好?

有两种写法,分别是:

*.*;news,cron,mail.none  /var/log/messages

*.*;news.none;cron.none;mail.none  /var/log/messages

代码解释

  • *.*;news,cron,mail.none /var/log/messages
    这个规则将所有日志消息记录到/var/log/messages文件中,但排除了news、cron和mail类别的日志消息。其中,星号(*)表示匹配所有的消息级别,分号(;)用于分隔多个规则。因此,这个规则将匹配所有日志消息,并将其记录到/var/log/messages文件中,但排除了news、cron和mail类别的日志消息。

  • *.*;news.none;cron.none;mail.none /var/log/messages
    这个规则与第一个规则类似,也是将所有日志消息记录到/var/log/messages文件中,但排除了news、cron和mail类别的所有日志消息。不同的是,这个规则使用了none关键字来排除指定类别的日志消息。因此,这个规则将仅匹配除news、cron和mail类别之外的所有日志消息,并将其记录到/var/log/messages文件中。

默认的rsyslog.conf内容

了解完语法后,来看看rsyslogd有哪些系统服务已经记录了?就是看看/etc/rsyslog.conf这个文件的默认内容。

#kern.*                                                 /dev/console
*.info;mail.none;authpriv.none;cron.none                /var/log/messages
authpriv.*                                              /var/log/secure
mail.*                                                  -/var/log/maillog
cron.*                                                  /var/log/cron
*.emerg                                                 :omusrmsg:*
uucp,news.crit                                          /var/log/spooler
local7.*                                                /var/log/boot.log

上面总共仅有8行设置值,每一行的意义是这样的:

  1. #kern.*:只要是内核产生的信息,全部都送到console(终端)去。console通常是由外部设备连接到系统而来,举例来说,很多封闭型主机(没有键盘、屏幕的系统)可以通过连接RS232接口将信息传输到外部的系统中,例如以笔记本电脑连接到封闭主机的RS232插口。这个项目通常应该是用在系统出现严重问题而无法使用默认的屏幕观察系统时,可以通过这个项目来连接获取内核的信息。
  2. *.info;mail.none;authpriv.none;cron.none:由于mail、authpriv、cron等类别产生的信息较多,且已经写入到下面的数个文件中,因此在/var/log/messages 里面就不记录这些项目,除此之外的其他信息都写入/var/log/messages中。这也是为什么说这个messages文件很重要的缘故。
  3. authpriv.*:认证方面的信息均写入 /var/log/secure文件
  4. mail.*:邮件方面的信息则均写入 /var/log/maillog文件
  5. cron.*:计划任务均写入 /var/log/cron文件
  6. *.emerg:当产生最严重的错误等级时,将该等级的信息以wall的方式广播给所有系统登录的账号,要这么做的原因是希望在线的用户能够赶紧通知系统管理员来处理这种错误问题
  7. uucp,news.crit:uucp是早期UNIX-like系统进行数据传递的通讯协议,后来常用在新闻组,news则是新闻组。当新闻组方面的信息由严重错误时就写入 /var/log/spooler文件中。
  8. local7.*:将本机启动时应该显示到屏幕的信息写入到/var/log/boot.log文件中。

上面的第四行关于mail的记录中,在记录的文件 /var/log/maillog前面还有个减号【-】是干什么用的?由于邮件所产生的信息比较多,因此我们希望邮件产生的信息先存储在速度较快的内容缓冲区中(buffer),等到了数据量大了才一次性地将所有数据都写入磁盘,这样将有助于日志文件的读取性能。只不过由于信息是暂存在内存中的,因此若不正常关机导致登录信息未回写到日志文件中,可能会造成部分数据的丢失。

此外,每个Linux发行版的rsyslog.conf 设置差异是颇大的,如果你想要找到对应的登录信息时,要查看一下 /etc/rsyslog.conf这个文件才行,否则可能会分析到错误的信息。

自行增加日志文件文件功能

如果你想要将【所有的信息】都额外写入到/var/log/admin.log这个文件时,你该怎么做呢?

  1. 先设置好所需添加的参数
[root@localhost ~]# vim /etc/rsyslog.conf
# Add by localhost 2023/5/17            # 自己修改时加入一些说明
*.info    /var/log/admin.log
  1. 重新启动rsyslogd
[root@localhost ~]# systemctl restart rsyslog.service
[root@localhost ~]# ll /var/log/admin.log 
-rw-------. 1 root root 816 517 10:18 /var/log/admin.log
# 可以看到已经建立了日志文件

如此一来,所有信息都会写入 /var/log/admin.log

日志文件的安全性设置

上面说了rsyslog.conf的重要性,所以,如果你幻想你是一个很厉害的黑客,想利用他人的计算机干坏事,然后又不想留下证据,你可以在离开的时候所以可能的信息都给它抹掉,所以第一个动脑筋的地方就是日志文件的清除工作,如果你的日志文件不见了该怎么办?

怎么防止日志文件被删除?或是被root自己不小心修改?我们可以通过一个隐藏的属性来设置你的日志文件,成为【只可以增加数据,但是不能删除】的状态,那么或许可以达到些许的保护

我们可以使用chattr设置 i 这个属性,那么该文件来连root都不能删除,而且也不能新增数据,很安全。但是,如此一来日志文件岂不是消失了?因为没法写入。所以,我们要使用的是 a 这个属性,你的日志文件如果设置了这个属性,那么它将只能被增加,而不能被删除,这个属性就非常符合我们对日志文件的需求

[root@localhost ~]# chattr +a /var/log/admin.log 
[root@localhost ~]# lsattr /var/log/admin.log 
-----a---------- /var/log/admin.log

加入了这个属性之后,你的 /var/log/admin.log 日志文件从此就仅能被增加,而不能被删除,直到root以【chattr -a /var/log/admin.log】取消这个 a 的参数之后,才能被删除或移动。

这个标识最大的用处除了在保护你的日志文件的数据外,它还可以帮助你避免不小心写入日志文件的状况。要注意的是,当【你不小心“手动”修改过日志文件后,例如 /var/log/messages 你不小心用vi打开它,离开却执行:wq参数,那么该文件未来将不会继续进行记录操作】,这个问题经常发生。由于你以vi 存储了日志文件,则rsyslogd会误判未该文件已被修改过了。将导致rsyslogd不在写入新内容到该文件。

要让日志文件可以继续写入,你只要重新启动 rsyslogd.service 即可,不过,总是比较麻烦。所以,如果你针对日志文件执行 chattr +a 参数,未来你就不需要害怕不小心修改到该文件了。因为无法写入,除了可以新增之外。

不过应为这个 +a 的属性让该文件无法被删除与修改,所以,当我们进行日志文件轮循(logrotate),将无法重命名日志文件,所以会造成很大的困扰。所以还是将日志文件的 +a拿掉

[root@localhost ~]# chattr -a /var/log/admin.log 
[root@localhost ~]# lsattr /var/log/admin.log 
---------------- /var/log/admin.log

日志文件的轮循(logrotate)

日志轮循(logrotate)是一种用于管理日志文件的工具,它可以帮助我们自动地对日志文件进行切割、压缩、删除等操作,以便于节省磁盘空间和方便日志文件的管理。下面是日志轮循的一些详细介绍:

轮循基本原理

日志文件在不断地记录信息,如果不对它进行处理,它会越来越大,最终可能会占满磁盘空间。而轮循的基本原理就是在某个时刻对日志文件进行切割,将已经记录的信息保存到一个新的文件中,同时将旧的日志文件进行压缩或删除。这样,就可以保留一定的日志信息,同时也不会浪费过多的磁盘空间。

它的执行结构有点类似下图

image-20230517211420584

由上图图例我们可以清除地知道,第一次执行时,原本的日志文件会被备份并重命名为messages.1,然后新建一个空的messages文件来存储日志。第二次执行时,messages.1会被备份并重命名为messages.2,messages会被重命名为messages.1,然后新建一个空的messages文件来存储日志。如果设置了保留三个日志文件,那么第四次执行时,最老的日志文件messages.3会被删除并由新的日志文件替换。最近的日志文件轮循后的文件名已经会加上日期参数并保留在系统中,以避免数据丢失。

轮循的基本配置

多久进行一次这样的轮循任务可以在logrotate.conf文件中找到。

[root@localhost ~]#  vim /etc/logrotate.conf 
# 下面的设置是"logrotate"的默认设置值,如果个别的文件设置了其他的参数
# 则将以个别的文件设置为主,若该文件没有设置到的参数则以这个文件的内容为默认值。
weekly             <== 默认每个星期对该日志文件进行一次轮循的任务
rotate 4           <== 保留几个日志文件,默认是保留4个1
create             <== 由于日志文件被更名,因此建立一个新的来继续存储的意思
dateext            <== 就是这个设置值,可以让被轮循的文件名称加上日期。
#compress          <== 被修改的日志文件是否需要压缩,若干日志文件太大则可考虑使用此参数
include /etc/logrotate.d
# 将 /etc/logrotate.d/ 这个目录中的所有文件都读进来执行轮循的任务。
/var/log/wtmp {            <== 仅针对/var/log/wtmp所设置值
    monthly                <== 每个月一次,替换每周
    create 0664 root utmp  <== 指定新建文件的权限与所属账号/组
        minsize 1M         <== 文件容量一定要超过 1M后才进行轮循(略过时间参数)
    rotate 1               <== 仅保留一个,就是仅又wtmp.1保留而已。
}
# 这个wtmp可记录登录者与系统重新启动时的时间与来源主机及登录期间的时间
# 由于具有 minsize 的参数,因此不见得每个月一定会进行一次,要看文件容量。
# 由于仅保留一个日志文件而已,不满意的话可以将它改成 rotate 5。

上面介绍了 /var/log/wtmp 这个文件的设置,logrotate.conf 的设置语法为:

日志文件的绝对路径与文件名 ...{
             个别的参数设置值,如monthly,compress等
}

常见的参数

参数作用
daily表示按天轮换日志文件
weekly表示按周轮换日志文件
monthly表示按月轮换日志文件
minsize只有达到或超过指定最小大小的日志文件才会进行轮转操作
size=当日志文件到达指定的大小时才转储,和minsize差不多
rotate 保留指定数量的旧日志文件,超过数量的旧日志文件将被删除
compress压缩旧日志文件
delaycompress延迟压缩,下次轮换时再压缩当前日志文件
missingok在日志轮循期间,任何错误将被忽略,例如“文件无法找到”之类的错误
notifempty如果日志文件为空,不轮换
sharedscripts在一次轮换中只执行一次postrotate脚本
create 创建一个空的日志文件,可以设置权限、拥有者和群组
postrotate在轮换后执行的命令或脚本,用于执行一些额外的操作,比如重新加载应用程序
prerotate在轮换前执行的命令或脚本,用于在轮换前执行一些操作
endscript结束pre/post-rotate中的命令或脚本块
dateext在日志文件名中添加日期扩展,以区分不同时间段的日志文件
copytruncate先拷贝日志文件再清空,避免应用程序继续写入问题
# 示例1 查看/etc/logrotate.d/rsyslog 如何设置的轮询文件
[root@chenshiren ~]# cat /etc/logrotate.d/rsyslog 
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
    missingok
    sharedscripts
    postrotate
        /usr/bin/systemctl -s HUP kill rsyslog.service >/dev/null 2>&1 || true
    endscript
}
# 文件名:被处理的日志文件绝对路径文件名写在前面,可以使用空格符分隔多个日志文件
# 参数:上述文件名进行轮循的参数使用{}包括起来
# 执行脚本:可调用外部命令来进行额外的命令执行,这个设置于sharedscripts....endscript 设置合用才行

那么 /etc/logrotate.d/syslog 内设置的5个文件轮循功能就变成了

  • 该设置只对 /var/log/ 内的 cron、maillog、messages、secure、spooler有效
  • 没有设置轮询时间默认日志文件轮循每周一次,保留4个且轮循下来的日志文件不进行压缩(未更改默认值)
  • 轮循完毕后(postrotate)取得syslog的PID后,以 kill -HUP重新启动syslogd

假设我们有针对 /var/log/messages 这个文件增加 chattr +a 属性时,依据logrotate的工作原理,我们知道,这个/var/log/messages 将会被更名未 /var/log/messages.1。但是由于加上这个 +a 的参数,所以更名是不可能成功的。那怎么办呢?就利用prerotate与postrotate来进行日志文件轮循前、后所需要做的操作。那么你可以这样修改一下文件

# 示例2 修改一下/etc/logrotate.d/rsyslog文件,在执行轮询之前加上+a这个参数
[root@chenshiren ~]# vim /etc/logrotate.d/rsyslog    
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
    missingok
    sharedscripts
    prerotate
       /usr/bin/chattr -a /var/log/messages
    endscript 
    sharedscripts
    postrotate
        /usr/bin/systemctl -s HUP kill rsyslog.service >/dev/null 2>&1 || true
        /usr/bin/chattr +a /var/log/messages
    endscript
}  

大概流程就是先给它去掉a 这个属性,让日志文件/var/log/messages 可以进行轮循操作。然后执行了轮循之后,再给他加入这个属性。

/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true解释:

第一部分 /bin/kill -HUPcat /var/run/syslogd.pid 2> /dev/null 表示发送 HUP 信号给进程号为 /var/run/syslogd.pid 的进程,即重启 syslogd 进程。
具体而言,这个命令会先使用 cat 命令读取 /var/run/syslogd.pid 文件中的进程号,然后将进程号传递给 /bin/kill 命令,发送 HUP 信号给该进程。2> /dev/null 表示将标准错误输出重定向到空设备,以防止错误信息被显示出来。如果 cat 命令或 /bin/kill 命令执行出错,进程号不存在或进程已经退出等情况,这个命令不会输出任何错误信息。
第二部分 2> /dev/null || true 表示将标准错误输出重定向到空设备,如果命令执行出错,返回值为非零值,会执行 true 命令,也就是不做任何处理,返回值为零。

这个命令的作用是确保即使重启 syslogd 进程出现错误,也不会导致整个脚本执行失败。

实际测试logrotate的操作

在Linux系统中,我们可以通过手动执行logrotate命令来对日志文件进行轮循。

logrotate [-vf] logfile
选项:
-v:启动显示模式,会显示logrotate运行的过程
-f:不论是否符合配置文件的数据,强制每个日志文件都进行轮循的操作

# 示例1 执行一次logrotate看看整个流程是什么?
[root@localhost ~]#  logrotate -v /etc/logrotate.conf
reading config file /etc/logrotate.conf      # 表示正在读取这个主配置文件;
including /etc/logrotate.d                   # 正在读取目录下的配置文件
reading config file bootlog                  # 正在读取目录下的bootlog配置文件
reading config file chrony                   # 正在读取目录下的chrony配置文件
......
......
......
Handling 17 logs                              # 共有18个日志文件被记录
......
......
......
rotating pattern: /var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
 weekly (4 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/cron # 开始处理cron
  log does not need rotating  # 时间未到,不需要修改
considering log /var/log/maillog
  log does not need rotating 
considering log /var/log/messages
  log does not need rotating 
considering log /var/log/secure
  log does not need rotating 
considering log /var/log/spooler
  log does not need rotating 
  
# 示例2 强制进行logrotate的操作
[root@chenshiren ~]# logrotate -vf /etc/logrotate.conf
......
......
......
rotating log /var/log/messages, log->rotateCount is 4
dateext suffix '-20240327'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
set default create context to system_u:object_r:var_log_t:s0
......
......
# 看到了吗?整个轮循的操作就是这样一步一步进行的
[root@chenshiren ~]# ll /var/log/messages* ; lsattr /var/log/messages
-rw-------. 1 root root     125  327 01:45 /var/log/messages
-rw-------. 1 root root 2241395  324 20:29 /var/log/messages-20240324
-rw-------. 1 root root 1613100  327 01:27 /var/log/messages-20240327
-----a---------------- /var/log/messages
# 主动加入a的隐藏属性

自定义日志文件的轮循功能

如果你想要将【所有的信息】都额外写入到/var/log/admin.log应该怎么配置?这个文件时现在,你想要将该文件加上 +a 这个隐藏属性,而且设置下面相关信息

  • 日志文件轮循一个月进行一次
  • 该日志文件若大于 10MB时,则主动进行轮循,不需要考虑一个月的期限
  • 保存5个备份文件
  • 备份文件需要压缩

应该怎么设置呢?

  1. 先设置好所需要添加的参数
[root@chenshiren ~]# vim /etc/rsyslog.conf
# Add by localhost 2023/5/17            # 自己修改时加入一些说明
*.info                         /var/log/admin.log
  1. 重启rsyslog.server
[root@chenshiren ~]# systemctl restart rsyslog.service 
[root@chenshiren ~]# ll /var/log/admin.log             
-rw-------. 1 root root 215005  327 01:52 /var/log/admin.log
# 可以看到已经建立了日志文件
# 如此一来。所有信息都会写入 admin.log
  1. 先增加 +a 这个属性
[root@chenshiren ~]# chattr +a /var/log/admin.log 
[root@chenshiren ~]# lsattr /var/log/admin.log 
-----a---------------- /var/log/admin.log
[root@chenshiren ~]# mv /var/log/admin.log  /var/log/admin.log.1
mv: 无法将'/var/log/admin.log' 移动至'/var/log/admin.log.1': 不允许的操作
# 这里确定了加入a的隐藏属性,所以root无法移动此日志文件
  1. 开始建立logrotate的配置文件,增加一个文件到/etc/logrotate.d 目录就对了
[root@chenshiren ~]# vim /etc/logrotate.d/admin 
/var/log/admin.log  {
  monthly
  size=10M
  compress
  sharedscripts
  prerotate
    /usr/bin/chattr -a /var/log/admin.log
  endscript
  sharedscripts
  postrotate
    /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    /usr/bin/chattr +a /var/log/admin.log
  endscript
}
  1. 测试一下logrotate相关功能的显示信息
[root@localhost ~]# logrotate -v /etc/logrotate.conf
.......
.......
rotating pattern: /var/log/admin.log   10485760 bytes (5 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/admin.log
  log does not need rotating (log size is below the 'size' threshold)
not running prerotate script, since no logs will be rotated
not running postrotate script, since no logs were rotated
......
......
# 因为不足一个月,文件也没有大于10MB,所以不需要轮循
  1. 测试一下强制 logrotate 与相关功能的显示
[root@chenshiren ~]# logrotate -vf /etc/logrotate.conf
[root@chenshiren ~]# lsattr /var/log/admin.log*
-----a---------------- /var/log/admin.log
---------------------- /var/log/admin.log-20240327.gz

注意/etc/rsyslog.conf 与/etc/logrotate.d/* 文件常常要配合起来一起使用。

systemd-journald.service简介

systemd-journald.service 是一个 systemd 管理的系统服务,它负责管理系统日志的收集、存储和检索。它能够收集所有内核和用户空间的日志信息,并且能够将这些信息存储到一个二进制文件中,同时提供了一组工具来检索和分析这些日志信息。此服务还负责处理系统重启期间的日志记录和读取。
使用 systemd-journald.service 可以更方便地管理系统日志,并提供了更多的日志信息和功能,例如:

可以通过 journalctl 工具来检索和分析日志信息,支持多种过滤条件,包括时间、服务、进程等。

journalctl查看登录信息

journalctl [-nrpf] [--since TIME] [--until TIME] _optional
选项:
默认会显示全部的log内容,从旧的输出到最新的信息
-n:显示最近的几行的意思,找出最新的信息相当有用
-r:反向输出,从最新的输出到最旧的信息
-p:显示后面所接的信息重要性排序。
-f:类似 tail -f的功能,持续显示journal日志的内容(就是再监测的时候非常有帮助)
--since  --until:设置开始与结束的时间,让在该期间的数据输出而已。
_SYSTEMD_UNIT=unit.service :只输出unit.service 的信息
_COMM=bash                 :只输出与bash有关的信息
_PID=pid                   :只输出此PID号的信息
_UID=uid                   :只输出此UID的信息
SYSLOG_FACILITY=[0-23]     :使用syslog.h 规范的服务相对序号来调用出正确的数据

# 示例1 显示目前系统中所有的journal日志数据
[root@localhost ~]# journalctl 
# 从这次开机启动以来的所有数据都会显示,通过less 一页一页翻动给管理员看,数据量相当大

# 示例2 仅显示出2023-05-19整天的日志数据内容
[root@localhost ~]# journalctl --since "2023-05-19 00:00:00" --until "2023-05-20 00:00:00"

# 示例3 仅今天的日志数据内容
[root@localhost ~]# journalctl --since today

# 示例4 仅昨天的日志数据内容
[root@localhost ~]# journalctl --since yesterday --until today

# 示例5 只找出crond.service的数据,同时只列出最新的10条即可
[root@localhost ~]# journalctl _SYSTEMD_UNIT=crond.service -n 10

# 示例6 找出su、login执行的日志文件,同时只列出最新的10条即可
[root@localhost ~]# journalctl _COMM=su _COMM=login -n 10

# 示例7 找出信息严重等级未错误(error)的信息
[root@localhost ~]# journalctl -p err

# 示例8 找出与登录认证服务(auth、authpriv)有关的日志文件信息
[root@localhost ~]# journalctl SYSLOG_FACILITY=4 SYSLOG_FACILITY=10

如果你想要了解到日志文件的实时变化,那又该如何处置呢?现在打开两个终端页面,来处理一下

# 第一个终端,请使用下面的方式持续检测系统
[root@localhost ~]# journalctl -f 
# 这时系统会好像卡住,其实不是卡住,是类似 tail -f 在持续地显示日志文件信息
# 第二个终端,使用下面的方式随便发一封email给系统上的账号
[root@localhost ~]# echo "testing " | mail -s 'test' zhw
# 这时,你会发现到第一个终端会输出一些信息

如果你有一些必须要检测的操作,可以使用这种方式来实时了解系统出现的问题,而取消journalctl -f 的方法。就是ctrl + c

logger命令使用

上面谈到的是调出日志文件给我们查看,那换个角度,【如果你想要让你的数据存储到日志文件当中】?这时候就可以使用logger命令,logger 命令用于向系统日志中添加消息,可以将消息发送到系统日志守护进程,以便记录在日志文件中。使用 logger 命令可以方便地记录系统信息、调试信息和错误信息等。

logger 命令的语法如下

logger [-p 服务名称.等级] "信息"
选项:
服务名称.等级:就是之前章节介绍的

# 示例1 指定一下,让root使用logger来传递数据到日志文件
[root@localhost ~]# 
[root@localhost ~]# journalctl SYSLOG_FACILITY=1 -n 3
-- Logs begin at 五 2023-05-19 08:29:43 CST, end at 五 2023-05-19 10:01:23 CST. --
519 08:30:11 localhost.localdomain audispd[766]: No plugins found, exiting
519 09:46:38 localhost.localdomain yum[86921]: Installed: mailx-12.5-19.el7.x86_64
519 10:01:23 localhost.localdomain root[121041]: My is root

通过这个命令,我们也能够将数据自行写入到日志文件当中。

保存journal方式

systemd-journald 服务默认将日志保存在内存中,而不是保存在磁盘上。在一些情况下,需要将日志保存到磁盘上以便后续检索和分析。

基本上systemd-journald.service的配置文件主要参考 /etc/systemd/journald.conf 的内容

查看一下配置文件

[root@chenshiren ~]# vim /etc/systemd/journald.conf 
[Journal]
#Storage=auto
#Compress=yes
#Seal=yes
#SplitMode=uid
#SyncIntervalSec=5m
#RateLimitIntervalSec=30s
#RateLimitBurst=10000
#SystemMaxUse=
#SystemKeepFree=
#SystemMaxFileSize=
#SystemMaxFiles=100
#RuntimeMaxUse=
#RuntimeKeepFree=
#RuntimeMaxFileSize=
#RuntimeMaxFiles=100
#MaxRetentionSec=
#MaxFileSec=1month
#ForwardToSyslog=no
#ForwardToKMsg=no
#ForwardToConsole=no
#ForwardToWall=yes
#TTYPath=/dev/console
#MaxLevelStore=debug
#MaxLevelSyslog=debug
#MaxLevelKMsg=notice
#MaxLevelConsole=info
#MaxLevelWall=emerg
#LineMax=48K
#ReadKMsg=yes
Audit=
  1. Storage=:指定日志数据的存储方式。默认值为 auto,表示自动选择存储方式。其他可选值为 volatile(仅保存在内存中)、persistent(保存到磁盘中)和 none(不保存日志数据)。

  2. Compress=:指定是否压缩日志文件。默认值为 no,可以设置为 yes 来启用压缩。

  3. Seal=:指定是否对日志文件进行封存。默认值为 yes,表示达到最大容量或最大时间后会创建一个新的日志文件,并将旧的日志文件进行封存。可以设置为 no 来禁用封存功能。

  4. SplitMode=:指定日志文件的拆分模式。默认值为 uid,表示按照用户 ID 进行划分,每个用户 ID 对应一个日志文件。可以设置为 none(不拆分)、host(按照主机名拆分)或 system(按照系统名称拆分)。

  5. SyncIntervalSec=:指定日志数据的同步间隔时间。默认值为 5 秒,表示每隔 5 秒将内存中的日志数据同步到磁盘中。

  6. SystemMaxUse=:指定日志文件的最大磁盘使用量。默认值为 10%。可以设置为 none(不限制)、固定大小(如 100M)或者 auto(自动根据磁盘空间大小分配)。

  7. MaxRetentionSec=:指定日志文件的最大保存时间。默认值为 4 周。可以设置为 0(不限制)、固定时间(如 1month)或者 infinity(永久保存)。

  8. ForwardToSyslog=:指定是否将日志转发到 syslog 服务器。默认值为 no,可以设置为 yes 来启用转发功能。

  9. ForwardToWall=:指定是否将日志输出到终端。默认值为 no,可以设置为 yes 来启用输出功能。

  10. TTYPath=:指定终端设备的路径。默认值为 /dev/console,表示输出到控制台。可以设置为其他终端设备路径。

  11. MaxLevelStore=:指定最大保存的日志级别。默认值为 debug,表示保存所有级别的日志。可以设置为 emergalertcriterrwarningnoticeinfo 或者 debug 中的任意一种。

  12. MaxLevelSyslog=:指定转发到 syslog 服务器的最大日志级别。默认值为 notice,可以设置为 emergalertcriterrwarningnoticeinfo 或者 debug 中的任意一种。

  13. MaxLevelKMsg=:指定输出到内核消息缓冲区的最大日志级别。默认值为 notice,可以设置为 emergalertcriterrwarningnoticeinfo 或者 debug 中的任意一种。

  14. MaxFileSec=:指定日志文件的最大年龄。默认值为 1 month,表示日志文件最多保存一个月。可以设置为 0(不限制)、固定时间(如 1week)或者 infinity(永久保存)。

  15. RateLimitIntervalSec=:指定日志输出的时间间隔。默认值为 30s,表示 30 秒内最多输出一次日志。可以设置为其他时间间隔。

  16. RateLimitBurst=:指定日志输出的最大次数。默认值为 1000,表示在时间间隔内最多输出 1000 条日志。可以设置为其他数量。

以上是 journal.conf 中常用的配置选项,可以根据实际需求进行配置。配置文件中还有很多其他选项,可以通过 man journald.conf 命令查看。

如果你想要保存 journalctl 所读取的日志文件,那么就得要建立一个 /var/log/journal 的目录,并且设置一下该目录的权限,那么未来重新启动 systemd-journald.service 之后,日志文件就会主动地复制一份到 /var/log/journal目录下。

将日志保存到磁盘

  1. 先处理所需要的目录与相关权限设置
[root@localhost ~]# mkdir /var/log/journal
[root@localhost ~]# chown root:systemd-journal /var/log/journal
[root@localhost ~]# chmod 2775 /var/log/journal/
  1. 编辑 /etc/systemd/journald.conf 配置文件

可以通过编辑 /etc/systemd/journald.conf 文件,修改 Storage 选项的值,将其设置为 persistent,这样日志信息就会被保存到磁盘中,而不是保存在内存中。此外,还可以通过修改 SystemMaxUse 选项的值来限制日志文件的最大大小,避免占用过多的磁盘空间。

  1. 重新启动systemctl-journald并且查看备份的日志数据
[root@localhost ~]# systemctl restart systemd-journald.service
[root@localhost ~]# ll /var/log/journal/
drwxr-xr-x. 2 root root 28 519 10:14 567928b865d945a8a3c7211006b3ba40

总之,systemd-journald.service 提供了多种保存日志的方式,可以根据实际需求来选择适合自己的方式。(这里仅介绍了将日志保存到磁盘)

分析日志文件

logwatch

logwatch提供的分析工具,它会每天分析一次日志文件,并且将数据以email的格式寄送给root

# 1.安装logwatch
[root@chenshiren ~]# yum install -y logwatch

# 2.安装完成之后,需要手工生成 logwatch 的配置文件 
# 默认配置文件是 /etc/logwatch/conf/logwatch.conf,不过这个配置文件是空的
# 需要把模板配置文件复制过来
[root@chenshiren ~]# cp -rf /usr/share/logwatch/default.conf/logwatch.conf /etc/logwatch/conf/logwatch.conf 

# 3. 查看logwatch配置文件信息
[root@chenshiren ~]# cat  /etc/logwatch/conf/logwatch.conf |sed -e '/^#/d' -e '/^$/d'
TmpDir = /var/cache/logwatch  # 指定 Logwatch 生成报告时使用的临时目录
Output = stdout               # 指定输出结果的位置为标准输出,也就是命令行终端
# 保存成文件(file),生成电子邮件(mail)或者是直接在屏幕上显示(stdout)
Format = text                 # 指定报告的格式为文本格式,而非其它格式如 HTML
Encode = none                 # 设置输出编码为无编码,即不做编码转换
MailTo = root                 # 设置发送报告的邮件接收者为 root
MailFrom = Logwatch           # 设置发送报告的邮件发送者为 Logwatch
Range = yesterday             # 报告范围为昨天的日志内容
Detail = Low                  # 设置报告的详细程度为低,可能仅包含关键信息
Service = All                 # 包括所有服务进行分析
Service = "-zz-network"     # Prevents execution of zz-network service, which
                            # prints useful network configuration info.
Service = "-zz-sys"         # Prevents execution of zz-sys service, which
                            # prints useful system configuration info.
Service = "-eximstats"      # Prevents execution of eximstats service, which
                            # is a wrapper for the eximstats program.
LogFile = messages          # 选择分析指定日志文件,logwatch只分析那一个日志文件
LogDir = /var/log           # 这意味着Logwatch将会在/var/log目录下查找日志文件进行分析和生成报告
mailer = "/usr/sbin/sendmail -t"  # 设置邮件发送的命令及参数为 /usr/sbin/sendmail -t
                                  # 用于将报告通过 sendmail 发送给指定接收者
# 4. 默认每天执行是因为crond服务的作用
[root@chenshiren ~]# ll /etc/cron.daily/0logwatch 
-rwxr-xr-x. 1 root root 486  810  2021 /etc/cron.daily/0logwatch
# logwatch未来每天会发送一封邮件给root

# 5. 执行日志分析,修改output参数为mail,修改mailer为mail -t
[root@chenshiren ~]# logwatch 
[root@chenshiren ~]# mail  # 查询邮件信息

logwatch发送信息给QQ邮箱

# 1. vim /etc/s-nail.rc 编辑配置文件
# 添加如下信息
# 必须-固定格式
set v15-compat
# 设置你的邮箱地址
set from=qq号
# 需要将xxx.@qq.com进行URL-encoded编码,密码(授权码)同理
set mta=smtp://qq号%40qq.com:授权码@smtp.qq.com smtp-use-starttls
# 必须-固定格式
set smtp-auth=login

# 2. 编辑logwatch配置文件
[root@chenshiren ~]# vim /etc/logwatch/conf/logwatch.conf 
# 我修改了如下信息
Output = mail
Format = html
Encode = base64
MailTo = xxxxx@qq.com
MailFrom = xxxxx@qq.com

mailer = "mail -t" 


# 3. 分析日志文件
[root@chenshiren ~]# logwatch 

image-20240327035339835

邮件内容

image-20240327035520688

  • 28
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值