Rust日志重放工具rerun-cli的使用:高效命令行日志分析与实时重放插件库
Rerun命令行工具
您可以使用cargo install rerun-cli --locked --features nasm
安装二进制文件。
注意:这需要安装nasm CLI工具并将其添加到您的PATH环境变量中。或者,您可以跳过启用nasm功能,但这可能会导致视频解码性能下降。
rerun CLI根据启动时使用的选项可以作为服务器、查看器或两者同时运行。
不带参数运行rerun将启动查看器,等待SDK通过gRPC连接。
运行rerun --help获取更多信息。
什么是Rerun?
- 示例
- 高级文档
- Rust API文档
- 故障排除
运行web查看器
rerun --web-viewer path/to/file.rrd
示例代码
// 基本使用示例:记录和查看3D数据
use rerun::{
archetypes::Points3D,
components::{Color, Position3D},
MsgSender, RecordingStreamBuilder,
};
fn main() -> Result<(), Box<dyn std::error::Error>> {
// 创建记录流
let (rec_stream, _) = RecordingStreamBuilder::new("rerun_example").spawn()?;
// 记录一些3D点
MsgSender::from_archetype(
"points",
&Points3D::new([
Position3D::new(0.0, 0.0, 0.0),
Position3D::new(1.0, 1.0, 1.0),
Position3D::new(2.0, 2.0, 2.0),
])
.with_colors([Color::from_rgb(255, 0, 0), Color::from_rgb(0, 255, 0), Color::from_rgb(0, 0, 255)]),
)?
.send(&rec_stream)?;
println!("数据已记录,运行以下命令查看:");
println!("rerun path/to/recorded_data.rrd");
Ok(())
}
完整示例
// 完整的3D场景记录示例
use rerun::{
archetypes::{Points3D, Arrows3D, Transform3D},
components::{Color, Position3D, Vector3D},
datatypes::{Rotation3D, Scale3D, Translation3D},
MsgSender, RecordingStreamBuilder,
};
fn main() -> Result<(), Box<dyn std::error::Error>> {
// 创建记录流
let (rec_stream, _) = RecordingStreamBuilder::new("3d_demo").spawn()?;
// 记录坐标系
MsgSender::new("world")
.with_component(&[Transform3D::new(Transform3D::identity())])?
.send(&rec_stream)?;
// 记录3D点
MsgSender::from_archetype(
"world/points",
&Points3D::new([
Position3D::new(0.0, 0.0, 0.0),
Position3D::new(1.0, 1.0, 1.0),
Position3D::new(2.0, 2.0, 2.0),
])
.with_colors([
Color::from_rgb(255, 0, 0),
Color::from_rgb(0, 255, 0),
Color::from_rgb(0, 0, 255),
]),
)?
.send(&rec_stream)?;
// 记录3D箭头
MsgSender::from_archetype(
"world/arrows",
&Arrows3D::new([Vector3D::new(1.0, 0.0, 0.0)])
.with_origins([Position3D::new(0.0, 0.0, 0.0)])
.with_colors([Color::from_rgb(255, 255, 0)]),
)?
.send(&rec_stream)?;
println!("3D场景已记录,使用以下命令查看:");
println!("rerun --web-viewer recorded_data.rrd");
Ok(())
}
# 查看记录的3D场景
rerun --web-viewer recorded_data.rrd
安装
运行以下命令将全局安装rerun二进制文件:
cargo install rerun-cli
1 回复
Rust日志重放工具rerun-cli的使用指南
介绍
rerun-cli是一个高效的Rust命令行日志分析与实时重放工具,它允许开发者:
- 解析和重放日志文件
- 实时监控日志流
- 对日志进行过滤和分析
- 以可视化方式展示日志流
这个工具特别适合调试分布式系统、微服务架构或需要分析时序日志的场景。
安装方法
使用Cargo安装rerun-cli:
cargo install rerun-cli
或者从GitHub仓库构建:
git clone https://github.com/rerun-io/rerun.git
cd rerun/cli
cargo install --path .
基本使用方法
1. 重放日志文件
rerun-cli replay /path/to/logfile.log
2. 实时监控日志
tail -f /var/log/app.log | rerun-cli
3. 过滤特定日志级别
rerun-cli --level=error /path/to/logfile.log
高级功能示例
1. 时间范围过滤
rerun-cli --start="2023-01-01 10:00:00" --end="2023-01-01 11:00:00" /path/to/logfile.log
2. 正则表达式过滤
rerun-cli --pattern=".*error.*" /path/to/logfile.log
3. 输出格式化
rerun-cli --format=json /path/to/logfile.log | jq .
4. 重放速度控制
rerun-cli --speed=2.0 /path/to/logfile.log # 2倍速重放
配置文件示例
rerun-cli支持配置文件,默认查找~/.rerun/config.toml
:
[default]
level = "warn"
format = "json"
speed = 1.5
[filters]
include = ["error", "critical"]
exclude = ["debug"]
与Rust项目集成
在Rust项目中,你可以通过库API直接使用rerun的功能:
use rerun::RecordingStream;
fn main() {
let rec = RecordingStream::new("my_app");
rec.log(
"logs/message",
&rerun::TextLog::new("This is a log message")
.level(rerun::LogLevel::Warn),
).unwrap();
}
性能提示
对于大型日志文件,建议:
- 使用
--batch-size
参数控制内存使用 - 结合
grep
等工具进行预处理 - 考虑将日志文件分割后并行处理
rerun-cli是一个功能强大且灵活的工具,可以根据具体需求组合各种参数和过滤器来满足不同的日志分析场景。
完整示例Demo
以下是使用rerun-cli的完整示例流程:
- 首先安装rerun-cli:
cargo install rerun-cli
- 创建一个示例日志文件
example.log
:
echo -e "2023-01-01 10:00:00 [INFO] Application started\n2023-01-01 10:01:23 [ERROR] Database connection failed\n2023-01-01 10:02:45 [WARN] High memory usage detected" > example.log
- 基本重放日志:
rerun-cli replay example.log
- 过滤错误日志:
rerun-cli --level=error example.log
- 使用时间范围过滤:
rerun-cli --start="2023-01-01 10:01:00" --end="2023-01-01 10:03:00" example.log
- 使用配置文件:
创建~/.rerun/config.toml
:
[default]
level = "warn"
format = "pretty"
speed = 1.0
[filters]
include = ["error", "warn"]
- Rust项目集成示例:
use rerun::{RecordingStream, LogLevel};
fn main() {
// 创建记录流
let rec = RecordingStream::new("demo_app");
// 记录不同级别的日志
rec.log(
"logs/startup",
&rerun::TextLog::new("Application starting...")
.level(LogLevel::Info),
).unwrap();
rec.log(
"logs/error",
&rerun::TextLog::new("Failed to connect to database")
.level(LogLevel::Error),
).unwrap();
rec.log(
"logs/performance",
&rerun::TextLog::new("High CPU usage detected")
.level(LogLevel::Warn),
).unwrap();
}
- 性能优化处理大型日志:
# 使用批处理减少内存占用
rerun-cli --batch-size=1000 large_logfile.log
# 结合grep预处理
grep "ERROR" large_logfile.log | rerun-cli
# 并行处理分割后的日志
split -l 10000 large_logfile.log log_part_
for part in log_part_*; do
rerun-cli $part &
done
wait
通过这些示例,您可以全面了解rerun-cli的功能和用法,从基本操作到高级功能集成。