forked from phoenix/litellm-mirror
(feat) dd logger - set tags according to the values set by those env vars (#6933)
* dd logger, inherit from .envs * test_datadog_payload_environment_variables * fix _get_datadog_service
This commit is contained in:
parent
fe151db27c
commit
a6da3dea03
3 changed files with 77 additions and 13 deletions
|
@ -279,11 +279,11 @@ class DataDogLogger(CustomBatchLogger):
|
||||||
verbose_logger.debug("Datadog: Logger - Logging payload = %s", json_payload)
|
verbose_logger.debug("Datadog: Logger - Logging payload = %s", json_payload)
|
||||||
|
|
||||||
dd_payload = DatadogPayload(
|
dd_payload = DatadogPayload(
|
||||||
ddsource=os.getenv("DD_SOURCE", "litellm"),
|
ddsource=self._get_datadog_source(),
|
||||||
ddtags="",
|
ddtags=self._get_datadog_tags(),
|
||||||
hostname="",
|
hostname=self._get_datadog_hostname(),
|
||||||
message=json_payload,
|
message=json_payload,
|
||||||
service="litellm-server",
|
service=self._get_datadog_service(),
|
||||||
status=status,
|
status=status,
|
||||||
)
|
)
|
||||||
return dd_payload
|
return dd_payload
|
||||||
|
@ -387,11 +387,11 @@ class DataDogLogger(CustomBatchLogger):
|
||||||
json_payload = json.dumps(_exception_payload)
|
json_payload = json.dumps(_exception_payload)
|
||||||
verbose_logger.debug("Datadog: Logger - Logging payload = %s", json_payload)
|
verbose_logger.debug("Datadog: Logger - Logging payload = %s", json_payload)
|
||||||
dd_payload = DatadogPayload(
|
dd_payload = DatadogPayload(
|
||||||
ddsource=os.getenv("DD_SOURCE", "litellm"),
|
ddsource=self._get_datadog_source(),
|
||||||
ddtags="",
|
ddtags=self._get_datadog_tags(),
|
||||||
hostname="",
|
hostname=self._get_datadog_hostname(),
|
||||||
message=json_payload,
|
message=json_payload,
|
||||||
service="litellm-server",
|
service=self._get_datadog_service(),
|
||||||
status=DataDogStatus.ERROR,
|
status=DataDogStatus.ERROR,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -473,11 +473,31 @@ class DataDogLogger(CustomBatchLogger):
|
||||||
verbose_logger.debug("Datadog: Logger - Logging payload = %s", json_payload)
|
verbose_logger.debug("Datadog: Logger - Logging payload = %s", json_payload)
|
||||||
|
|
||||||
dd_payload = DatadogPayload(
|
dd_payload = DatadogPayload(
|
||||||
ddsource=os.getenv("DD_SOURCE", "litellm"),
|
ddsource=self._get_datadog_source(),
|
||||||
ddtags="",
|
ddtags=self._get_datadog_tags(),
|
||||||
hostname="",
|
hostname=self._get_datadog_hostname(),
|
||||||
message=json_payload,
|
message=json_payload,
|
||||||
service="litellm-server",
|
service=self._get_datadog_service(),
|
||||||
status=DataDogStatus.INFO,
|
status=DataDogStatus.INFO,
|
||||||
)
|
)
|
||||||
return dd_payload
|
return dd_payload
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _get_datadog_tags():
|
||||||
|
return f"env:{os.getenv('DD_ENV', 'unknown')},service:{os.getenv('DD_SERVICE', 'litellm')},version:{os.getenv('DD_VERSION', 'unknown')}"
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _get_datadog_source():
|
||||||
|
return os.getenv("DD_SOURCE", "litellm")
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _get_datadog_service():
|
||||||
|
return os.getenv("DD_SERVICE", "litellm-server")
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _get_datadog_hostname():
|
||||||
|
return ""
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _get_datadog_env():
|
||||||
|
return os.getenv("DD_ENV", "unknown")
|
||||||
|
|
|
@ -2,4 +2,4 @@ include:
|
||||||
- model_config.yaml
|
- model_config.yaml
|
||||||
|
|
||||||
litellm_settings:
|
litellm_settings:
|
||||||
callbacks: ["prometheus"]
|
callbacks: ["datadog"]
|
||||||
|
|
|
@ -422,3 +422,47 @@ async def test_datadog_post_call_failure_hook():
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
pytest.fail(f"Test failed with exception: {str(e)}")
|
pytest.fail(f"Test failed with exception: {str(e)}")
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_datadog_payload_environment_variables():
|
||||||
|
"""Test that DataDog payload correctly includes environment variables in the payload structure"""
|
||||||
|
try:
|
||||||
|
# Set test environment variables
|
||||||
|
test_env = {
|
||||||
|
"DD_ENV": "test-env",
|
||||||
|
"DD_SERVICE": "test-service",
|
||||||
|
"DD_VERSION": "1.0.0",
|
||||||
|
"DD_SOURCE": "test-source",
|
||||||
|
"DD_API_KEY": "fake-key",
|
||||||
|
"DD_SITE": "datadoghq.com",
|
||||||
|
}
|
||||||
|
|
||||||
|
with patch.dict(os.environ, test_env):
|
||||||
|
dd_logger = DataDogLogger()
|
||||||
|
standard_payload = create_standard_logging_payload()
|
||||||
|
|
||||||
|
# Create the payload
|
||||||
|
dd_payload = dd_logger.create_datadog_logging_payload(
|
||||||
|
kwargs={"standard_logging_object": standard_payload},
|
||||||
|
response_obj=None,
|
||||||
|
start_time=datetime.now(),
|
||||||
|
end_time=datetime.now(),
|
||||||
|
)
|
||||||
|
|
||||||
|
print("dd payload=", json.dumps(dd_payload, indent=2))
|
||||||
|
|
||||||
|
# Verify payload structure and environment variables
|
||||||
|
assert (
|
||||||
|
dd_payload["ddsource"] == "test-source"
|
||||||
|
), "Incorrect source in payload"
|
||||||
|
assert (
|
||||||
|
dd_payload["service"] == "test-service"
|
||||||
|
), "Incorrect service in payload"
|
||||||
|
assert (
|
||||||
|
dd_payload["ddtags"]
|
||||||
|
== "env:test-env,service:test-service,version:1.0.0"
|
||||||
|
), "Incorrect tags in payload"
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
pytest.fail(f"Test failed with exception: {str(e)}")
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue