Skip to content

Commit def3a4c

Browse files
Emit load generator logs via OTLP (#1446)
* add otel logging to loadgen * attach to root logger * actually output logs * update changelog * fix sanity --------- Co-authored-by: Juliano Costa <julianocosta89@outlook.com>
1 parent 5a5eb25 commit def3a4c

File tree

4 files changed

+41
-13
lines changed

4 files changed

+41
-13
lines changed

CHANGELOG.md

+2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ the release.
77

88
## Unreleased
99

10+
* [loadgenerator] emit logs via OTLP
11+
([#1446](https://github.com/open-telemetry/opentelemetry-demo/pull/1446))
1012
* [frontend] reset quantity when new product selected
1113
([#1447](https://github.com/open-telemetry/opentelemetry-demo/pull/1447))
1214
* [featureflag] deprecate in favor of flagd

src/loadgenerator/Dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,4 @@ COPY ./src/loadgenerator/people.json .
2020
ENV LOCUST_PLAYWRIGHT=1
2121
ENV PLAYWRIGHT_BROWSERS_PATH=/opt/pw-browsers
2222
RUN playwright install --with-deps chromium
23-
ENTRYPOINT locust
23+
ENTRYPOINT locust --skip-log-setup

src/loadgenerator/locustfile.py

+26-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@
88
import os
99
import random
1010
import uuid
11+
import logging
12+
import sys
13+
from pythonjsonlogger import jsonlogger
1114
from locust import HttpUser, task, between
1215
from locust_plugins.users.playwright import PlaywrightUser, pw, PageWithRetry, event
1316

@@ -23,8 +26,30 @@
2326
from opentelemetry.instrumentation.requests import RequestsInstrumentor
2427
from opentelemetry.instrumentation.system_metrics import SystemMetricsInstrumentor
2528
from opentelemetry.instrumentation.urllib3 import URLLib3Instrumentor
29+
from opentelemetry._logs import set_logger_provider
30+
from opentelemetry.exporter.otlp.proto.grpc._log_exporter import (
31+
OTLPLogExporter,
32+
)
33+
from opentelemetry.sdk._logs import LoggerProvider, LoggingHandler
34+
from opentelemetry.sdk._logs.export import BatchLogRecordProcessor
35+
from opentelemetry.sdk.resources import Resource
2636
from playwright.async_api import Route, Request
2737

38+
logger_provider = LoggerProvider(resource=Resource.create(
39+
{
40+
"service.name": "loadgenerator",
41+
}
42+
),)
43+
set_logger_provider(logger_provider)
44+
45+
exporter = OTLPLogExporter(insecure=True)
46+
logger_provider.add_log_record_processor(BatchLogRecordProcessor(exporter))
47+
handler = LoggingHandler(level=logging.INFO, logger_provider=logger_provider)
48+
49+
# Attach OTLP handler to locust logger
50+
logging.getLogger().addHandler(handler)
51+
logging.getLogger().setLevel(logging.INFO)
52+
2853
exporter = OTLPMetricExporter(insecure=True)
2954
set_meter_provider(MeterProvider([PeriodicExportingMetricReader(exporter)]))
3055

@@ -37,6 +62,7 @@
3762
RequestsInstrumentor().instrument()
3863
SystemMetricsInstrumentor().instrument()
3964
URLLib3Instrumentor().instrument()
65+
logging.info("Instrumentation complete")
4066

4167
categories = [
4268
"binoculars",
@@ -64,7 +90,6 @@
6490
people_file = open('people.json')
6591
people = json.load(people_file)
6692

67-
6893
class WebsiteUser(HttpUser):
6994
wait_time = between(1, 10)
7095

src/loadgenerator/requirements.txt

+12-11
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,17 @@ locust==2.18.2
1919
locust_plugins==3.4.0
2020
markupsafe==2.1.3
2121
msgpack==1.0.7
22-
opentelemetry-api==1.22.0
23-
opentelemetry-exporter-otlp-proto-grpc==1.22.0
24-
opentelemetry-instrumentation==0.43b0
25-
opentelemetry-instrumentation-jinja2==0.43b0
26-
opentelemetry-instrumentation-requests==0.43b0
27-
opentelemetry-instrumentation-system-metrics==0.43b0
28-
opentelemetry-instrumentation-urllib3==0.43b0
29-
opentelemetry-proto==1.22.0
30-
opentelemetry-sdk==1.22.0
31-
opentelemetry-semantic-conventions==0.43b0
32-
opentelemetry-util-http==0.43b0
22+
opentelemetry-api==1.23.0
23+
opentelemetry-exporter-otlp-proto-grpc==1.23.0
24+
opentelemetry-instrumentation==0.44b0
25+
opentelemetry-instrumentation-jinja2==0.44b0
26+
opentelemetry-instrumentation-requests==0.44b0
27+
opentelemetry-instrumentation-system-metrics==0.44b0
28+
opentelemetry-instrumentation-urllib3==0.44b0
29+
opentelemetry-proto==1.23.0
30+
opentelemetry-sdk==1.23.0
31+
opentelemetry-semantic-conventions==0.44b0
32+
opentelemetry-util-http==0.44b0
3333
protobuf==4.25.0
3434
psutil==5.9.6
3535
pyzmq==25.1.1
@@ -42,3 +42,4 @@ werkzeug==3.0.1
4242
wrapt==1.16.0
4343
zope-event==5.0
4444
zope-interface==6.1
45+
python-json-logger==2.0.7

0 commit comments

Comments
 (0)