5个不稳定版本
0.3.0 | 2020年3月20日 |
---|---|
0.2.1 | 2018年12月7日 |
0.2.0 | 2018年10月8日 |
0.1.1 | 2018年9月9日 |
0.1.0 | 2018年9月9日 |
在#log-format中的排名#28
53KB
905 行
Redeye
将Apache风格的访问日志解析为Logstash JSON。
关于
Redeye从stdin读取NCSA或Apache风格的访问日志,并将Logstash兼容的JSON写入stdout。这使得应用程序可以继续以他们一直以来的方式发射访问日志,同时获得在工具如Kibana中结构化日志的好处。
Redeye支持通用日志格式以及组合日志格式。关于这些格式的更多信息可以在Apache文档中找到。
通用日志格式的一个例子是
127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /index.html HTTP/1.0" 200 2326
而组合日志格式的一个例子是
127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /index.html HTTP/1.0" 200 2326 "http://www.example.com/start.html" "Mozilla/4.08 [en] (Win98; I ;Nav)"
用法
以下是一些如何使用Redeye将日志文件解析为结构化JSON的示例。
解析文件
由于Redeye从标准输入解析日志行,因此您可以使用类似以下shell命令来解析文件。
$ cat <<EOF > logs.txt
127.0.0.1 - - [02/Oct/2018:13:55:36 -0400] "GET /index.html HTTP/1.1" 200 2326
127.0.0.1 - - [02/Oct/2018:13:55:37 -0400] "GET /favicon.ico HTTP/1.1" 200 56
127.0.0.1 - - [02/Oct/2018:13:55:38 -0400] "GET /header.png HTTP/1.1" 304 4051
EOF
这创建了一个包含一些日志条目的文件,名为logs.txt
。接下来,我们解析这些条目。注意,此示例使用jq
工具以很好地格式化JSON。
$ redeye --common-format < logs.txt | jq -S .
{
"@timestamp": "2018-10-02T13:55:36-04:00",
"@version": "1",
"content_length": 2326,
"message": "127.0.0.1 - - [02/Oct/2018:13:55:36 -0400] \"GET /index.html HTTP/1.1\" 200 2326",
"method": "GET",
"protocol": "HTTP/1.1",
"remote_host": "127.0.0.1",
"requested_uri": "/index.html",
"requested_url": "GET /index.html HTTP/1.1",
"status_code": 200
}
{
"@timestamp": "2018-10-02T13:55:37-04:00",
"@version": "1",
"content_length": 56,
"message": "127.0.0.1 - - [02/Oct/2018:13:55:37 -0400] \"GET /favicon.ico HTTP/1.1\" 200 56",
"method": "GET",
"protocol": "HTTP/1.1",
"remote_host": "127.0.0.1",
"requested_uri": "/favicon.ico",
"requested_url": "GET /favicon.ico HTTP/1.1",
"status_code": 200
}
{
"@timestamp": "2018-10-02T13:55:38-04:00",
"@version": "1",
"content_length": 4051,
"message": "127.0.0.1 - - [02/Oct/2018:13:55:38 -0400] \"GET /header.png HTTP/1.1\" 304 4051",
"method": "GET",
"protocol": "HTTP/1.1",
"remote_host": "127.0.0.1",
"requested_uri": "/header.png",
"requested_url": "GET /header.png HTTP/1.1",
"status_code": 304
}
解析服务器输出
Redeye附带一个简单的Python(版本3.4+)HTTP服务器,该服务器在stdout上以通用日志格式发射访问日志。您可以运行此服务器以演示Redeye解析输出的方式。
从Redeye代码库的根目录运行
$ python util/server.py | ./path/to/redeye --common-format | jq -S .
在另一个终端中,运行以下命令几次。
$ curl 'https://127.0.0.1:8000/'
如果您没有从Python服务器和Redeye中看到任何输出,请尝试再运行几次curl
命令。Redeye为了效率而缓冲输入,因此可能需要几个请求才能发射任何输出。
跟踪文件
您还可以使用Redeye和标准UNIX工具解析写入文件中的日志行。以下是一个使用上面提到的Python服务器的示例。
首先,启动Python HTTP服务器以提供服务并写入访问日志到文件。
$ python util/server.py > access.log
在另一个终端中,开始跟踪该文件的内容并将它们通过管道传输到Redeye。
$ tail -f access.log | ./path/to/redeye --common-format | jq -S .
在另一个终端中,使用 curl
发送几个请求,以查看其实际效果。
$ curl 'https://127.0.0.1:8000/'
再次提醒,这里正在进行相当大的缓冲,因此您可能需要发送几个请求才能看到任何输出。
安装
Redeye是用Rust编写的,可以使用Rust工具 cargo
进行构建或安装。它也可以作为Docker镜像使用。以下是对这些方法的说明。
从Cargo(Rust包管理器)安装
首先,使用 rustup 安装Rust工具链。
接下来,运行以下命令以下载和安装Redeye。
$ cargo install --force redeye
这将与其他Rust二进制文件一起安装Redeye。您需要确保以这种方式安装的二进制文件在您的 $PATH
上。
从源代码 - glibc
首先,使用 rustup 安装Rust工具链。
接下来,确保您有所需的非Rust依赖项。
build-essential
- C编译器工具链
然后,检出并构建项目
$ git clone https://github.com/tshlabs/redeye.git && cd redeye
$ cargo build --release
您的二进制文件应在 target/release/redeye
。
从源代码 - musl libc
首先,使用 rustup 安装Rust工具链。
然后,添加一个musl目标
$ rustup target add x86_64-unknown-linux-musl
接下来,确保您有所需的非Rust依赖项。
build-essential
- C编译器工具链musl-tools
- musl libc实现
然后,检出并构建项目
$ git clone https://github.com/tshlabs/redeye.git && cd redeye
$ cargo build --release --target=x86_64-unknown-linux-musl
您的二进制文件应在 target/x86_64-unknown-linux-musl/release/redeye
。
Docker
Redeye的Docker镜像被推送到每个发布周期的Docker Hub。要运行最新版本,请使用以下命令。
docker run --rm --tty --interactive tshlabs/redeye:latest
文档
库文档可在 https://docs.rs/redeye/ 找到
源代码
源代码可在GitHub上找到,地址为 https://github.com/tshlabs/redeye
变更
Redeye的发行说明可在 CHANGES.md 文件中找到。
开发
Redeye使用Cargo执行各种开发任务。
要构建Redeye
$ cargo build
要运行测试
$ cargo test
或
$ cargo test -- --ignored
要运行基准测试
$ cargo bench
要构建文档
$ cargo doc
许可证
Redeye根据GPL,版本3的条款提供。
贡献
除非您明确说明,否则您有意提交以包含在作品中的任何贡献都应按上述方式许可,不附加任何额外条款或条件。
依赖项
~5.5–7.5MB
~131K SLoC