Py学习  »  NGINX

Rhit:高效可视化 Nginx 日志查看工具,每秒处理百万行日志数据

技术最前线 • 3 年前 • 305 次点击  

【导语】:一个格式化 Nginx 日志,可快速阅读、查看 Nginx 日志的工具。

简介

Rhit 可以从标准文件夹中读取 Nginx 的日志文件(gzipped 的压缩文件也可以),并进行分析统计,在控制台中以可视化的表格形式展示,并且不会产生任何多余的临时文件或数据。

可以按照日期、响应值、请求来源等进行过滤匹配,并进行分析,Rhit 具有很高的效率,每秒可以处理百万行日志数据。

以下是在一月份的日志中查找状态码为 1xx、2xx 的结果:


项目地址是:

https://github.com/Canop/rhit

安装

  • 直接下载使用编译好的二进制文件,但是需要确保shell能够找到rhit二进制文件,一个比较容易的处理方式就是把它放到/usr/local/bin目录下,并且为它添加可执行权限。
chmod +x rhit
// 下载地址
https://dystroy.org/rhit/download
  • 从crates.io安装,依赖Rust环境,使用以下命令安装:
cargo install rhit
  • 源码安装,依赖Rust环境,将github源码clone之后,进入到rhit文件夹,运行以下命令:
cargo install --path .

显示字段

rhit可以自动打开默认目录下的nginx日志文件,也可以在命令行参数中指定日志路径:

rhit my/archived/logs

nginx常见的日志行是这样的:

178.133.125.122 - - [21/Jan/2021:05:49:52 +0000] "HEAD /broot/download/x86_64-pc-windows-gnu/broot.exe HTTP/1.1" 200 0 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"

它由几个字段组成:日期、远程IP地址、路径、发送的字节等。rhit可以执行对表格进行排序的字段列表,如果未指定,默认按照日期、状态码、来源和路径来显示,如果要制定多个字段,使用逗号进行分割,如-f date,status;显示所有字段,使用-f all。

  • 基于日期。使用--field date,或者缩写为-f date。默认情况下,条形图的长度基于命中数量进行统计,也可以修改排序键以基于发送字节数进行统计。


  • 基于IP。默认情况下不显示远程IP,可以使用rhit -f ip进行显示。


  • 基于请求方法。默认不显示HTTP请求方法,可以使用rhit -f method进行显示。


  • 基于路径。命令为rhit -f path


  • 基于Referer。命令为rhit -f ref


  • 基于状态码。命令为rhit -f status

筛选

Rhit提供了一些过滤器,用于筛选结果列表,展示自己想看到或者不想看到的一些数据。

  • 按日期筛选。精确到天,日期格式是年/月/日,如筛选2021/2/15到2021/2/20的数据,也可以筛选大于某个时间、小于某个时间或不包含某个时间(使用'>','


  • 按远程IP筛选。参数为-i,筛选特定的IP,或者排除某个特定的IP(使用'!'符号)。

  • 按请求方法筛选。参数为-m,筛选特定方法,或者排除特定的方法。

  • 按请求路径筛选,参数为-p,可以精确匹配,也可以使用正则表达式(例如所有路径均以"download"开头且以"exe":结尾,参数为 -p 'download.*exe$'):


  • 按Referer筛选。参数为-r,与按路径筛选的语法一致:


  • 按状态码筛选。参数为-s,筛选特定状态码,或者排除特定的状态码。

  • 组合筛选。以上方式可以任意组合。

排序键

默认情况下,所有表都按照hits进行排序,这就是排序键,排序键的所有值都以粉红色显示,包括直方图。如果对发送字节数更感兴趣,可以将排序键修改为bytes,使用-k b进行更改:


- EOF - 


更多优秀开源项目(点击下方图片可跳转)




开源前哨

日常分享热门、有趣和实用的开源项目。参与维护10万+star 的开源技术资源库,包括:Python, Java, C/C++, Go, JS, CSS, Node.js, PHP, .NET 等

关注后获取

回复 资源 获取 10万+ star 开源资源



分享、点赞和在看

支持我们分享更多优秀开源项目,谢谢!

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/110061
 
305 次点击