The Datadog Python library provides tools for interacting with Datadog's monitoring platform through HTTP API client functionality, DogStatsD metrics client, and command-line tools.
—
Core initialization and configuration system for setting up API authentication, StatsD connection parameters, and global library behavior. Provides centralized configuration management for all Datadog Python library components.
Configure all Datadog library components with a single initialization call, setting up API credentials, connection parameters, and behavioral options.
def initialize(
api_key=None,
app_key=None,
host_name=None,
api_host=None,
statsd_host=None,
statsd_port=None,
statsd_disable_aggregation=True,
statsd_disable_buffering=True,
statsd_aggregation_flush_interval=0.3,
statsd_use_default_route=False,
statsd_socket_path=None,
statsd_namespace=None,
statsd_max_samples_per_context=0,
statsd_constant_tags=None,
return_raw_response=False,
hostname_from_config=True,
cardinality=None,
**kwargs
):
"""
Initialize and configure Datadog API and StatsD modules.
Parameters:
- api_key (str): Datadog API key for authentication
- app_key (str): Datadog application key for API access
- host_name (str): Override hostname for metrics and events
- api_host (str): Datadog API endpoint URL (default: https://api.datadoghq.com)
- statsd_host (str): DogStatsD server hostname (default: localhost)
- statsd_port (int): DogStatsD server port (default: 8125)
- statsd_disable_aggregation (bool): Disable client-side aggregation
- statsd_disable_buffering (bool): Disable metric buffering
- statsd_aggregation_flush_interval (float): Aggregation flush interval in seconds
- statsd_use_default_route (bool): Auto-detect StatsD host from default route
- statsd_socket_path (str): Unix Domain Socket path (overrides host/port)
- statsd_namespace (str): Prefix for all metric names
- statsd_max_samples_per_context (int): Max samples per metric context
- statsd_constant_tags (list): Tags applied to all metrics
- return_raw_response (bool): Return raw HTTP response objects
- hostname_from_config (bool): Get hostname from Datadog agent config
- cardinality (str): Global cardinality level ('none', 'low', 'orchestrator', 'high')
- **kwargs: Additional HTTP client configuration options
"""Automatic configuration from environment variables with precedence over explicit parameters.
# Environment variables (in order of precedence):
# API Authentication:
# DATADOG_API_KEY or DD_API_KEY
# DATADOG_APP_KEY or DD_APP_KEY
# API Host:
# DATADOG_HOST (default: https://api.datadoghq.com)
# Cardinality:
# DATADOG_CARDINALITY or DD_CARDINALITY
# StatsD Configuration:
# DD_STATSD_HOST
# DD_STATSD_PORT
# DD_STATSD_SOCKET_PATHAdvanced HTTP client settings for connection management, timeouts, retries, and proxy configuration.
# HTTP Configuration Options (passed via **kwargs to initialize()):
# Connection Settings:
# - proxies (dict): Proxy configuration {'http': 'http://proxy:8080', 'https': 'https://proxy:8080'}
# - timeout (int): Request timeout in seconds (default: 60)
# - max_timeouts (int): Maximum timeout retries (default: 3)
# - max_retries (int): Maximum request retries (default: 3)
# - backoff_period (int): Backoff period between retries in seconds (default: 300)
# SSL/TLS Settings:
# - cacert (str|bool): Path to CA certificate file, True for system certs, False to skip verification
# Response Handling:
# - mute (bool): Suppress API errors and client errors (default: True)
# - return_raw_response (bool): Include raw response object in API returnsDetailed configuration options for the DogStatsD client behavior, transport, and performance optimization.
# StatsD Configuration Parameters:
# Connection:
# - statsd_host (str): DogStatsD server hostname
# - statsd_port (int): DogStatsD server port
# - statsd_socket_path (str): Unix Domain Socket path (preferred over UDP)
# - statsd_use_default_route (bool): Dynamically resolve host from default route
# Performance:
# - statsd_disable_buffering (bool): Disable UDP packet buffering
# - statsd_disable_aggregation (bool): Disable client-side metric aggregation
# - statsd_aggregation_flush_interval (float): Aggregation flush interval
# - statsd_max_samples_per_context (int): Maximum samples per metric context
# Metadata:
# - statsd_namespace (str): Prefix added to all metric names
# - statsd_constant_tags (list): Tags applied to all metrics
# - cardinality (str): Cardinality level for all metricsAccess and modify global configuration state for runtime adjustments and debugging.
# Global configuration variables (datadog.api module):
# API Settings:
# api._api_key - Current API key
# api._application_key - Current application key
# api._api_host - Current API endpoint
# api._host_name - Current hostname
# api._api_version - API version (default: "v1")
# HTTP Settings:
# api._proxies - Proxy configuration
# api._timeout - Request timeout
# api._max_retries - Maximum retries
# api._mute - Error suppression setting
# api._return_raw_response - Raw response setting
# StatsD Global Instance:
# statsd - Global DogStatsd instance configured by initialize()from datadog import initialize
# Simple configuration with API keys
initialize(
api_key="your-datadog-api-key",
app_key="your-datadog-app-key"
)
# Configuration with custom API host (for EU instance)
initialize(
api_key="your-api-key",
app_key="your-app-key",
api_host="https://api.datadoghq.eu"
)import os
from datadog import initialize
# Set environment variables
os.environ['DATADOG_API_KEY'] = 'your-api-key'
os.environ['DATADOG_APP_KEY'] = 'your-app-key'
os.environ['DATADOG_HOST'] = 'https://api.datadoghq.eu'
# Initialize without parameters - uses environment variables
initialize()
# Override environment variables with explicit parameters
initialize(
api_key="different-api-key", # Overrides DATADOG_API_KEY
statsd_host="custom-statsd-host"
)from datadog import initialize
# Configure StatsD with custom settings
initialize(
api_key="your-api-key",
app_key="your-app-key",
statsd_host="statsd.internal.com",
statsd_port=8125,
statsd_namespace="myapp",
statsd_constant_tags=["env:production", "service:web"],
statsd_disable_aggregation=False, # Enable aggregation
statsd_aggregation_flush_interval=1.0, # Flush every second
statsd_max_samples_per_context=100
)from datadog import initialize
# Use Unix Domain Socket for better performance
initialize(
api_key="your-api-key",
app_key="your-app-key",
statsd_socket_path="/var/run/datadog/dsd.socket",
statsd_constant_tags=["transport:uds"]
)from datadog import initialize
# Configuration for containerized environments
initialize(
api_key="your-api-key",
app_key="your-app-key",
statsd_use_default_route=True, # Auto-detect StatsD host
statsd_constant_tags=[
"container_name:web-server",
"k8s_namespace:production",
"k8s_pod_name:web-server-abc123"
],
hostname_from_config=False, # Don't use agent config in containers
host_name="web-server-pod-1" # Explicit hostname
)from datadog import initialize
# Advanced HTTP client configuration
initialize(
api_key="your-api-key",
app_key="your-app-key",
# Proxy configuration
proxies={
'http': 'http://proxy.company.com:8080',
'https': 'https://proxy.company.com:8080'
},
# Timeout and retry settings
timeout=30,
max_retries=5,
max_timeouts=2,
backoff_period=60,
# SSL configuration
cacert="/path/to/ca-certificates.pem",
# Response handling
mute=False, # Don't suppress errors
return_raw_response=True # Include raw HTTP response
)from datadog import initialize
# Configure for high cardinality metrics
initialize(
api_key="your-api-key",
app_key="your-app-key",
cardinality="high", # Enable high cardinality
statsd_constant_tags=[
"service:microservice-a",
"version:1.2.3",
"datacenter:us-east-1"
]
)from datadog import initialize
import os
def configure_datadog():
"""Configure Datadog based on environment."""
environment = os.environ.get('ENVIRONMENT', 'development')
if environment == 'production':
# Production configuration
initialize(
api_key=os.environ['DATADOG_API_KEY'],
app_key=os.environ['DATADOG_APP_KEY'],
api_host="https://api.datadoghq.com",
statsd_host="datadog-agent.monitoring.svc.cluster.local",
statsd_constant_tags=["env:production"],
cardinality="orchestrator",
statsd_disable_aggregation=False,
mute=True # Suppress errors in production
)
else:
# Development configuration
initialize(
api_key=os.environ.get('DATADOG_API_KEY', 'dummy-key'),
app_key=os.environ.get('DATADOG_APP_KEY', 'dummy-key'),
statsd_host="localhost",
statsd_constant_tags=["env:development"],
mute=False, # Show errors in development
return_raw_response=True # Debug HTTP responses
)
configure_datadog()from datadog import initialize, api, statsd
# Initial configuration
initialize(api_key="initial-key", app_key="initial-app-key")
# Update API configuration at runtime
api._api_key = "new-api-key"
api._application_key = "new-app-key"
api._timeout = 30
# Update StatsD configuration at runtime
statsd.host = "new-statsd-host"
statsd.port = 8126
statsd.namespace = "updated_namespace"
statsd.constant_tags = ["updated:true"]
# Close and reconnect with new settings
statsd.close_socket()from datadog import initialize, api
import sys
def validate_configuration():
"""Validate Datadog configuration before use."""
if not api._api_key:
print("ERROR: Datadog API key not configured")
sys.exit(1)
if not api._application_key:
print("ERROR: Datadog application key not configured")
sys.exit(1)
print(f"Datadog configured:")
print(f" API Host: {api._api_host}")
print(f" Hostname: {api._host_name}")
print(f" StatsD: {statsd.host}:{statsd.port}")
print(f" Namespace: {statsd.namespace}")
print(f" Constant Tags: {statsd.constant_tags}")
# Configure and validate
initialize(
api_key="your-api-key",
app_key="your-app-key",
statsd_namespace="myapp",
statsd_constant_tags=["service:web"]
)
validate_configuration()from datadog import initialize
import os
from typing import Optional, List, Dict
class DatadogConfig:
"""Centralized Datadog configuration management."""
def __init__(
self,
environment: str,
api_key: Optional[str] = None,
app_key: Optional[str] = None,
service_name: str = "unknown-service",
version: str = "1.0.0"
):
self.environment = environment
self.api_key = api_key or os.environ.get('DATADOG_API_KEY')
self.app_key = app_key or os.environ.get('DATADOG_APP_KEY')
self.service_name = service_name
self.version = version
def get_statsd_config(self) -> Dict:
"""Get StatsD configuration for environment."""
base_tags = [
f"env:{self.environment}",
f"service:{self.service_name}",
f"version:{self.version}"
]
if self.environment == 'production':
return {
'statsd_host': 'datadog-agent.monitoring',
'statsd_port': 8125,
'statsd_constant_tags': base_tags + ['tier:production'],
'statsd_disable_aggregation': False,
'cardinality': 'orchestrator'
}
elif self.environment == 'staging':
return {
'statsd_host': 'datadog-agent.staging',
'statsd_port': 8125,
'statsd_constant_tags': base_tags + ['tier:staging'],
'cardinality': 'low'
}
else: # development/local
return {
'statsd_host': 'localhost',
'statsd_port': 8125,
'statsd_constant_tags': base_tags + ['tier:development'],
'cardinality': 'none'
}
def initialize_datadog(self):
"""Initialize Datadog with environment-specific configuration."""
statsd_config = self.get_statsd_config()
initialize(
api_key=self.api_key,
app_key=self.app_key,
**statsd_config
)
# Usage
config = DatadogConfig(
environment=os.environ.get('ENVIRONMENT', 'development'),
service_name='user-service',
version='2.1.0'
)
config.initialize_datadog()# Good: Use environment variables for sensitive data
import os
from datadog import initialize
initialize(
api_key=os.environ['DATADOG_API_KEY'],
app_key=os.environ['DATADOG_APP_KEY']
)
# Avoid: Hardcoding credentials in source code
initialize(
api_key="abc123...", # Don't do this
app_key="def456..." # Don't do this
)# For high-throughput applications
initialize(
api_key=os.environ['DATADOG_API_KEY'],
app_key=os.environ['DATADOG_APP_KEY'],
# Enable aggregation to reduce network traffic
statsd_disable_aggregation=False,
statsd_aggregation_flush_interval=1.0,
# Use Unix Domain Socket for better performance
statsd_socket_path="/var/run/datadog/dsd.socket",
# Batch metrics for efficiency
statsd_max_samples_per_context=1000
)# Establish consistent tagging across all metrics
initialize(
api_key=os.environ['DATADOG_API_KEY'],
app_key=os.environ['DATADOG_APP_KEY'],
statsd_constant_tags=[
f"env:{os.environ.get('ENVIRONMENT', 'development')}",
f"service:{os.environ.get('SERVICE_NAME', 'unknown')}",
f"version:{os.environ.get('SERVICE_VERSION', '1.0.0')}",
f"region:{os.environ.get('AWS_REGION', 'us-east-1')}",
f"instance_type:{os.environ.get('INSTANCE_TYPE', 'unknown')}"
]
)Install with Tessl CLI
npx tessl i tessl/pypi-datadog