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.
- 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
cargo install mustermann
Or install it from the releases page.
mustermann [OPTIONS] <file_path> [otel_endpoint] [--service-name <service_name>]
-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
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
}
}
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:
MIT