An open API service indexing awesome lists of open source software.

https://github.com/schultyy/mustermann

Generate Test Data for your OpenTelemetry pipeline
https://github.com/schultyy/mustermann

logs opentelemetry otlp rust tracing

Last synced: 4 months ago
JSON representation

Generate Test Data for your OpenTelemetry pipeline

Awesome Lists containing this project

README

          

# mustermann

![CI](https://github.com/schultyy/mustermann/actions/workflows/ci.yml/badge.svg)


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

```bash
cargo install mustermann
```

Or install it from the [releases page](https://github.com/schultyy/mustermann/releases).

## Usage

```bash
mustermann [OPTIONS] [otel_endpoint] [--service-name ]
```

### Options

- `-p, --print-code`: Enable debug mode to print generated bytecode
- `-s, --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

```bash
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](servicemap.png)

## License

MIT