26 个版本
0.7.3 | 2023年4月12日 |
---|---|
0.7.2 | 2022年12月26日 |
0.7.0 | 2022年9月26日 |
0.6.5 | 2022年5月9日 |
0.5.5 | 2020年3月3日 |
#5 在 #ipv4-address
35KB
540 行
alog
alog
是一个简单的日志文件匿名化工具。
关于
实际上,默认情况下 alog
只会将任何输入流中每一行的第一个单词替换为一个可定制的字符串。
因此,“日志文件匿名化工具”可能有些言过其实,但 alog
可以用于(非常高效地)替换许多访问日志格式中的 $remote_addr
部分,例如 Nginx 的默认组合日志格式。
log_format combined '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
默认情况下,任何可解析的 $remote_addr
都将替换为其 localhost 表示形式,
- 任何有效的 IPv4 地址都替换为 127.0.0.1,
- 任何有效的 IPv6 地址都替换为 ::1,
- 任何字符串(可能是域名)都替换为 localhost。
没有 $remote_addr
部分的行将保持不变(但可以跳过)。
变更
0.7 版本:
- 默认情况下,现在将从每一行的开头移除所有
ASCII 空白字符
。 - run() 和 run_raw() 函数现在将返回 Result 而不是在失败时退出。
0.6 版本:
- 您可以用 '-' 替换
$remote_user
,并且 - 默认情况下,任何行首的空格或制表符都会在替换任何
$remote_addr
之前被移除。
构建 alog
0.3 版本添加了 [features]
,因此库 crate 不会拉取不必要的依赖项。
命令行工具
要构建 alog
命令行工具,您现在必须明确添加 --features
。
cargo build --features alog-cli
或者
cargo build --all-features
用法
命令行工具
使用 --help
运行 cli-tool。
./target/release/alog --help
库
调用 run()
fn main() {
let mut io_conf = alog::IOConfig::default();
let mut conf = alog::Config::default();
io_conf.push_input("/tmp/test.log");
conf.set_ipv4_value("0.0.0.0");
if let Err(e) = alog::run(&conf, &io_conf) {
eprintln!("{}", e);
}
}
或者 run_raw()
use std::io::Cursor;
fn main() {
let mut buffer = vec![];
if let Err(e) = alog::run_raw(
&alog::Config {
ipv4: "XXX",
..Default::default()
},
Cursor::new(b"8.8.8.8 test line"),
&mut buffer,
) {
eprintln!("{}", e);
}
assert_eq!(buffer, b"XXX test line");
}
关于 Config::authuser
从版本 0.6 开始,alog
可以用来用 '-' 替换 $remote_user
字段,但这个特性有一些特殊之处。
这个特性应该可以很好地与标准通用/组合日志格式的文件一起工作,但是...
-
性能会受到显著影响(在我的机器上,合成基准测试表明,从 ~1100MB/s 下降到 ~625MB/s,但仍然比 Perl 的 ~115MB/s 好一些 ;)
-
当与
Config::trim
设置为false
和格式不正确的文件一起使用时,性能影响会更糟,并且如果找不到$time_local
字段,则完全无法移除$remote_user
字段。 -
期望
$time_local
字段以 '[' 开头,后面跟着一个十进制数字。例如:"[10/Oct/2000:13:55:36 -0700]" -
已经有一个优化措施用于减少真实日志文件的性能影响,但这也导致
$remote_user
字段 以 "- [" 开头 的字段 不会被替换!所以在这种情况下:"8.8.8.8 - - [frank] [10/Oct/2000:13:55:36 -0700] GET /apache_pb.gif HTTP/1.0 200 2326"
"frank" 仍然将是 "frank"。这个优化可以禁用。
项目状态
alog
是作为一个在旧备份主机上运行的少于 10 行的 Perl 脚本的替代品开始的。所以没有什么亮点...但它帮助我学习了一些 Rust(以及 crates.io)的基础知识。
随着版本 0.6 的发布,alog
已经功能完整。它做的事情不多,但做得相当不错。在某个时候,我可能会重新使用这个包,并努力真正匿名化数据。但现在,就是这样。
如果我发现(并且如果)有错误,我仍然会修复它们,所以 alog
现在是被动维护的。
依赖关系
~2.8–4.5MB
~70K SLoC