71 lines
2.2 KiB
Markdown
71 lines
2.2 KiB
Markdown
---
|
|
title: Load Generator
|
|
aliases: [loadgenerator]
|
|
cSpell:ignore: instrumentor instrumentors loadgenerator locustfile urllib
|
|
---
|
|
|
|
The load generator is based on the Python load testing framework
|
|
[Locust](https://locust.io). By default it will simulate users requesting
|
|
several different routes from the frontend.
|
|
|
|
[Load generator source](https://github.com/open-telemetry/opentelemetry-demo/blob/main/src/loadgenerator/)
|
|
|
|
## Traces
|
|
|
|
### Initializing Tracing
|
|
|
|
Since this service is a
|
|
[locustfile](https://docs.locust.io/en/stable/writing-a-locustfile.html), the
|
|
OpenTelemetry SDK is initialized after the import statements. This code will
|
|
create a tracer provider, and establish a Span Processor to use. Export
|
|
endpoints, resource attributes, and service name are automatically set using
|
|
[OpenTelemetry environment variables](/docs/specs/otel/configuration/sdk-environment-variables/).
|
|
|
|
```python
|
|
tracer_provider = TracerProvider()
|
|
trace.set_tracer_provider(tracer_provider)
|
|
tracer_provider.add_span_processor(BatchSpanProcessor(OTLPSpanExporter()))
|
|
```
|
|
|
|
### Adding instrumentation libraries
|
|
|
|
To add instrumentation libraries you need to import the Instrumentors for each
|
|
library in your Python code. Locust uses the `Requests` and`URLLib3` libraries,
|
|
so we will import their Instrumentors.
|
|
|
|
```python
|
|
from opentelemetry.instrumentation.requests import RequestsInstrumentor
|
|
from opentelemetry.instrumentation.urllib3 import URLLib3Instrumentor
|
|
```
|
|
|
|
In your code before the library is leveraged, the Instrumentor needs to be
|
|
initialized by calling `instrument()`.
|
|
|
|
```python
|
|
RequestsInstrumentor().instrument()
|
|
URLLib3Instrumentor().instrument()
|
|
```
|
|
|
|
Once initialized, every Locust requests for this load generator will have their
|
|
own trace with a span for each of the `Requests` and `URLLib3` libraries.
|
|
|
|
## Metrics
|
|
|
|
TBD
|
|
|
|
## Logs
|
|
|
|
TBD
|
|
|
|
## Baggage
|
|
|
|
OpenTelemetry Baggage is used by the load generator to indicate that the traces
|
|
are synthetically generated. This is done in the `on_start` function by creating
|
|
a context object containing the baggage item, and associating that context for
|
|
all tasks by the load generator.
|
|
|
|
```python
|
|
ctx = baggage.set_baggage("synthetic_request", "true")
|
|
context.attach(ctx)
|
|
```
|