ekneg54/loggen-rs
GitHub: ekneg54/loggen-rs
用 Rust 编写的高性能模板驱动日志生成器,支持内置攻击模式和多种输出目标,用于安全检测规则验证与日志管道压测。
Stars: 0 | Forks: 0
# loggen-rs
一个用 Rust 编写的高性能日志生成器。使用 Tera (Jinja2) 模板、内置随机变量和可配置的攻击模式生成逼真的日志条目——支持流式传输到 stdout、文件、HTTP 或 Kafka。
## 快速开始
```
loggen generate --count 100 # 100 basic entries
loggen generate --templates ./templates/ --count 1000 --output out.log # Template mode
loggen generate --config examples/template-example.yaml # From YAML
```
## 内置变量
模板中自动可用的变量:
| 变量 | 类型 | 描述 |
|----------|------|-------------|
| `{{ timestamp }}` | datetime | 当前 UTC 时间戳(使用 `| date(format="...")`) |
| `{{ level }}` | string | 来自配置的日志级别(`log_level`) |
| `{{ index }}` | u64 | 从 1 开始的条目计数器 |
| `{{ message }}` | string | 来自配置的消息(`message`) |
| `{{ ip }}` / `{{ ipv4 }}` | string | 随机 IPv4 地址 |
| `{{ ipv6 }}` | string | 随机 IPv6 地址 |
| `{{ user_agent }}` | string | 随机 User-Agent |
| `{{ email }}` | string | 随机电子邮件 |
| `{{ url }}` | string | 随机 URL 路径 |
| `{{ port }}` | u16 | 随机端口号 |
| `{{ status }}` | u16 | 加权随机 HTTP 状态码 |
| `{{ user }}` | string | 随机用户名 |
## 配置
所有功能均通过 YAML 或 CLI 标志进行配置。查看完整参考:
- [配置参考](docs/configuration-reference.md)
- [模板与变量指南](docs/template-guide.md)
- [攻击场景示例](docs/attack-gallery.md)
- [CLI 备忘单](docs/cli-cheatsheet.md)
### 最小配置
```
count: 100
log_level: INFO
message: "Example log entry"
```
### 带有随机变量的模板模式
```
count: 1000
logs:
- '{{ ipv4 }} - {{ email }} [{{ timestamp | date(format="%d/%b/%Y:%H:%M:%S %z") }}] "{{ method }} {{ url }} HTTP/1.1" {{ status }} {{ port }}'
- '{{ level }} | {{ ipv4 }} | {{ user_agent }} | {{ message }}'
template_vars:
app_name: loggen
random_intensity: 1.0
template_rotation: round_robin
```
### 攻击模式
```
attacks:
- name: brute-force
type: single_event
template: '{{ ipv4 }} - POST /login {{ status }}'
count: 50
interleave: true
vars:
status:
values: ["401", "401", "401", "401", "200"]
mode: weighted
ipv4:
values: ["192.168.1.100"]
mode: cycle
```
## 主要特性
- **模板引擎:** Tera(受 Jinja2 启发),支持 `{{ var }}`、过滤器、`{% if %}` 和 `{% for %}`
- **自动随机化:** 用于生成逼真 IP、UA、电子邮件、URL、端口和状态码的内置生成器
- **攻击模式:** `single_event`、`multi_ordered`、`threshold_field`,支持交错插入
- **流式输出:** 内存高效的管道——不会将所有条目缓冲在内存中
- **并行生成:** 基于 Rayon 的并行批处理,实现高吞吐量
- **多目标输出:** stdout、文件(支持轮转)、HTTP(支持批处理/重试)、Kafka
- **进度报告:** 针对大型生成任务向 stderr 实时输出统计信息
- **种子 RNG:** 通过 `seed` 配置或固定种子实现可复现的输出
- **Shell 补全:** 生成 bash/zsh/fish/powershell/elvish 补全脚本
## 示例配置
浏览 `examples/` 目录以获取可直接运行的 YAML 文件:
| 文件 | 描述 |
|------|-------------|
| `minimal.yaml` | 最小配置(5 个条目,默认值) |
| `example.yaml` | 包含所有核心字段的基础配置 |
| `file-output.yaml` | 文件输出目标 |
| `file-output-enhanced.yaml` | 文件轮转、缓冲、截断 |
| `template-example.yaml` | 带有内置随机变量的模板模式 |
| `http-output.yaml` | 带 NDJSON 批处理的 HTTP 输出 |
| `kafka-output.yaml` | Kafka 输出(需要 `--features kafka`) |
| `attack-brute-force.yaml` | 暴力破解登录(single_event) |
| `attack-port-scan.yaml` | 端口扫描(multi_ordered) |
| `attack-ddos.yaml` | DDoS 逐步增强(threshold_field) |
| `attack-sqli-probe.yaml` | SQL 注入探测(multi_ordered) |
| `attack-credential-stuffing.yaml` | 凭证填充(single_event + common) |
## 默认模板
`templates/` 目录包含可直接使用的 Apache combined、Nginx combined 和 Syslog(RFC 3164)格式模板:
```
loggen generate --templates ./templates/ --count 100
```
## CLI 概览
```
# 生成
loggen generate [-n COUNT] [-l LEVEL] [-m MESSAGE] [-o FILE]
[--templates PATH] [--var KEY=VALUE]
[--attack SPEC] [--attack-config FILE] [--attack-only]
[--validate] [--progress] [--no-progress] [--threads N]
# HTTP 输出
loggen http --url [-n COUNT]
# Kafka 输出
loggen kafka [-n COUNT]
# Shell 补全
loggen completions
```
## 构建
```
cargo build # Standard build
cargo build --features kafka # With Kafka support (requires librdkafka)
cargo test # Run all tests
```
## 文档
- `docs/configuration-reference.md` — 所有配置字段,包括类型、默认值和约束
- `docs/template-guide.md` — Tera 模板语法、内置变量、过滤器和随机化
- `docs/attack-gallery.md` — 攻击模式类型、变量模式、通用字段和交错插入
- `docs/cli-cheatsheet.md` — CLI 标志、攻击规范格式和常见示例
标签:Apache, CISA项目, IP 地址批量处理, Jinja2模板, Kafka, Nginx, Rust, SIEM测试, SOC演练, SonarQube插件, Syslog, 可视化界面, 安全测试, 攻击性安全, 攻击模式, 日志模拟, 日志流, 日志生成器, 模板引擎, 流量生成, 网络流量审计, 蓝军工具, 通知系统