From 61453d48e6ab4983b57d1e4eccae43aee2099f97 Mon Sep 17 00:00:00 2001 From: Wesley Aptekar-Cassels Date: Fri, 7 Apr 2023 01:58:49 -0400 Subject: [PATCH] Add automatic instrumentation to Postgres queries This enables automatic instrumentation of Postgres queries when OpenTelemetry instrumentation is enabled, which will help with debugging performance problems. --- bookwyrm/apps.py | 1 + bookwyrm/telemetry/open_telemetry.py | 6 ++++++ celerywyrm/apps.py | 1 + requirements.txt | 1 + 4 files changed, 9 insertions(+) diff --git a/bookwyrm/apps.py b/bookwyrm/apps.py index 7f684722d..b0c3e3fa4 100644 --- a/bookwyrm/apps.py +++ b/bookwyrm/apps.py @@ -40,6 +40,7 @@ class BookwyrmConfig(AppConfig): from bookwyrm.telemetry import open_telemetry open_telemetry.instrumentDjango() + open_telemetry.instrumentPostgres() if settings.ENABLE_PREVIEW_IMAGES and settings.FONTS: # Download any fonts that we don't have yet diff --git a/bookwyrm/telemetry/open_telemetry.py b/bookwyrm/telemetry/open_telemetry.py index 2798582d0..00b24d4b0 100644 --- a/bookwyrm/telemetry/open_telemetry.py +++ b/bookwyrm/telemetry/open_telemetry.py @@ -22,6 +22,12 @@ def instrumentDjango(): DjangoInstrumentor().instrument() +def instrumentPostgres(): + from opentelemetry.instrumentation.psycopg2 import Psycopg2Instrumentor + + Psycopg2Instrumentor().instrument() + + def instrumentCelery(): from opentelemetry.instrumentation.celery import CeleryInstrumentor from celery.signals import worker_process_init diff --git a/celerywyrm/apps.py b/celerywyrm/apps.py index bb2d27edd..bf443afdb 100644 --- a/celerywyrm/apps.py +++ b/celerywyrm/apps.py @@ -11,3 +11,4 @@ class CelerywyrmConfig(AppConfig): from bookwyrm.telemetry import open_telemetry open_telemetry.instrumentCelery() + open_telemetry.instrumentPostgres() diff --git a/requirements.txt b/requirements.txt index f8f1ab937..3da1d5082 100644 --- a/requirements.txt +++ b/requirements.txt @@ -29,6 +29,7 @@ opentelemetry-api==1.16.0 opentelemetry-exporter-otlp-proto-grpc==1.16.0 opentelemetry-instrumentation-celery==0.37b0 opentelemetry-instrumentation-django==0.37b0 +opentelemetry-instrumentation-psycopg2==0.37b0 opentelemetry-sdk==1.16.0 protobuf==3.20.* pyotp==2.8.0