使用 Chklogs 管理您的日志
Unix 系统(以及 Linux)的特性之一是真正的多任务处理。因此,您的机器上通常会运行许多进程,包括(并非恶意的)守护进程和其他重要程序,例如 uucico (Unix-to-Unix copy-in copy-out)。如果您的系统配置正确,这些程序会在系统日志中留下其活动的痕迹。这些日志通常包含大量数据,必须经过筛选才能生成更易读的报告。在系统出现问题时,这些日志是跟踪并可能解决问题的宝贵信息来源。
多年前,当我面临需要花费一些空闲时间查看原始日志并修剪它们以避免 占用磁盘空间 的前景时,我决定是时候采取行动了——我编写了程序 Chklogs。ChkLogs 是 Unix 传统中 “Check Logs”(检查日志)的缩写。
无论您是经验丰富的 Linux 用户、系统管理员还是 Linux 世界的新手,您肯定会对这个主题感兴趣。虽然它主要是一个系统管理工具,但它在用户世界中也有应用。
在本文中,我将向您介绍 Chklogs 2.0 版本,该版本在本文发布时应该已经发布。当前可用的是 1.9 版本/构建 2 (1.9-2),这是最后一个与 Perl 4.0x 兼容的版本。2.0 及更高版本需要 Perl 5.003——考虑到大约 99% 的注册用户都拥有该 Perl 版本,这个要求并不高。
以下是 Chklogs 提供的一些功能特性
为每个日志单独指定阈值和操作
压缩程序选择
按大小或年龄管理日志
添加用户扩展
具有预处理和后处理的逻辑日志组
全局和本地存储库(备用存储库功能)
日志洗牌(也称为日志轮换)
目录归并
无需编程经验
用户资源文件
完全基于 Perl 5.003,用户界面除外
漂亮的 Tcl/Tk 用户界面,单独提供(请参阅本文末尾的“资源”部分。)
逻辑日志组是具有共同点的日志组;这可以是 UUCP 日志、INN 日志或您认为属于同一组的任何日志的集合。您可以使用几乎任何名称;唯一的限制是名称必须有效才能创建目录。Chklogs 有两个内置组:syslog 和 common(保留)。
备用存储库 (AR) 是一个目录,存档日志在满足阈值条件并经过处理后存储在该目录中。默认情况下,存档日志使用 tar 和 GNU zip 创建。本地 AR 是日志所在的目录下的一个名为 OldLogs 的目录。全局 AR 是一个目录层次结构(您定义此 AR 的根目录),其中日志存档按逻辑组划分。在这里,您将始终看到 “common” 子目录,所有 “孤立” 日志都放在那里,即那些未明确声明属于某个组的日志。
日志洗牌是众所周知的,也称为日志轮换。“逐步淘汰” 的日志每次都会被分配一个数字或标签,直到达到最大值,此时最旧的日志将被删除。
目录归并是另一个不错的功能。您无需单独指定每个日志的名称,而是提供一个目录名称。Chklogs 将任何非存档、非目录文件(Chklogs 识别为日志)视为日志,并根据操作规范对其执行操作。此选项的实际应用是一个站点向大量子域提供 UUCP 访问权限(手动操作非常麻烦),并且为每个站点保留单独的 UUCP 传输日志。Chklogs 始终首先确定您指定的是目录还是文件。
每次我发布新版本的第一个版本/构建(例如,v2.0-1)时,我都会将其提交到 Sunsite 和 Funet FTP 站点。每当需要修复(因此没有新功能)时,我只会将新的版本/构建(例如,2.0-2)发布在主站点,即我的 ISP。为了确保您拥有最新版本,请查看主站点和/或 Chklogs 网页,网址为 http://www.iaehv.nl/users/grimaldo/info/。
现在,在您的系统上安装 “版本 2.0 构建 1”。解压并进入目录树的根目录
gunzip chklogs-2.0-1.tar.gz tar xvf chklogs-2.0-1.tar cd chklogs-2.0-1
在根目录下是 bin 目录,其中包含组成 Chklogs 包的脚本和模块。/doc 目录包含所有必要的文档,包括 troff 和 HTML 格式的 man 手册。plug-out 目录包含一些额外的实用程序,用于扫描您的日志——按原样使用它们,或作为构建您自己的实用程序的示例。最后一个是 /contrib 目录。在树的根目录中,有 README 文件、发行说明、用于安装的 makefile 以及最重要的 GuideMe 脚本。输入
GuideMe它将完成该操作,或者至少尝试完成该操作 。此脚本会探测您的系统,并指示哪些配置文件中必须更改哪些配置参数。请仔细遵循其建议。最后,它会询问您是否希望发送注册信息。如果您选择 “否”,那没关系。如果选择 “是”,您将收到有关更新和重大修复的邮件。
假设您已完成必要的配置参数更改(邮件程序、压缩程序、管理帐户、库位置、Perl 位置等),您现在可以实际使 Chklogs 为您的系统工作了。我还假设它已通过 make 命令 (make install) 安装在 /usr/local/sbin 和 /usr/local/lib/Degt/ 中。图形用户界面也共享相同的库目录。
如果您还不确定是否要将日志提交给 Chklogs,您应该在本地目录中备份日志副本。在这些副本上运行 Chklogs,直到您感到安全为止,您会的。这样做需要使用资源文件(见下文)。
Chklogs 包由一个管理程序 (chklogsadm)、主程序 (chklogs) 和一些 Perl 模块 (Smtp.pm、Chklogs.pm、Interp.pm) 组成。对于配置的第二部分,我们需要 Chklogs 配置文件 (chklogs.conf) 以及可选的资源文件。
资源文件 (.chklogsrc) 位于您的主目录中。如果您希望首先在日志副本上进行测试,或者您没有 root 权限(因此,不用于系统日志,而是用于其他日志),则需要它。当 Chklogs 运行时,它首先获取脚本配置变量中编码的配置信息(配置部分在源代码中已明确标记),然后它查找个人资源文件 (PRF),然后查找命令行选项,按此顺序。
在 PRF 中,您可以覆盖脚本配置中的一些变量,例如,管理员用户和其他变量。以下是发行版中提供的示例
# Personal resource file for Chklogs 2.x set ChklogsConf ~/devel/test/chklogs.conf set ChklogsDb ~grimaldo/devel/test/.chklogsdb set VarRun ~/devel/test set RelativePath MyOldLogs set Admin grimaldo mode ignore on set SyslogConf /etc/syslog.conf
您会注意到它的语法类似于 Tcl。也就是说,除了模式行之外,ignore on 和 ignore off 之间的所有内容都不会被解释。Tcl/Tk GUI 确实有一个虚拟模式例程,但所有变量设置都是在此忽略模式下执行的,因为该模式仅在 Perl 模式下有意义。就我个人而言,我觉得普通变量前面的美元符号很烦人。GUI 也使用相同的资源文件(带有一些扩展)。上面的 PRF 示例未显示 GUI 专门使用的变量。但是,对于本文中的示例,我将假设您正在处理实际日志,而不是副本。
在上面的脚本中,所有变量都是内部配置变量的覆盖。ChklogsConf 指示配置文件的位置(在下一节中介绍),ChklogsDb 是内部数据库(您绝不能编辑或移动此文件),VarRun 是 PID 锁文件所在的目录(包括 Syslog 和 Chklogs 的 PID 文件所在的位置)。当您选择本地存储库时,使用 RelativePath,Admin 是在指定 mail 命令行选项时发送报告的电子邮件地址。通常,我在运行 Chklogs 时不需要此文件,但我在测试时以非特权用户身份使用它。
列表 1 是一个示例配置文件,演示了各种功能。此文件包含三种类型的行:注释/分隔符、指令和规范。它分为两个主要部分,头部和主体
指令 行以两个字符 #: 开头,因为首先检查此模式,因此不会将其与注释混淆。
注释 行以 # 字符开头。请注意,您不能在规范行的末尾添加注释。
规范 行是任何非空或指令或注释的行。它定义了您希望 ChkLogs 管理的每个日志的属性。
头部由注释行组成,这些注释行标识特定主机的此配置,以及必须按所示顺序出现的两条指令行。头部可以使用以下两个管理命令中的任何一个创建
chklogsadm newconf -global /var/log/Chklogs
或
chklogsadm newconf -local第一个指令 (options) 用于为此配置设置全局选项。目前仅识别两个选项名称,并且都与前面解释的备用存储库功能有关。两个可接受的选项是 global 和 local。第二个指令 (global) 也与备用存储库相关。必须将其设置为日志将被存档的根目录(即,具有 “archive” 属性的日志),按组层次结构。
在指令部分或主体中,我们主要找到规范行。这些行遵循特定的语法
LogName Threshold Action [Parameter(s)]
第一个字段是完全限定的日志名称,第二个字段可以是大小或年龄的阈值。大小必须以字节为单位,或者可以选择附加 K 限定符表示千字节。如果您选择年龄,则必须以天为单位附加 D(例如,7d)或以月为单位附加 M(例如,2m)。限定符 D、M 和 K 不区分大小写。始终将日志与阈值进行比较,如果达到阈值,则执行指定的 “操作”。
“操作” 字段的值可以是 archive、execute 或 truncate,它们没有参数,Chklogs 使用 truncate 系统调用将文件截断为零长度。如果您不关心此日志,或者在使用 archive 或 execute 选项(如列表 1 所示)后,请使用此选项。
archive 操作接受一个参数,该参数指示在轮换/洗牌之前要保留多少存档日志。如果未给出参数,则使用内部参数(请参阅文档)。如果您计划稍后查看此日志,请使用此选项。
execute 操作用于生成一个插件,即一个将在日志上运行的外部程序。如果您有特定的日志扫描器,可以过滤日志并为您提供人类可读的报告,这将非常有用。您可以指定任意数量的参数,特殊参数 %L 将被 Chklogs 替换为日志的完整名称,并用于通知插件要处理的文件。
列表 1 还显示了逻辑组定义。在那里,创建了一个名为 NetNews 的组,以便在使用全局备用存储库时,除了 /common 目录之外,还将有一个 NetNews 目录位于其下。对于每个组,您可以关联一个外部程序,以便在插件接口中执行。允许使用参数,但 %L 在该上下文中没有意义。Pre 和 Post 分别指定在处理组之前和之后执行哪个程序。组定义始终以按该顺序排列的三个指令行开头,然后是一个或多个日志,最后是一个空行或注释行。请勿在组定义行之间包含任何这些内容。
在 NetNews 组示例中,我们希望守护进程在我们接触日志之前停止使用日志,并在我们完成后重新启动(或继续)。这对于 INN(它有一个程序来控制守护进程)和 HTTP 特别有用。Chklogs 会自动处理 syslog;它知道该怎么做以及如何做。
最后,请注意,最后一行规范行引用了一个目录,如前面在 “目录归并” 部分中所述。
创建您的第一个配置文件后,您需要让 Chklogs 初始化其内部数据库(不要与配置混淆),该数据库由配置变量 ResrcFile(出于历史原因)或个人资源文件的 ChklogsDb 变量指定。请记住,初始化会覆盖任何以前的历史记录,因此应仅在首次安装后完成(而不是在您进行更改以添加/删除日志/组时)。使用以下管理命令
chklogsadm init
然后,发出管理命令
chklogsadm initrepos以初始化所有备用存储库。与 init 不同,每次创建新组或更改备用存储库的位置(全局参数)时,都必须执行此命令。所有这些步骤都在软件包随附的文档中详细说明。
最后,每当您修改配置文件 (chklogs.conf) 时,都需要 chklogsadm 的 sync 选项。这不是自动完成的,因为如果对文件进行多次连续修改,则效果不佳。此操作非常简单,只需键入
chklogsadm sync
Chklogs 附带了几个插件。我使用它们来生成我的 UUCP 日志、列表服务器日志等的统计信息。您可以构建自己的插件,事实上,我很想听听您拥有的任何日志扫描器或过滤器。可用的插件存储在 /plug-out 和 /contrib 目录中。
插件是由 Chklogs 在 Pre/Post 组指令或 execute 操作中执行的任何外部程序。此程序不得在 stdout/stderr 上生成任何输出,因为它会使报告混乱,并且如果您像大多数用户一样,使用 cron 作业运行 Chklogs,那么这种行为是不希望的。那么,您是否有一个不错的扫描器 确实 写入 stdout/stderr,并且不想修改它?或者对编程一窍不通?只需使用发行版中提供的 cdkwrap 包装器,它将捕获所有输出并通过邮件发送给您。
此外,插件子进程继承某些环境变量,这些变量提供有用的信息
CDKLOG:完全限定的日志名称
CDKROOT:存档存储库
CDKMAILTO:用于发送报告的电子邮件地址
现在,我们已经完成了设置;我们有一个配置文件、一个资源文件和初始化的存储库。管理任务暂时完成(如果需要,您可以稍后进行更改),我们准备开始执行操作。Chklogs 有几个命令行选项,其中一些选项可以组合使用以达到特定效果。我不会介绍所有选项,甚至不会介绍所有可能性,但我将讨论足够多的选项,以便您开始使用,并让您熟悉其一些功能。请注意,我们现在将使用 chklogs 程序,而不是管理程序 chklogsadm。
基本上,您可以执行四个主要操作
检查配置文件。
获取所有已存档日志的概览。
获取执行程序时将采取的操作的报告。
按照配置文件中的指示执行操作。
要检查配置文件的正确性(尽管检查不是很彻底),请使用以下命令
chklogs -w
要快速概览哪些日志已存档到存储库中,可以使用 -l 命令行选项
chklogs -l这使您可以了解需要扫描或过滤多少日志,并在您的系统上发生可疑事件时提供所需的信息。
要获取通常的日志报告,指示日志是否仍在阈值范围内,以及如果超出阈值,将执行什么操作,请使用 -w 选项
chklogs -w [-m]
或者,您也可以指定 -m(mail)选项以邮件发送报告。您不能将它们放在同一个开关上 (-wm)。
最后,当您希望 Chklogs 实际处理配置文件中指定的日志时,只需在不使用上述任何选项的情况下使用它
chklogs [-m]
除非您使用 mail (-m) 选项,否则报告将在标准输出上生成。Mail 是最常用的选项。
大多数用户会在 /etc/crontab 文件中添加一个条目,以便 Chklogs 每天在特定时间运行并邮件发送报告。一个典型的 crontab 条目如下所示
# System Cron Tab 45 23 * * * root /usr/local/sbin/chklogs -m
