Skip to content

Commit

Permalink
Add observability via OpenTelemetry
Browse files Browse the repository at this point in the history
  • Loading branch information
proffalken committed Apr 26, 2024
1 parent 49befa2 commit 9b40a0b
Show file tree
Hide file tree
Showing 2 changed files with 154 additions and 28 deletions.
42 changes: 42 additions & 0 deletions memberportal/membermatters/asgi.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,20 @@
import os

## Tracing
from opentelemetry import trace, context, propagate
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk.resources import Resource
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.instrumentation.asgi import OpenTelemetryMiddleware

## Logging
from opentelemetry._logs import set_logger_provider
from opentelemetry.exporter.otlp.proto.http._log_exporter import OTLPLogExporter
from opentelemetry.sdk._logs import LoggerProvider, LoggingHandler
from opentelemetry.sdk._logs.export import BatchLogRecordProcessor


from django.conf.urls import url
from django.core.asgi import get_asgi_application

Expand All @@ -9,9 +25,35 @@
from channels.routing import ProtocolTypeRouter, URLRouter
from membermatters.websocket_urls import urlpatterns

### OTEL EXPORTER SETUP ###

resource = Resource(
attributes={
"service.name": "member_portal_backend",
"deployment.environment": "production",
"service.namespace": "membermatters",
}
)

#### TRACES
trace.set_tracer_provider(TracerProvider(resource=resource))
tracer = trace.get_tracer(__name__)

otlp_trace_exporter = OTLPSpanExporter(endpoint="http://localhost:4318/v1/traces")

span_processor = BatchSpanProcessor(otlp_trace_exporter)

trace.get_tracer_provider().add_span_processor(span_processor)

#### LOGS
logger_provider = LoggerProvider(resource=resource)
otlp_logs_exporter = OTLPLogExporter(endpoint="http://localhost:4318/v1/logs")
logger_provider.add_log_record_processor(BatchLogRecordProcessor(otlp_logs_exporter))

application = ProtocolTypeRouter(
{
"http": django_asgi_app,
"websocket": AuthMiddlewareStack(URLRouter(urlpatterns)),
}
)
application = OpenTelemetryMiddleware(application)
140 changes: 112 additions & 28 deletions memberportal/requirements.txt
Original file line number Diff line number Diff line change
@@ -1,31 +1,115 @@
django~=3.2.13
requests~=2.27.1
stripe==2.74.0
humanize~=4.1.0
django-constance~=2.9.0
django-picklefield~=3.0.1
django-cors-headers~=3.12.0
aioredis==1.3.1
amqp==5.2.0
arrow==1.3.0
asgiref==3.8.1
async-timeout==4.0.3
attrs==23.2.0
autobahn==23.6.2
Automat==22.10.0
billiard==3.6.4.0
black==24.1.0
celery==5.2.7
certifi==2024.2.2
cffi==1.16.0
cfgv==3.4.0
channels==3.0.5
channels-redis==3.4.1
charset-normalizer==2.0.12
click==8.1.7
click-didyoumean==0.3.1
click-plugins==1.1.1
click-repl==0.3.0
constantly==23.10.4
cryptography==42.0.5
daphne==3.0.2
Deprecated==1.2.14
distlib==0.3.8
Django==3.2.25
django-celery-beat==2.2.1
django-celery-results==2.3.1
django-constance==2.9.1
django-cors-headers==3.12.0
django-oidc-provider==0.8.2
django-picklefield==3.0.1
django-prometheus==2.3.1
django-timezone-field==4.2.3
django_csp==3.8
djangorestframework==3.13.1
djangorestframework-api-key==2.3.0
djangorestframework-simplejwt==5.3.1
filelock==3.13.4
future==1.0.0
googleapis-common-protos==1.63.0
grpcio==1.62.2
hiredis==2.3.2
humanize==4.1.0
hyperlink==21.0.0
ics==0.7.2
identify==2.5.36
idna==3.7
ifaddr==0.2.0
importlib-metadata==7.0.0
incremental==22.10.0
kombu==5.3.7
mailchimp-marketing @ git+https://github.com/mailchimp/mailchimp-marketing-python.git@3305fa45b3f436767a539c5fba9cb2b0a083d761
msgpack==1.0.8
mypy-extensions==1.0.0
mysqlclient==2.2.4
nodeenv==1.8.0
opentelemetry-api==1.24.0
opentelemetry-exporter-otlp==1.24.0
opentelemetry-exporter-otlp-proto-common==1.24.0
opentelemetry-exporter-otlp-proto-grpc==1.24.0
opentelemetry-exporter-otlp-proto-http==1.24.0
opentelemetry-instrumentation==0.45b0
opentelemetry-instrumentation-asgi==0.45b0
opentelemetry-instrumentation-django==0.45b0
opentelemetry-instrumentation-wsgi==0.45b0
opentelemetry-proto==1.24.0
opentelemetry-sdk==1.24.0
opentelemetry-semantic-conventions==0.45b0
opentelemetry-util-http==0.45b0
packaging==24.0
pathspec==0.12.1
platformdirs==4.2.1
postmarker==1.0
pre-commit==2.19.0
djangorestframework~=3.13.1
djangorestframework-simplejwt>=4.7.2
django-csp~=3.7
prometheus_client==0.20.0
prompt-toolkit==3.0.43
protobuf==4.25.3
psycopg2-binary==2.9.9
pwned-passwords-django==1.6.1
pyasn1==0.6.0
pyasn1_modules==0.4.0
pycparser==2.22
pycryptodomex==3.20.0
pyjwkest==1.4.2
PyJWT==2.8.0
pyOpenSSL==24.1.0
python-crontab==3.0.0
python-dateutil==2.9.0.post0
python-http-client==3.3.7
pytz==2024.1
PyYAML==6.0.1
redis==4.3.6
requests==2.27.1
sentry-sdk==1.14.0
mysqlclient
git+https://github.com/mailchimp/mailchimp-marketing-python.git
channels~=3.0.4
zeroconf~=0.38.6
postmarker~=1.0
channels_redis~=3.4.0
ics~=0.7
python_http_client~=3.3.7
pwned-passwords-django~=1.6.0
celery~=5.2.7
django-celery-results~=2.3.1
django-celery-beat~=2.2.1
redis~=4.3.1
twilio~=7.9.2
django-prometheus==2.3.1
psycopg2-binary~=2.9.6
django-oidc-provider~=0.8.0
djangorestframework-api-key==2.*
service-identity==24.1.0
six==1.16.0
sqlparse==0.5.0
stripe==2.74.0
TatSu==5.12.0
toml==0.10.2
twilio==7.9.3
Twisted==24.3.0
txaio==23.1.1
types-python-dateutil==2.9.0.20240316
typing_extensions==4.11.0
urllib3==1.26.18
vine==5.1.0
virtualenv==20.26.0
wcwidth==0.2.13
wrapt==1.16.0
zeroconf==0.38.7
zipp==3.18.1
zope.interface==6.3

0 comments on commit 9b40a0b

Please sign in to comment.