7 releases (major breaking)
new 12.0.0 | Apr 13, 2025 |
---|---|
11.0.0 | Apr 12, 2025 |
10.0.0 | Apr 9, 2025 |
9.0.0 | Apr 8, 2025 |
6.0.0 | Feb 28, 2025 |
#135 in Testing
372 downloads per month
690KB
3K
SLoC
mustermann
Mustermann is a CLI tool that generates test data for OpenTelemetry pipelines using a custom virtual machine. It allows you to define complex service interactions and log patterns through YAML configuration files, making it perfect for testing and validating your observability infrastructure.
Features
- Generate realistic test data for OpenTelemetry pipelines
- Define service interactions and dependencies
- Create custom log patterns with variable substitution
- Control execution frequency and patterns
- Support for different log severity levels
- Custom virtual machine for efficient execution
Installation
cargo install mustermann
Or install it from the releases page.
Usage
mustermann [OPTIONS] <file_path> [otel_endpoint] [--service-name <service_name>]
Options
-p, --print-code
: Enable debug mode to print generated bytecode-s, --service-name <service_name>
: The name of the service to be used in the logs (default: "mustermann")file_path
: Path to the configuration YAML fileotel_endpoint
: Optional OpenTelemetry endpoint URL
Example
mustermann config.yaml http://localhost:4317 --service-name my-service
Standalone service just printing values:
service payments {
method charge {
print "Processing payment for order %s" with ["12345", "67890"];
sleep 500ms;
}
loop {
call charge;
}
}
Standalone service printing values to stderr:
service payments {
method charge {
stderr "Processing payment for order %s" with ["12345", "67890"];
sleep 500ms;
}
loop {
call charge;
}
}
Service accepting requests from other services:
service payments {
method charge {
print "Processing payment for order %s" with ["12345", "67890"];
sleep 500ms;
}
}
Call another service:
service products {
method get_products {
print "Fetching product orders %s" with ["12345", "67890"];
sleep 500ms;
}
}
service frontend {
method main_page {
print "Main page";
call products.get_products;
}
loop {
call main_page;
}
}
Multi-service example
service products {
method get_products {
print "Fetching product orders %s" with ["12345", "67890"];
sleep 500ms;
}
}
service features {
method is_enabled {
print "Check if feature is enabled %s" with ["login", "upload", "create"];
sleep 1000ms;
}
}
service frontend {
method login {
print "Main page";
call features.is_enabled;
}
loop {
call login;
}
}
service analytics {
method main_page {
print "Main page";
call products.get_products;
}
loop {
call main_page;
}
}
service frontend_b {
method main_page {
print "Main page";
call products.get_products;
}
loop {
call main_page;
}
}
This service definition will generate the following service map:
License
MIT
Dependencies
~28–40MB
~608K SLoC