{"record":{"id":"10fba62a9bd0dc2a","repo":"BerriAI/litellm","slug":"dd-site-is-not-set-set-dd-site-example-sit","errorCode":null,"errorMessage":"DD_SITE is not set, set 'DD_SITE=<>', example sit = `us5.datadoghq.com`","messagePattern":"DD_SITE is not set, set 'DD_SITE=<>', example sit = `us5\\.datadoghq\\.com`","errorType":"exception","errorClass":"Exception","httpStatus":null,"severity":"error","filePath":"litellm/integrations/datadog/datadog_llm_obs.py","lineNumber":73,"sourceCode":"                create_mock_datadog_client()\n                verbose_logger.debug(\"[DATADOG MOCK] DataDogLLMObs logger initialized in mock mode\")\n\n            # Configure DataDog endpoint (Agent or Direct API)\n            # Use LITELLM_DD_AGENT_HOST to avoid conflicts with ddtrace's DD_AGENT_HOST\n            # Check for agent mode FIRST - agent mode doesn't require DD_API_KEY or DD_SITE\n            dd_agent_host: Final = os.getenv(\"LITELLM_DD_AGENT_HOST\")\n\n            self.async_client = get_async_httpx_client(llm_provider=httpxSpecialProvider.LoggingCallback)\n            self.DD_API_KEY = os.getenv(\"DD_API_KEY\")\n\n            if dd_agent_host:\n                self._configure_dd_agent(dd_agent_host=dd_agent_host)\n            else:\n                # Only require DD_API_KEY and DD_SITE for direct API mode\n                if os.getenv(\"DD_API_KEY\", None) is None:\n                    raise Exception(\"DD_API_KEY is not set, set 'DD_API_KEY=<>'\")\n                if os.getenv(\"DD_SITE\", None) is None:\n                    raise Exception(\"DD_SITE is not set, set 'DD_SITE=<>', example sit = `us5.datadoghq.com`\")\n                self._configure_dd_direct_api()\n\n            # Optional override for testing\n            dd_base_url: Final = get_datadog_base_url_from_env()\n            if dd_base_url:\n                self.intake_url = f\"{dd_base_url}/api/intake/llm-obs/v1/trace/spans\"\n\n            asyncio.create_task(self.periodic_flush())\n            self.flush_lock = asyncio.Lock()\n            self.log_queue: list[LLMObsPayload] = []\n\n            #########################################################\n            # Handle datadog_llm_observability_params set as litellm.datadog_llm_observability_params\n            #########################################################\n            dict_datadog_llm_obs_params: Final = self._get_datadog_llm_obs_params()\n            kwargs.update(dict_datadog_llm_obs_params)\n            CustomBatchLogger.__init__(self, **kwargs, flush_lock=self.flush_lock)\n        except Exception as e:","sourceCodeStart":55,"sourceCodeEnd":91,"githubUrl":"https://github.com/BerriAI/litellm/blob/6c2dcb801bf2b75c18f1bb24140e7cf57465cc4d/litellm/integrations/datadog/datadog_llm_obs.py#L55-L91","documentation":"Companion check to 371: in direct-API mode (no LITELLM_DD_AGENT_HOST), DataDogLLMObsLogger also requires DD_SITE because it builds https://api.<site>/api/intake/llm-obs/v1/trace/spans. If DD_SITE is unset the constructor raises immediately with an example site in the message.","triggerScenarios":"DataDogLLMObsLogger init with LITELLM_DD_AGENT_HOST unset, DD_API_KEY present, but DD_SITE absent from the environment.","commonSituations":"Teams that already export DD_API_KEY for logs but never needed DD_SITE before (other integrations defaulted it); new LLM-Obs enablement on existing Datadog setups.","solutions":["Export DD_SITE matching your org's site, e.g. us5.datadoghq.com or datadoghq.eu","Or switch to agent mode with LITELLM_DD_AGENT_HOST to avoid direct-API credentials entirely","Keep DD_API_KEY and DD_SITE in the same env/secret bundle so one is never set without the other"],"exampleFix":"# before\nexport DD_API_KEY=xxx\n# DD_SITE unset -> raises\n\n# after\nexport DD_API_KEY=xxx\nexport DD_SITE=us5.datadoghq.com","handlingStrategy":"validation","validationCode":"import os\n\nagent_mode = bool(os.getenv(\"LITELLM_DD_AGENT_HOST\"))\nif not agent_mode:\n    assert os.getenv(\"DD_API_KEY\"), \"DD_API_KEY required for direct mode\"\n    assert os.getenv(\"DD_SITE\"), \"DD_SITE required for direct mode\"","typeGuard":null,"tryCatchPattern":"try:\n    DataDogLLMObsLogger()\nexcept Exception as e:\n    if \"DD_SITE\" in str(e):\n        export_and_restart(\"DD_SITE=us5.datadoghq.com\")\n    raise","preventionTips":["Treat DD_API_KEY + DD_SITE as one secret bundle for LLM-Obs direct mode","Add env-var assertions to the container entrypoint so misconfig fails at boot"],"tags":["datadog","llm-observability","env-vars","config"],"backgroundTag":null,"analyzedSha":"6c2dcb801bf2b75c18f1bb24140e7cf57465cc4d","analyzedAt":"2026-08-15T07:12:03.035Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}