{"id":"ee48e929e3000f74","repo":"redis/redis-py","slug":"metrics-are-enabled-but-no-global-meterprovider-is","errorCode":null,"errorMessage":"Metrics are enabled but no global MeterProvider is configured.\n\nSet up OpenTelemetry before initializing redis-py observability:\n\n  from opentelemetry import metrics\n  from opentelemetry.sdk.metrics import MeterProvider\n  from opentelemetry.sdk.metrics.export import PeriodicExportingMetricReader\n  from opentelemetry.exporter.otlp.proto.http.metric_exporter import OTLPMetricExporter\n\n  # Create exporter\n  exporter = OTLPMetricExporter(\n      endpoint='http://localhost:4318/v1/metrics'\n  )\n\n  # Create reader\n  reader = PeriodicExportingMetricReader(\n      exporter=exporter,\n      export_interval_millis=10000\n  )\n\n  # Create and set global provider\n  provider = MeterProvider(metric_readers=[reader])\n  metrics.set_meter_provider(provider)\n\n  # Now initialize redis-py observability\n  from redis.observability import get_observability_instance, OTelConfig\n  otel = get_observability_instance()\n  otel.init(OTelConfig(enable_metrics=True))\n","messagePattern":"Metrics are enabled but no global MeterProvider is configured\\.\n\nSet up OpenTelemetry before initializing redis-py observability:\n\n  from opentelemetry import metrics\n  from opentelemetry\\.sdk\\.metrics import MeterProvider\n  from opentelemetry\\.sdk\\.metrics\\.export import PeriodicExportingMetricReader\n  from opentelemetry\\.exporter\\.otlp\\.proto\\.http\\.metric_exporter import OTLPMetricExporter\n\n  # Create exporter\n  exporter = OTLPMetricExporter\\(\n      endpoint='http://localhost:4318/v1/metrics'\n  \\)\n\n  # Create reader\n  reader = PeriodicExportingMetricReader\\(\n      exporter=exporter,\n      export_interval_millis=10000\n  \\)\n\n  # Create and set global provider\n  provider = MeterProvider\\(metric_readers=\\[reader\\]\\)\n  metrics\\.set_meter_provider\\(provider\\)\n\n  # Now initialize redis-py observability\n  from redis\\.observability import get_observability_instance, OTelConfig\n  otel = get_observability_instance\\(\\)\n  otel\\.init\\(OTelConfig\\(enable_metrics=True\\)\\)\n","errorType":"exception","errorClass":"RuntimeError","httpStatus":null,"severity":"error","filePath":"redis/observability/providers.py","lineNumber":90,"sourceCode":"            return None\n\n        # Lazy import - only import OTel when metrics are enabled\n        try:\n            from opentelemetry import metrics\n            from opentelemetry.metrics import NoOpMeterProvider\n        except ImportError:\n            raise ImportError(\n                \"OpenTelemetry is not installed. Install it with:\\n\"\n                \"  pip install opentelemetry-api opentelemetry-sdk opentelemetry-exporter-otlp-proto-http\"\n            )\n\n        # Get the global MeterProvider\n        if self._meter_provider is None:\n            self._meter_provider = metrics.get_meter_provider()\n\n            # Check if it's a real provider (not NoOp)\n            if isinstance(self._meter_provider, NoOpMeterProvider):\n                raise RuntimeError(\n                    \"Metrics are enabled but no global MeterProvider is configured.\\n\"\n                    \"\\n\"\n                    \"Set up OpenTelemetry before initializing redis-py observability:\\n\"\n                    \"\\n\"\n                    \"  from opentelemetry import metrics\\n\"\n                    \"  from opentelemetry.sdk.metrics import MeterProvider\\n\"\n                    \"  from opentelemetry.sdk.metrics.export import PeriodicExportingMetricReader\\n\"\n                    \"  from opentelemetry.exporter.otlp.proto.http.metric_exporter import OTLPMetricExporter\\n\"\n                    \"\\n\"\n                    \"  # Create exporter\\n\"\n                    \"  exporter = OTLPMetricExporter(\\n\"\n                    \"      endpoint='http://localhost:4318/v1/metrics'\\n\"\n                    \"  )\\n\"\n                    \"\\n\"\n                    \"  # Create reader\\n\"\n                    \"  reader = PeriodicExportingMetricReader(\\n\"\n                    \"      exporter=exporter,\\n\"\n                    \"      export_interval_millis=10000\\n\"","sourceCodeStart":72,"sourceCodeEnd":108,"githubUrl":"https://github.com/redis/redis-py/blob/da03cdc7e8731092b13e395605c3c1fb2de25de1/redis/observability/providers.py#L72-L108","documentation":"Error \"Metrics are enabled but no global MeterProvider is configured.\n\nSet up OpenTelemetry before initializing redis-py observability:\n\n  from opentelemetry import metrics\n  from opentelemetry.sdk.metrics import MeterProvider\n  from opentelemetry.sdk.metrics.export import PeriodicExportingMetricReader\n  from opentelemetry.exporter.otlp.proto.http.metric_exporter import OTLPMetricExporter\n\n  # Create exporter\n  exporter = OTLPMetricExporter(\n      endpoint='http://localhost:4318/v1/metrics'\n  )\n\n  # Create reader\n  reader = PeriodicExportingMetricReader(\n      exporter=exporter,\n      export_interval_millis=10000\n  )\n\n  # Create and set global provider\n  provider = MeterProvider(metric_readers=[reader])\n  metrics.set_meter_provider(provider)\n\n  # Now initialize redis-py observability\n  from redis.observability import get_observability_instance, OTelConfig\n  otel = get_observability_instance()\n  otel.init(OTelConfig(enable_metrics=True))\n\" thrown in redis/redis-py.","triggerScenarios":"Thrown at redis/observability/providers.py:90 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"analyzedSha":"da03cdc7e8731092b13e395605c3c1fb2de25de1","analyzedAt":"2026-08-04T20:26:47.563Z","schemaVersion":2}