lnav - 从 Linux 终端查看和分析 Apache 日志
不到两周前,勒索病毒 Wannacry 攻击入侵了数千台计算机,给大公司和个人造成了巨大损失。这一事件以及近年来发现的其他广泛存在的漏洞(例如 Shellshock 漏洞)凸显了时刻关注关键任务系统的重要性。
尽管漏洞通常针对某个特定的操作系统或软件组件,但检查进出网络的流量可以大大有助于保护您负责的资产。
建议阅读: 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-20170519和access_log)。向下或向上滚动时,您会注意到文件名可能会随着您从一个文件转到另一个文件而发生变化。
- 40x HTTP响应(例如,Not Found或Forbidden)以粗体显示,而20x响应则以常规文本显示。
- IP 地址以粗体绿色显示。
这看起来确实不错,不是吗?但是现在让我们深入挖掘一下,我们会发现 lnav 提供的不仅仅是漂亮的彩色输出。
如果您对为何未显示错误日志感到好奇,您将在本文后面找到答案。所以请继续阅读!
使用选项和热键修改输出
在我们继续进行之前,让我们列出一些热键,以便我们更轻松地浏览 lnav 的输出和可用的视图:
e
或E
跳转到下一个/上一个错误消息。w
或W
跳至下一个/上一个警告信息。b
或Backspace
移至上一页。- 空格键移至下一页。
g
或G
移动到当前视图的顶部/底部。
轮换日志时,旧文件可能会被压缩(或不被压缩),具体取决于 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.json
。
但是,编辑这些文件需要对 JSON(Javascript 对象表示法)和 PCRE(Perl 兼容正则表达式)库有一定程度的熟悉。
那么为什么 lnav 不显示 Apache 错误日志文件呢?原因是这些日志与现有格式文件中的任何正则表达式都不匹配,因此被视为常规文本文件(即没有给定日志格式的文件)。
建议阅读: 如何监控 Apache Web 服务器负载和页面统计信息
如前所述,只要您至少对 JSON 和 PCRE 有所了解,就可以创建自己的格式。例如,如果您定义了自定义 Apache 日志,这会很有用。
概括
尽管我们使用 Apache 访问日志来演示如何使用 lnav,但请记住,还有其他几种类型的日志可以使用此工具查看和解析。如果该工具无法识别特定日志,您可以创建其他格式并按照此处提供的指示进行安装。
您对本文有任何疑问或意见吗?与往常一样,请随时使用下面的表格告诉我们。我们期待您的回复!