https://github.com/go-faster/simon
WIP: Observability Workload Generator
https://github.com/go-faster/simon
go observability open-telemetry pprof profiling prometheus tracing
Last synced: about 1 month ago
JSON representation
WIP: Observability Workload Generator
- Host: GitHub
- URL: https://github.com/go-faster/simon
- Owner: go-faster
- License: apache-2.0
- Created: 2023-03-30T10:52:05.000Z (about 2 years ago)
- Default Branch: main
- Last Pushed: 2025-04-11T14:10:41.000Z (about 1 month ago)
- Last Synced: 2025-04-15T08:19:02.505Z (about 1 month ago)
- Topics: go, observability, open-telemetry, pprof, profiling, prometheus, tracing
- Language: Go
- Homepage:
- Size: 1.12 MB
- Stars: 6
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# simon
Observability load testing and simulation, under construction.
Supported platforms: {linux, windows, darwin}-{amd64, arm64, **riscv64**}
## Observability
- [x] Logs
- [x] Metrics
- [x] Traces
- [ ] Context propagation
- [ ] Profiling
- [ ] Health checks
- [ ] Liveness
- [ ] Readiness
- [ ] Other probes
## Deployment
- [x] Kubernetes deployment
- [ ] Helm chart## Run
### Docker
```console
docker run -i -t ghcr.io/go-faster/simon:latest
``````console
{"level":"info","ts":1680181590.1318264,"logger":"metrics","caller":"app/metrics.go:286","msg":"No metrics exporter is configured by OTEL_METRICS_EXPORTER"}
{"level":"info","ts":1680181590.134922,"logger":"metrics","caller":"app/metrics.go:319","msg":"No traces exporter is configured by OTEL_TRACES_EXPORTER"}
{"level":"info","ts":1680181590.1362665,"logger":"metrics","caller":"app/metrics.go:356","msg":"Propagators configured","propagators":["tracecontext","baggage"]}
{"level":"info","ts":1680181590.1375117,"logger":"metrics","caller":"app/metrics.go:112","msg":"Registering pprof routes","routes":["profile","symbol","trace","goroutine","heap","threadcreate","block"]}
{"level":"info","ts":1680181590.139126,"logger":"metrics","caller":"app/metrics.go:379","msg":"Metrics initialized","otel.resource":"process.runtime.description=go version go1.20.2 linux/riscv64,process.runtime.name=go,process.runtime.version=go1.20.2,service.name=simon,service.namespace=go-faster,telemetry.sdk.language=go,telemetry.sdk.name=opentelemetry,telemetry.sdk.version=1.14.0","metrics.http.addr":"localhost:9464"}
{"level":"info","ts":1680181590.1406643,"logger":"metrics","caller":"app/metrics.go:62","msg":"Starting metrics server"}
{"level":"info","ts":1680181591.1405013,"caller":"simon/main.go:28","msg":"Hello, world!"}
{"level":"info","ts":1680181592.1402662,"caller":"simon/main.go:28","msg":"Hello, world!"}
```### Pod
```console
kubectl -n sandbox apply -f _deploy/
```## Environment variables
See [General SDK Configuration][general-sdk] for OpenTelemetry.
[general-sdk]: https://opentelemetry.io/docs/concepts/sdk-configuration/general-sdk-configuration/
| Name | Description | Example | Default |
|-----------------------------------|-----------------------------------------------------------------------------|-------------------------|--------------------------------------------------------------|
| `METRICS_ADDR` | Address with metrics and pprof | `localhost:9464` | To prometheus addr |
| `PPROF_ROUTES` | List of enabled pprof routes | `cmdline,profile` | profile, symbol, trace, goroutine, heap, threadcreate, block |
| `OTEL_LOG_LEVEL` | Log level | `debug` | `info` |
| `OTEL_EXPORTER_PROMETHEUS_HOST` | Host of prometheus addr | `0.0.0.0` | `localhost` |
| `OTEL_EXPORTER_PROMETHEUS_PORT` | Port of prometheus addr | `9090` | `9464` |
| `OTEL_METRICS_EXPORTER` | Metrics exporter to use | `prometheus` | `none` |
| `OTEL_TRACES_EXPORTER` | Traces exporter to use | `jaeger` | `none` |
| `OTEL_EXPORTER_JAEGER_AGENT_HOST` | Jaeger exporter host | `jaeger.svc.local` | `localhost` |
| `OTEL_EXPORTER_JAEGER_AGENT_PORT` | Jaeger exporter port | `6831` | `6831` |
| `OTEL_SERVICE_NAME` | OTEL Service name | `app` | `unknown_service` |
| `OTEL_RESOURCE_ATTRIBUTES` | OTEL Resource attributes | `service.namespace=pfm` | |
| `OTEL_PROPAGATORS` | OTEL Propagators (only tracecontext and baggage supported, none to disable) | `none` | `tracecontext,baggage` || Environment variable | Option | Default value |
|--------------------------------------------------------------------------|-------------------------------|----------------------------------------------------------|
| `OTEL_EXPORTER_OTLP_ENDPOINT` `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT` | `WithEndpoint` `WithInsecure` | `https://localhost:4317` or `https://localhost:4318`[^1] |
| `OTEL_EXPORTER_OTLP_CERTIFICATE` `OTEL_EXPORTER_OTLP_TRACES_CERTIFICATE` | `WithTLSClientConfig` | |
| `OTEL_EXPORTER_OTLP_HEADERS` `OTEL_EXPORTER_OTLP_TRACES_HEADERS` | `WithHeaders` | |
| `OTEL_EXPORTER_OTLP_COMPRESSION` `OTEL_EXPORTER_OTLP_TRACES_COMPRESSION` | `WithCompression` | |
| `OTEL_EXPORTER_OTLP_TIMEOUT` `OTEL_EXPORTER_OTLP_TRACES_TIMEOUT` | `WithTimeout` | `10s` |### `METRICS_ADDR`
| Value | `METRICS_ADDR` |
|-------------|--------------------------------|
| Default | `localhost:9464` |
| Description | Address with metrics and pprof |
| Example | `0.0.0.0:9464` |### `PPROF_ROUTES`
| Value | `PPROF_ROUTES` |
|-------------|--------------------------------------------------------------|
| Default | profile, symbol, trace, goroutine, heap, threadcreate, block |
| Description | List of enabled pprof routes |