开源日志查看工具 hl 专为高效处理 JSON 或 logfmt 格式的结构化日志而设计。该工具采用 Rust 语言构建,提供了快速的索引与解析能力,能够快速扫描体积庞大的日志文件,无论其是否经过压缩。
根据 hl 作者发布的基准测试,该查看器在初次扫描时自动索引的吞吐量最高可达约 2 GiB/s,而在重新索引增长中的文件时,吞吐量最高可达约 10 GiB/s。这一性能表现似乎显著优于 hlogf、humanlog、fblog 和 fblog-d 等替代方案,使其成为需要从命令行处理超大日志文件的 运维/DevOps 工程师的强力工具。
作者表示,hl 同样擅长处理“总计达数百GB的数百个本地文件”。
hl 内置了一个类似于 less 的集成分页器,便于浏览日志条目,同时还提供了一套丰富的功能用于过滤、搜索、排序和格式化日志。用户可以根据日志级别(例如 error、warn、info 等)、字段或键值对(例如 component=tsdb,或 request.method?!=GET 等)以及时间范围(例如 --since yesterday, --since -3h, --until 'Jun 19 11:22:33' 等)进行过滤。
hl 支持的其他实用功能包括:
- 跟随模式:类似于
tail -f,使用 -F 选项时,可在多个源之间实现基于时间戳的自动排序。
- 自定义输出:使用
-h 选项可以简单控制隐藏或显示特定字段。
- 自动时区切换:将时间戳转换为所需的时区。
- 支持UI主题和配色方案。
hl 的一项强大能力是,它可以使用逻辑、比较、集合和字符串运算符来组合基本过滤选项,从而构建复杂查询。例如,以下命令结合了日志级别和两个字段过滤器:
hl my-service.log --query 'level > info or status-code >= 400 or duration > 0.5'
hl 的查询还允许你明确表达如何处理缺失的字段。例如,hl my-service.log -q 'exists(.price)' 会匹配定义了 price 字段(无论其值为何)的日志条目,排除那些缺失该字段的条目。而 hl my-service.log -q '.price?=3' 则会返回 price 字段缺失或等于 3 的条目。
在最近一个关于 Grafana 配置复杂性的 Hacker News 讨论中,用户 solatic 指出,对于只有一个应用实例的简单场景,hl 是比 Grafana Loki 等更复杂工具的一个良好替代品,他补充道:
如果你有多台机器,可能没有必要将日志发送到一个地方,但这非常有帮助;否则,基本上就得靠 SSH 多路复用了。
对于寻求轻量级本地日志分析方案的团队,hl 这类高性能命令行工具提供了一个值得考虑的 监控工具 选项。
hl 基于 MIT 许可证发布,可在 macOS、Linux 和 Windows 上运行。作为专注于提升日志处理效率的 可观测性 工具,它为开发者和运维人员提供了新的选择。
Github:https://github.com/pamburus/hl
|