Linux 的 “会说话的心脏”,第一部分

作者:Marcel Gagné

欢迎回到“角落”专栏,也就是“系统管理员的角落”。我希望大家上周都休息好了。今天的专栏标志着一个新系列的开始,我们将深入 Linux 系统的核心,并倾听它的声音。无论您是否知道,您的 Linux 系统都在不断地与您对话,就像一种系统独白或日记,让您了解其生活中的一切。您只需要注意。有时,这些信息看起来像闲聊。有时,系统的健康就取决于它。

随着时间的推移,您对 Linux 系统越来越熟悉,您无疑已经意识到它 वास्तव में 有多强大。在引擎盖下有很多事情在发生,并且从所有这些信息中生成了大量的反馈。今天,我将向您展示其中一些信息是如何生成的,如何自定义它,以及如何同时身处多个地方!

我们开始吧?

您的系统生成的大部分日志都来自 syslogd 守护进程。 syslogd 守护进程是一个在后台运行的程序,独立于您在系统上可能做的任何其他事情,但它确实会注意。这就是它的工作;收集正在发生的事情的信息并进行报告。实际上,这里是定义它的一个好地方。对于那些可能还不知道的人来说,我对 syslogd 的描述实际上是对 守护进程 是什么的一个很好的定义,至少是第一部分。根据定义,守护进程是一个程序,它在被派生(在启动时或通过 shell 命令)后,会断开与启动它的终端的连接并在后台运行。如果您随后断开与启动程序的终端会话的连接或完全注销,该程序将继续在后台运行。它在那里做什么取决于守护进程的用途。 inetd 守护进程监听网络连接,而 syslogd 则监视、监控和记录日志。

它记录什么内容在名为 /etc/syslog.conf 的文件中定义。该文件的格式包含两个部分:选择器和操作字段。选择器(分为 facilitypriority)通过识别信息来源和重要性或严重性级别来定义我们记录的内容。操作字段告诉 syslogd 信息去哪里或如何处理它。不包括注释行,该文件看起来像这样

     facility/priority                   /var/log/filename

您在那里看到的文件名可能已经是熟悉的名称(messagesmaillogsecure),但正如您所看到的,它们也可以更改。列出您的 /var/log 目录将向您显示您的系统保留的各种日志文件。您将在那里看到的一些文件(例如 samba 日志)是由其他进程写入的。

实际上,上面的文件名可以是附加进程,甚至是另一个主机,其 syslogd 进程将在那里执行其自己的日志文件告诉它的任何操作。稍后会详细介绍,但首先是选择器字段/部分。此部分将是 auth(安全信息)、authpriv(或多或少与 auth 相同)、cron(您的 cron 调度系统)、dæmon(各种守护进程)、kern(内核生成的消息)、lpr(假脱机程序)、mail、mark、news、security、syslog、user(用户程序)、uucplocal0-local7。并非所有这些都有用或甚至被使用。例如,mark 基本上不再存在(它只是被忽略),而 security 已被 auth 取代。这些 facility 中的每一个都有一个优先级来定义报告的严重性。这些是 debug(调试语句)、info(不适合其他任何地方的内容)、notice(变得重要)、warning(非常重要且可能是不好的事情)、err(错误条件),最后是重要的,crit(表示严重)、alertemerg(不会更糟了)。另请注意,您可以使用通配符(“*”)来说明您想要与给定 facility 关联的每个优先级级别的报告。

     kern.*                             /dev/console

这里的底线是,任何给定的 Linux 系统都在生成大量的信息。假设您是一家小型/中型/大型网络上的系统管理员。您有自己的 Linux 机器作为桌面使用,但您的主机器位于网络上的某个位置。它运行邮件、防火墙服务等。如果该机器发生可怕的事情,例如磁盘崩溃、黑客入侵安全,等等,完全有可能当您有机会查看日志以确定发生了什么时,已经为时已晚。它们可能永远消失了。再次假设您有 几个 这样的 关键 系统需要关注。您怎么可能关注它们中的每一个呢?

这就是您要做的。修改 syslog.conf 文件(在 /etc 中)并向文件中添加一个具有非常不同操作的新行。在下面的示例中,我添加了另一行,定义了如何处理 authpriv 消息。换句话说,如果我收到一条消息,告诉我有人试图登录我的机器,我想知道这件事。但以防万一证据在我有另一次机会查看日志之前被删除,如果将该日志条目的副本传递到我的另一台机器,我称之为“shadow”的机器,那就太好了。

     # The authpriv file has restricted access.
     authpriv.*                                              /var/log/secure
     authpriv.*                                              @shadow

当通常显示在 /var/log/secure 文件中的消息生成时,我将在 shadow 的 /var/log/secure 文件中收到它们。这些消息将以生成它们的主机名作为前缀。例如...

     Jun 21 12:22:06 shadow in.telnetd[17002]: connect from 192.168.22.2
     Jun 21 12:22:10 shadow login: LOGIN ON 5 BY natika FROM shadow
     Jun 22 12:57:31 website in.telnetd[1245]: connect from 192.168.22.2

请注意,来自 shadow 的 /var/log/secure 行的前两行以 shadow 的主机名开头。最后一行报告来自我们的 Internet 网关,一台名为“website”的机器。很酷,对吧?但是,有一个问题。为了让 shadow 接受和记录这些消息,您需要停止系统日志记录器并使用不同的选项重新启动它。如果我执行 ps ax 来查看我的 syslogd 在 shadow 上是如何运行的,我会得到类似这样的结果

     [root@shadow /root]# ps ax | grep syslog
     17171 ?        S      0:00 syslogd -m 0 -r
     17220 pts/6    S      0:00 grep syslog

如果您在您的机器上执行此操作,您会注意到 -r 选项可能缺失。您需要停止 syslogd 并使用 -r 重新启动它,这会告诉 syslogd 监听远程 syslogd 消息。要在我的 Red Hat 系统上停止 syslogd,我可以使用此命令

     /etc/rc.d/init.d/syslogd stop

您也可以使用此命令停止进程

     kill pid_of_syslogd

要重新启动,我可以只使用 start 而不是 stop 重新发出该命令,但我会得到相同版本的 syslogd 运行。如果您只是想自己尝试一下,您可以(以 root 身份)简单地键入 syslogd -m 0 -r,您的机器应该开始接受来自您的另一台机器的日志。为了使每次启动时都发生这种情况,您需要更改启动脚本本身。在我的 Red Hat 系统上,它是 /etc/rc.d/init.d/syslog。以下是该脚本中的几行。

     # See how we were called.
     case "$1" in
       start)
             echo -n "Starting system logger: "
             # we don't want the MARK ticks
             daemon syslogd -m 0

最后一行是我们想要更改的。现在,当我们重新启动时,syslogd 将使用我们的新选项启动。顺便说一句,您对 /etc/syslog.conf 所做的任何更改也需要重新启动(进程,而不是整个系统)。

如果您特别关注您的各种系统上发生的事情,您可以偶尔使用终端窗口中的 tail -10 /var/log/log_file_name 命令来检查您新的、丰富的日志文件。如果您不想发出那么多击键,您可以为自己编写一个像这样的简单 Perl 脚本

     #!/usr/bin/perl
     #
     $eternity=1;
     
     while ( $eternity )
             { &show_me;
               sleep 10;
             }
     
     sub show_me {
             $secure_tail=`tail /var/log/secure`;
            print "$secure_tail
";
            }

现在我可以保持终端窗口打开,并让我在监视的任何文件(在本例中为 /var/log/secure)的最后 10 行每 10 秒刷新一次。当然,您可以做比我的小例子更有创意的事情,但这是一个起点。

下次,我将向您展示如何从日志中获得更多信息,以及一些创造性的方法来监控系统中发生的事情。在那之前,请记住,您的 Linux 系统正在与您对话。您在倾听吗?

电子邮件:ljeditors@ssc.com

加载 Disqus 评论