3 个版本
0.5.8 | 2023年1月15日 |
---|---|
0.5.2 | 2022年5月10日 |
0.5.0 | 2022年5月9日 |
#499 在 文本处理
14,639 每月下载量
用于 fqkit
185KB
3K SLoC
lowcharts
用于在终端中绘制低分辨率图表的工具。
lowcharts 主要用于在文本文件中具有数值数据且希望将其显示在终端中进行基本分析的场景。
例如,一个服务的日志(web服务器、数据库、代理、容器编排等),其中记录了请求的(时间或大小)。在理想的世界中,您可以通过 kibana(或类似工具)访问这些日志,或者将这些度量指标暴露给 prometheus(或类似工具),并在 grafana 仪表板(或类似工具)中绘制图表。但有时我们必须应对非理想的世界,并使用仅能在 shell 终端中使用的工具来调试服务。
用法
输入 lowcharts --help
,或 lowcharts PLOT-TYPE --help
查看完整选项列表。
目前支持六种基本图表类型
用于输入匹配的条形图
由于 grep -c
不按模式聚合计数,这可能是我的最常见用法。
此图表使用 lowcharts matches --input database.log SELECT UPDATE DELETE INSERT DROP
生成
数值输入的直方图
此图表是使用以下命令生成的:python3 -c 'import random; [print(random.normalvariate(5, 5)) for _ in range(100000)]' | lowcharts hist
这受到了data-hacks的启发。然而,对于一些大型的日志文件,我发现该项目的速度比我期望的要慢得多,而我发现Rust编译的二进制文件更适合我的需求:易于复制(无依赖)且非常快。
支持指定范围、图表大小和输入文件选项
lowcharts hist --max 0.5 --intervals 10 --width 50 data.txt
Samples = 50090; Min = 0.000; Max = 0.499
Average = 0.181; Variance = 0.023; STD = 0.154
each ∎ represents a count of 484
[0.000 .. 0.050] [14545] ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
[0.050 .. 0.100] [ 6111] ∎∎∎∎∎∎∎∎∎∎∎∎
[0.100 .. 0.150] [ 4911] ∎∎∎∎∎∎∎∎∎∎
[0.150 .. 0.200] [ 4003] ∎∎∎∎∎∎∎∎
[0.200 .. 0.250] [ 3745] ∎∎∎∎∎∎∎
[0.250 .. 0.300] [ 3526] ∎∎∎∎∎∎∎
[0.300 .. 0.350] [ 3424] ∎∎∎∎∎∎∎
[0.350 .. 0.400] [ 3332] ∎∎∎∎∎∎
[0.400 .. 0.450] [ 3215] ∎∎∎∎∎∎
[0.450 .. 0.500] [ 3278] ∎∎∎∎∎∎
以上示例假设输入文件每行有一个数字。通过regex
选项支持确定在输入文件中查找值的选项。以下示例记录了nginx处理200K个http响应所花费的时间()
$ cat nginx*.log | lowcharts hist --regex ' 200 \d+ ([0-9.]+)' --intervals 10
Samples = 25080; Min = 0.004; Max = 0.049
Average = 0.008; Variance = 0.000; STD = 0.006
each ∎ represents a count of 228
[0.004 .. 0.009] [20569] ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
[0.009 .. 0.013] [ 1329] ∎∎∎∎∎
[0.013 .. 0.018] [ 807] ∎∎∎
[0.018 .. 0.022] [ 1412] ∎∎∎∎∎∎
[0.022 .. 0.027] [ 363] ∎
[0.027 .. 0.031] [ 27]
[0.031 .. 0.036] [ 128]
[0.036 .. 0.040] [ 22]
[0.040 .. 0.044] [ 240] ∎
[0.044 .. 0.049] [ 183]
命令支持--log-scale
标志,用于使用对数刻度。
时间直方图
此图表是使用以下命令生成的:strace -tt ls -lR * 2>&1 | lowcharts timehist --intervals 10
例如,lowcharts timehist --regex ' 404 ' nginx.log
应以类似的方式工作,并可以让你看到服务器上何时以及多少次触发了404错误。
目的是描绘匹配正则表达式的日志频率(默认情况下,任何由工具读取的日志)。子命令可以自动检测最常见的(根据我个人的主观经验)datetime/timestamp格式:rfc 3339,rfc 2822,python %(asctime)s
,golang默认日志格式,nginx,rabbitmq,strace -t(或 -tt,或 -ttt),ltrace等,只要时间戳出现在日志的第一行,并且所有包含时间戳的行格式一致。没有时间戳的行是可以的。一致性是必需的,因为性能原因:第一条日志是唯一一个可以触发创建专用datetime解析器的启发式算法的日志。
然而,如果你有一个lowcharts无法自动检测的格式,你可以通过命令行标志指定它。例如,--format '%d-%b-%Y::%H:%M:%S'
。请注意,截至今天,您需要省略格式字符串中的时区部分(自动检测与时区配合得很好)。
分割时间直方图
这将在单个可视化中添加时间直方图和条形图。
此图表使用以下命令生成:strace -tt ls -lR 2>&1 | lowcharts split-timehist open mmap close read write --intervals 10
此图展示了随时间变化的搜索词的相对频率。
常用词直方图
用于绘制输入行中最常用词的图表。
此示例图表使用以下命令生成:strace ls -l 2>&1 | lowcharts common-terms --lines 8 -R '(.*?)\('
该图展示了由 ls -l
命令使用的 8 个最常用系统调用,以及其使用次数和排序。一般来说,使用 lowcharts common-terms
是 awk ... | sort | uniq -c | sort -rn | head
形式命令的一个方便替代。
XY图
此图表使用以下命令生成:cat ram-usage | lowcharts plot --height 20 --width 50
请注意,x 轴没有标签。该工具将输入数据分割成固定大小的块,然后图表显示这些块的平均值。换句话说:按时间分组数据尚不支持;您可以看到一个指标随时间的变化,但不能看到其变化的速率。
此类型图表支持正则表达式。
安装
通过发行版
访问 https://github.com/juan-leon/lowcharts/releases/ 并下载您想要的二进制文件。解压缩文件并将二进制文件复制到您的路径。
通过本地编译
$ git clone https://github.com/juan-leon/lowcharts
$ cd lowcharts
$ cargo install --path .
通过 AUR
Arch-Linux 用户可以通过 AUR 包安装 lowcharts,lowcharts-bin 或 lowcharts-git。
通过 Debian 软件包
如果您使用的是基于 Debian 的 Linux 发行版,您可以从 https://github.com/juan-leon/lowcharts/releases/ 下载适用于您架构的 Debian 文件。然后您可以使用 dpkg -i
安装它。
作为库使用
lowcharts
可以作为库由任何需要显示基于文本图表的代码使用。
[dependencies]
lowcharts = "*"
示例
use lowcharts::plot;
let vec = &[-1.0, -1.1, 2.0, 2.0, 2.1, -0.9, 11.0, 11.2, 1.9, 1.99];
// Plot a histogram of the above vector, with 4 buckets and a precision
// choosen by library
let options = plot::HistogramOptions { intervals: 4, ..Default::default() };
let histogram = plot::Histogram::new(vec, options);
print!("{}", histogram);
您可以通过以下方式禁用颜色:
// use yansi::Paint;
Paint::disable();
您可以在 这里 找到文档。
贡献
欢迎反馈、想法和 pull 请求。
依赖项
~6–15MB
~181K SLoC