Skip to content

schultyy/mustermann

Repository files navigation

mustermann

CI
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 file
  • otel_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:

servicemap

License

MIT