index e38932e28..37e6c674f 100644
--- a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/utils.py
+++ b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/utils.py
@@ -20,7 +20,11 @@ from importlib import import_module
 from re import escape, sub
 from typing import Any, Dict, Generator, Sequence
 
-from wrapt import ObjectProxy
+try:
+    # wrapt 2.0.0+
+    from wrapt import BaseObjectProxy  # pylint: disable=no-name-in-module
+except ImportError:
+    from wrapt import ObjectProxy as BaseObjectProxy
 
 from opentelemetry import context, trace
 
@@ -108,7 +112,11 @@ def unwrap(obj: object, attr: str):
             ) from exc
 
     func = getattr(obj, attr, None)
-    if func and isinstance(func, ObjectProxy) and hasattr(func, "__wrapped__"):
+    if (
+        func
+        and isinstance(func, BaseObjectProxy)
+        and hasattr(func, "__wrapped__")
+    ):
         setattr(obj, attr, func.__wrapped__)
 
 
diff --git a/opentelemetry-instrumentation/tests/test_utils.py b/opentelemetry-instrumentation/tests/test_utils.py
index 5ddd45d69..11a3598bd 100644
--- a/opentelemetry-instrumentation/tests/test_utils.py
+++ b/opentelemetry-instrumentation/tests/test_utils.py
@@ -15,7 +15,13 @@
 import unittest
 from http import HTTPStatus
 
-from wrapt import ObjectProxy, wrap_function_wrapper
+from wrapt import wrap_function_wrapper
+
+try:
+    # wrapt 2.0.0+
+    from wrapt import BaseObjectProxy  # pylint: disable=no-name-in-module
+except ImportError:
+    from wrapt import ObjectProxy as BaseObjectProxy
 
 from opentelemetry.context import (
     _SUPPRESS_HTTP_INSTRUMENTATION_KEY,
@@ -263,23 +269,23 @@ class UnwrapTestCase(unittest.TestCase):
     def test_can_unwrap_object_attribute(self):
         self._wrap_method()
         instance = WrappedClass()
-        self.assertTrue(isinstance(instance.method, ObjectProxy))
+        self.assertTrue(isinstance(instance.method, BaseObjectProxy))
 
         unwrap(WrappedClass, "method")
-        self.assertFalse(isinstance(instance.method, ObjectProxy))
+        self.assertFalse(isinstance(instance.method, BaseObjectProxy))
 
     def test_can_unwrap_object_attribute_as_string(self):
         self._wrap_method()
         instance = WrappedClass()
-        self.assertTrue(isinstance(instance.method, ObjectProxy))
+        self.assertTrue(isinstance(instance.method, BaseObjectProxy))
 
         unwrap("tests.test_utils.WrappedClass", "method")
-        self.assertFalse(isinstance(instance.method, ObjectProxy))
+        self.assertFalse(isinstance(instance.method, BaseObjectProxy))
 
     def test_raises_import_error_if_path_not_well_formed(self):
         self._wrap_method()
         instance = WrappedClass()
-        self.assertTrue(isinstance(instance.method, ObjectProxy))
+        self.assertTrue(isinstance(instance.method, BaseObjectProxy))
 
         with self.assertRaisesRegex(
             ImportError, "Cannot parse '' as dotted import path"
@@ -287,23 +293,23 @@ class UnwrapTestCase(unittest.TestCase):
             unwrap("", "method")
 
         unwrap(WrappedClass, "method")
-        self.assertFalse(isinstance(instance.method, ObjectProxy))
+        self.assertFalse(isinstance(instance.method, BaseObjectProxy))
 
     def test_raises_import_error_if_cannot_find_module(self):
         self._wrap_method()
         instance = WrappedClass()
-        self.assertTrue(isinstance(instance.method, ObjectProxy))
+        self.assertTrue(isinstance(instance.method, BaseObjectProxy))
 
         with self.assertRaisesRegex(ImportError, "No module named 'does'"):
             unwrap("does.not.exist.WrappedClass", "method")
 
         unwrap(WrappedClass, "method")
-        self.assertFalse(isinstance(instance.method, ObjectProxy))
+        self.assertFalse(isinstance(instance.method, BaseObjectProxy))
 
     def test_raises_import_error_if_cannot_find_object(self):
         self._wrap_method()
         instance = WrappedClass()
-        self.assertTrue(isinstance(instance.method, ObjectProxy))
+        self.assertTrue(isinstance(instance.method, BaseObjectProxy))
 
         with self.assertRaisesRegex(
             ImportError, "Cannot import 'NotWrappedClass' from"
@@ -311,7 +317,7 @@ class UnwrapTestCase(unittest.TestCase):
             unwrap("tests.test_utils.NotWrappedClass", "method")
 
         unwrap(WrappedClass, "method")
-        self.assertFalse(isinstance(instance.method, ObjectProxy))
+        self.assertFalse(isinstance(instance.method, BaseObjectProxy))
 
     # pylint: disable=no-self-use
     def test_does_nothing_if_cannot_find_attribute(self):
@@ -320,6 +326,6 @@ class UnwrapTestCase(unittest.TestCase):
 
     def test_does_nothing_if_attribute_is_not_from_wrapt(self):
         instance = WrappedClass()
-        self.assertFalse(isinstance(instance.method, ObjectProxy))
+        self.assertFalse(isinstance(instance.method, BaseObjectProxy))
         unwrap(WrappedClass, "method")
-        self.assertFalse(isinstance(instance.method, ObjectProxy))
+        self.assertFalse(isinstance(instance.method, BaseObjectProxy))
