网站搜索

lnav - 从 Linux 终端观察和分析 Apache 日志


不到两周前,Wannacry 勒索软件攻击破坏了数千台计算机,给大公司和个人造成了相当大的损失。这与近年来发现的其他广泛存在的漏洞(例如 Shellshock bug)一起凸显了掌握关键任务系统的重要性。

尽管漏洞通常针对某一特定操作系统或软件组件,但检查进出网络的流量对于保护您负责的资产有很大帮助。

建议阅读: 4 个优秀的 Linux 开源日志监控和管理工具

我相信您已经知道,系统日志是我们应该查找此信息的第一个地方。为了使这项任务变得更容易,在本文中我们将解释如何安装和使用高级日志文件查看器lnav。使用 lnav,您将能够同时查看多种类型的日志,使用热键浏览文件,并生成访问和错误的汇总直方图。所以继续阅读吧!

在 Linux 中安装并启动 lnav

要安装lnav,请使用您发行版的包管理系统。

aptitude install lnav          [Debian and derivatives]
yum install epel-release lnav  [CentOS 7 and similar]

安装完成后,启动lnav,后跟要检查的日志所在目录的绝对路径。由于这通常是 /var/log,所以让我们这样做:

lnav /var/log/httpd

检查 CentOS 7 中 Apache Web 服务器的日志:

让我们简要检查一下上图中显示的输出:

  • 右上角显示当前正在检查的文件(access_log-20170519access_log)。当您向下或向上滚动时,您会注意到文件名可能会随着您从一个文件名转到另一个文件名而改变。
  • 40x HTTP 响应(例如,未找到禁止)以粗体显示,而 20x 响应则显示在常规文本中。
  • IP 地址以粗体绿色显示。

这看起来确实不错,不是吗?但现在让我们深入挖掘一下,我们会发现 lnav 提供的不仅仅是漂亮的彩色输出。

如果您好奇为什么不显示错误日志,您将在本文后面找到答案。所以继续阅读吧!

使用选项和热键修改输出

在继续之前,让我们列出一些热键,这些热键将使我们能够更轻松地浏览 lnav 的输出和可用视图:

  • eE 跳转到下一个/上一个错误消息。
  • wW 跳转到下一条/上一条警告消息。
  • bBackspace 移至上一页。
  • 移动到下一页的空间。
  • gG 移动到当前视图的顶部/底部。

当日志轮换时,旧文件可能会被压缩(或不压缩),具体取决于 logrotate 配置文件中指定的设置。要在输出中包含压缩文件,请按如下方式启动 lnav:

lnav -r /var/log/httpd

如果您想仔细查看 lnav 的运行方式,可以使用 -d 选项启动程序,后跟将写入调试信息的文件名,如下所示:

lnav /var/log/httpd -d lnav.txt

在此示例中,lnav 启动时生成的调试信息将写入当前工作目录中名为 lnav.txt 的文件中。

该文件的前几行如下图所示:

突出显示的文本表示 lnav 加载了默认格式文件,更具体地说,加载了 access_log 格式来解析 Apache 访问日志。此外,lnav 允许解析每个输出行,以便输出变得更容易可视化和理解。

建议阅读: GoAccess(实时 Apache 和 Nginx)Web 服务器日志分析器

要使用此功能,请启动程序并选择要解析的行。所选行始终是窗口顶部的行。然后按 p,您应该会看到以下结果:

要返回正常模式,请再次按 p

现在,如果您想按日期和时间查看日志摘要,请按 i。例如,突出显示的文本表明,4 月 10 日星期一晚上 10 点到 11 点之间,有 37 个 HTTP 请求,其中 14 个导致错误。

一旦您根据如上所示的直方图确定了潜在问题,您可以按 i 退出视图,使用解析器更详细地检查它,如前所述。或者,您也可以通过键入分号并编写标准查询来使用内置 SQL 功能。例如,执行以下操作:

;.schema

查看数据库模式中的可用表。确定正确的表(在我们的例子中为 access_log)后,让我们按 q,然后使用以下查询返回有关来自 195.154.230.31 的请求的所有可用信息:

;SELECT * FROM access_log WHERE c_ip='195.154.230.31'

请注意,我们还可以按 log_time 过滤结果。关键是,只要加上一点 SQL,lnav 的用途就没有极限了。

Apache 默认日志格式

许多日志格式默认使用 lnav 加载,因此无需我们干预即可解析。您可以在官方文档的日志格式部分查看该列表。

默认格式在 ~/.lnav/formats/default/default-formats.json.sample 中指定,其他格式可以使用 ~/.lnav/formats 添加code>.json 扩展名。

但是,编辑这些文件需要对 JSON(Javascript 对象表示法)和 PCRE(Perl 兼容正则表达式)库有一定程度的熟悉。

那么为什么 lnav 不显示 Apache 错误日志文件呢?原因是这些日志与现有格式文件中的任何正则表达式都不匹配,因此被视为常规文本文件(即没有给定日志格式的文件)。

建议阅读: 如何监控 Apache Web 服务器负载和页面统计信息

如前所述,一旦您至少稍微熟悉 JSON 和 PCRE,您就可以创建自己的格式。例如,如果您定义了自定义 Apache 日志,这会派上用场。

概括

尽管我们使用 Apache 访问日志来演示如何使用 lnav,但请记住,还有其他几种类型的日志可以使用此工具查看和解析。如果该工具无法识别特定日志,您可以创建其他格式并按照此处提供的指示安装它们。

您对本文有任何疑问或意见吗?一如既往,请随时使用下面的表格告诉我们。我们期待您的回音!