#log #nginx #log-file #log-parser #log-entries #ip-address #analyzer

app logutil

log Util是一个基于Rust的工具,旨在帮助您实时监控和分析Nginx访问日志

5个不稳定版本

0.10.1 2024年7月7日
0.9.2 2024年7月7日
0.9.1 2024年7月7日
0.8.2 2024年7月7日
0.8.1 2024年7月7日

#355 in 解析实现

每月46次下载

MIT许可证

6MB
888

Log Util

Log Util是一个基于Rust的工具,旨在分析Nginx访问日志。它读取日志文件,提取和统计按IP地址和URL请求的数量,并显示顶级IP地址和URL。该工具可以通过只读取新数据或从文件开始处理整个文件来处理大日志文件。

Log Util in action

功能

  • 读取Nginx访问日志并提取IP地址和URL。
  • 统计并显示顶级IP地址和URL。
  • 支持指定要显示的顶级条目数量。
  • 允许自定义用于日志解析的正则表达式。
  • 支持从文件加载正则表达式。
  • 如果记录数超过10,000条,则自动清理旧条目(可以使用--no-clear禁用)。
  • 显示顶级IP的最后请求。
  • 允许按IP地址过滤结果。

用法

命令行选项

  • file:日志文件路径。
  • --count:从文件末尾读取的行数(0从末尾开始,-1读取整个文件;默认:0)。
  • --regex:解析日志条目的正则表达式或包含正则表达式的文件路径(默认:^(\S+) - ".+" \[(.*?)\] \d+\.\d+ "\S+" "\S+ (\S+?)(?:\?.*?)? HTTP/.*)。
  • --date-format:解析日志条目的日期格式(默认:%d/%b/%Y:%H:%M:%S %z)。
  • --top:要显示的顶级条目数量(默认:10)。
  • --no-clear:禁用自动清理旧条目。

示例

读取整个日志文件

cargo run -- "./access.log" --count=-1

读取日志文件的最后100行

cargo run -- "./access.log" --count=100

读取日志文件末尾的新数据

cargo run -- "./access.log" --count=0

从文件加载正则表达式

如果--regex参数指向文件,则从该文件中读取正则表达式。

cargo run -- "/path/to/access.log" --regex "/path/to/regex.txt" --top 20

快捷键

  • q:退出应用程序。
  • t:在以下选项卡之间切换(概览、最后请求、详细请求、请求图表)。
  • 上箭头:向上滚动。
  • 下箭头:向下滚动。
  • 左箭头:向左滚动。
  • 右箭头:向右滚动。
  • Ctrl+C:退出应用程序。

安装

从发布版下载

您可以使用curl从最新的GitHub发布版下载预构建的二进制文件。以下是如何下载、使文件可执行并将它移动到您的PATH目录中的示例:

对于x86_64架构

curl -L -o /usr/local/bin/logutil https://github.com/s00d/logutil/releases/latest/download/logutil-x86_64-unknown-linux-gnu
chmod +x /usr/local/bin/logutil

对于aarch64架构

curl -L -o /usr/local/bin/logutil https://github.com/s00d/logutil/releases/latest/download/logutil-aarch64-unknown-linux-gnu
chmod +x /usr/local/bin/logutil

下载并使文件可执行后,您可以从任何位置运行它。

logutil "/path/to/access.log" --count=-1 --top 20

从源代码构建

确保您的系统上已安装Rust。您可以使用以下命令安装Rust:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rust-lang.org | sh
  1. 克隆仓库
git clone https://github.com/yourusername/log-analyzer.git
cd log-analyzer
  1. 构建项目
cargo build --release
  1. 运行项目
cargo run -- "/path/to/access.log" --count=-1 --top 20
# or nginx
cargo run -- ./example.log --regex='^(\S+) - - \[(.*?)\]( )\"(\S+) (\S+?)(?:\?.*?)? .+' --count="-1"   

GitHub Actions

项目包含一个GitHub Actions工作流程,该工作流程在向main分支推送或发出拉取请求时自动为x86_64-unknown-linux-gnuaarch64-unknown-linux-gnu目标构建项目。

工作流程配置

工作流程文件位于.github/workflows/build.yml。它执行以下步骤:

  1. 检出代码。
  2. 安装Rust工具链和必要的目标。
  3. 安装依赖项(例如,gcc)。
  4. 为指定的目标以发布模式构建项目。
  5. 上传构建工件。

贡献

欢迎贡献!请为任何改进或错误修复打开问题或提交拉取请求。

拉取请求流程

  1. 分支仓库。
  2. 创建一个新分支(git checkout -b feature-branch)。
  3. 进行更改。
  4. 提交更改(git commit -am '添加一些功能')。
  5. 推送到分支(git push origin feature-branch)。
  6. 打开拉取请求。

编码标准

  • 遵循Rust官方的风格指南
  • 确保代码通过所有测试和lint。
  • 根据需要编写或更新测试。

许可

本项目采用MIT许可 - 有关详细信息,请参阅LICENSE文件。

致谢

  • Regex用于正则表达式解析。
  • Structopt用于命令行参数解析。
  • Tokio用于异步运行时支持。
  • Crossterm用于终端处理。

示例正则表达式

  1. Nginx访问日志(默认)
^(\S+) - - \[(.*?)\]( )\"(\S+) (\S+?)(?:\?.*?)? .+
  • 日期格式:%Y-%m-%d %H:%M:%S %z
  1. Apache访问日志
^(\S+) \S+ \S+ \[.*?\] "\S+ (\S+?)(?:\?.*?)? \S+" \d+ \d+
  • 日期格式: %d/%b/%Y:%H:%M:%S %z
  1. Nginx 错误日志
^(\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2}) \[error\] \d+#\d+: \*.*?, client: (\S+), server: \S+, request: "\S+ \S+ \S+", host: "\S+"
  • 日期格式: %Y/%m/%d %H:%M:%S
  1. Apache 错误日志
^\[\w+ \w+ \d+ \d{2}:\d{2}:\d{2} \d{4}\] \[error\] \[client (\S+)\] \S+:\s(\S+)
  • 日期格式: %a %b %d %H:%M:%S %Y
  1. Kubernetes 日志
^(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d+Z) \S+ \S+ (\S+)\[\d+\]: \S+ \S+ (\S+)$
  • 日期格式: %Y-%m-%dT%H:%M:%S%.fZ

依赖

~12–20MB
~246K SLoC