Skip to main content

Datadog Windows Setup

Complete guide to installing, configuring, and managing Datadog Agent on Windows Server systems using PowerShell.

Installation​

1. Install Datadog Agent on Windows​

Download and install the latest Datadog Agent:

# Set your API key
$env:DD_API_KEY = "your_api_key_here"
$env:DD_SITE = "datadoghq.com"

# Download installer
Invoke-WebRequest -Uri "https://s3.amazonaws.com/ddagent-windows-stable/datadog-agent-7-latest.amd64.msi" -OutFile "$env:TEMP\datadog-agent.msi"

# Install silently
Start-Process msiexec.exe -ArgumentList "/qn /i $env:TEMP\datadog-agent.msi APIKEY=$env:DD_API_KEY SITE=$env:DD_SITE" -Wait -NoNewWindow

Method 2: Using Chocolatey​

Install via Chocolatey package manager:

# Install Chocolatey if not already installed
Set-ExecutionPolicy Bypass -Scope Process -Force
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072
iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))

# Install Datadog Agent
choco install datadog-agent -y --params="'/APIKEY:your_api_key_here /SITE:datadoghq.com'"

Method 3: Manual GUI Installation​

  1. Download the MSI installer from Datadog Downloads
  2. Double-click the MSI file
  3. Enter your API key during installation
  4. Follow the installation wizard

2. Verify Installation​

Check if the agent is installed:

Get-Service -Name "ddagent"

Check installation directory:

Test-Path "C:\Program Files\Datadog\Datadog Agent\"

View agent version:

& "C:\Program Files\Datadog\Datadog Agent\bin\agent.exe" version

Service Management​

Start Datadog Agent Service​

Start-Service -Name "ddagent"

Stop Datadog Agent Service​

Stop-Service -Name "ddagent"

Restart Datadog Agent Service​

Restart-Service -Name "ddagent"

Check Agent Status​

Get-Service -Name "ddagent"

Detailed status with agent command:

& "C:\Program Files\Datadog\Datadog Agent\bin\agent.exe" status

Enable Auto-start on Boot​

Set-Service -Name "ddagent" -StartupType Automatic

Disable Auto-start​

Set-Service -Name "ddagent" -StartupType Manual

Configuration​

1. Locate Configuration File​

Main configuration file location:

C:\ProgramData\Datadog\datadog.yaml

Open configuration file:

notepad "C:\ProgramData\Datadog\datadog.yaml"

Or use PowerShell ISE:

ise "C:\ProgramData\Datadog\datadog.yaml"

2. Set API Key​

# Edit datadog.yaml and set api_key
(Get-Content "C:\ProgramData\Datadog\datadog.yaml") -replace 'api_key:.*', 'api_key: your_api_key_here' | Set-Content "C:\ProgramData\Datadog\datadog.yaml"

3. Configure Datadog Site​

Set site for different regions:

# US1 (default)
site: datadoghq.com

# US3
site: us3.datadoghq.com

# US5
site: us5.datadoghq.com

# EU
site: datadoghq.eu

# AP1
site: ap1.datadoghq.com

Edit site configuration:

(Get-Content "C:\ProgramData\Datadog\datadog.yaml") -replace 'site:.*', 'site: datadoghq.eu' | Set-Content "C:\ProgramData\Datadog\datadog.yaml"

4. Set Hostname​

# Edit datadog.yaml
(Get-Content "C:\ProgramData\Datadog\datadog.yaml") -replace '#\s*hostname:.*', "hostname: $(hostname)" | Set-Content "C:\ProgramData\Datadog\datadog.yaml"

5. Enable/Configure Tags​

Add tags to your host:

tags:
- env:production
- role:webserver
- datacenter:us-east-1

Using PowerShell to add tags:

$tagsBlock = @"
tags:
- env:production
- role:webserver
- datacenter:us-east-1
"@

Add-Content "C:\ProgramData\Datadog\datadog.yaml" "`n$tagsBlock"

6. Apply Configuration Changes​

After editing configuration, restart the agent:

Restart-Service -Name "ddagent"

Verify configuration:

& "C:\Program Files\Datadog\Datadog Agent\bin\agent.exe" configcheck

Proxy Configuration​

Configure HTTP/HTTPS Proxy​

Edit datadog.yaml to add proxy settings:

proxy:
http: http://proxy-server:8080
https: https://proxy-server:8080
no_proxy:
- localhost
- 127.0.0.1

Using PowerShell:

$proxyConfig = @"

proxy:
http: http://proxy-server:8080
https: https://proxy-server:8080
no_proxy:
- localhost
- 127.0.0.1
"@

Add-Content "C:\ProgramData\Datadog\datadog.yaml" $proxyConfig
Restart-Service -Name "ddagent"

Test Proxy Connectivity​

Test connection to Datadog API through proxy:

# Set proxy for current session
$env:HTTP_PROXY = "http://proxy-server:8080"
$env:HTTPS_PROXY = "https://proxy-server:8080"

# Test connectivity
Invoke-WebRequest -Uri "https://api.datadoghq.com/api/v1/validate" -Proxy "http://proxy-server:8080" -Method GET

Test with curl (if installed):

curl.exe -x http://proxy-server:8080 https://api.datadoghq.com/api/v1/validate

Monitoring & Logs​

View Agent Logs​

Get-Content "C:\ProgramData\Datadog\logs\agent.log" -Tail 50

Monitor logs in real-time:

Get-Content "C:\ProgramData\Datadog\logs\agent.log" -Wait -Tail 50

Check Agent Status​

Full status output:

& "C:\Program Files\Datadog\Datadog Agent\bin\agent.exe" status

Health check:

& "C:\Program Files\Datadog\Datadog Agent\bin\agent.exe" health

View Running Checks​

& "C:\Program Files\Datadog\Datadog Agent\bin\agent.exe" status | Select-String -Pattern "Running Checks" -Context 0,50

Flare Command (Send Diagnostics to Support)​

& "C:\Program Files\Datadog\Datadog Agent\bin\agent.exe" flare

With case number:

& "C:\Program Files\Datadog\Datadog Agent\bin\agent.exe" flare 12345

Integration Configuration​

Enable Windows Service Integration​

Create configuration file:

New-Item -ItemType Directory -Force -Path "C:\ProgramData\Datadog\conf.d\windows_service.d"

$serviceConfig = @"
init_config:

instances:
- services:
- ddagent
- wmiApSrv
- W3SVC
"@

Set-Content "C:\ProgramData\Datadog\conf.d\windows_service.d\conf.yaml" $serviceConfig

Enable IIS Integration​

New-Item -ItemType Directory -Force -Path "C:\ProgramData\Datadog\conf.d\iis.d"

$iisConfig = @"
init_config:

instances:
- host: localhost
port: 80
"@

Set-Content "C:\ProgramData\Datadog\conf.d\iis.d\conf.yaml" $iisConfig
Restart-Service -Name "ddagent"

Enable Windows Performance Counters​

New-Item -ItemType Directory -Force -Path "C:\ProgramData\Datadog\conf.d\win32_event_log.d"

$perfConfig = @"
init_config:

instances:
- tags:
- environment:production
additional_metrics:
- ['Processor', 'processor', '% Processor Time', _Total]
- ['Memory', 'memory', 'Available MBytes']
- ['PhysicalDisk', 'disk', '% Disk Time', _Total]
"@

Set-Content "C:\ProgramData\Datadog\conf.d\win32_event_log.d\conf.yaml" $perfConfig

Troubleshooting​

Check if Agent is Running​

Get-Service -Name "ddagent" | Select-Object Name, Status, StartType

Check Agent Process​

Get-Process | Where-Object { $_.Name -like "*agent*" }

Test Network Connectivity​

Test connection to Datadog:

Test-NetConnection -ComputerName api.datadoghq.com -Port 443

Test DNS resolution:

Resolve-DnsName api.datadoghq.com

View Event Logs​

Get-EventLog -LogName Application -Source "Datadog Agent" -Newest 20

Or using Get-WinEvent:

Get-WinEvent -FilterHashtable @{LogName='Application'; ProviderName='Datadog Agent'} -MaxEvents 20

Check Firewall Rules​

List Datadog-related firewall rules:

Get-NetFirewallRule | Where-Object { $_.DisplayName -like "*Datadog*" }

Validate Configuration​

& "C:\Program Files\Datadog\Datadog Agent\bin\agent.exe" configcheck

Restart Agent with Verbose Logging​

Stop the service:

Stop-Service -Name "ddagent"

Run agent in foreground with debug:

& "C:\Program Files\Datadog\Datadog Agent\bin\agent.exe" run --log-level debug

Uninstallation​

Remove Datadog Agent​

# Stop service
Stop-Service -Name "ddagent"

# Uninstall via MSI
$app = Get-WmiObject -Class Win32_Product | Where-Object { $_.Name -like "*Datadog*" }
$app.Uninstall()

Or using msiexec:

# Find the product code
Get-WmiObject -Class Win32_Product | Where-Object { $_.Name -like "*Datadog*" } | Select-Object Name, IdentifyingNumber

# Uninstall
Start-Process msiexec.exe -ArgumentList "/x {PRODUCT-CODE-HERE} /qn" -Wait

Clean Up Configuration Files​

Remove-Item -Path "C:\ProgramData\Datadog" -Recurse -Force
Remove-Item -Path "C:\Program Files\Datadog" -Recurse -Force

Advanced Configuration​

Configure Custom Checks​

Create a custom check directory:

New-Item -ItemType Directory -Force -Path "C:\ProgramData\Datadog\checks.d"

Example custom check (Python):

from checks import AgentCheck

class HelloCheck(AgentCheck):
def check(self, instance):
self.gauge('hello.world', 1)

Save as C:\ProgramData\Datadog\checks.d\hello.py

Enable APM (Application Performance Monitoring)​

apm_config:
enabled: true
apm_non_local_traffic: true

Using PowerShell:

$apmConfig = @"

apm_config:
enabled: true
apm_non_local_traffic: true
"@

Add-Content "C:\ProgramData\Datadog\datadog.yaml" $apmConfig
Restart-Service -Name "ddagent"

Enable Log Collection​

logs_enabled: true
(Get-Content "C:\ProgramData\Datadog\datadog.yaml") -replace '#\s*logs_enabled:.*', 'logs_enabled: true' | Set-Content "C:\ProgramData\Datadog\datadog.yaml"
Restart-Service -Name "ddagent"

Performance Monitoring​

Monitor Agent Resource Usage​

Get-Process -Name "agent" | Select-Object Name, CPU, WorkingSet, VirtualMemorySize

Continuous monitoring:

while ($true) {
Get-Process -Name "agent" | Select-Object Name, CPU, @{Name="Memory(MB)";Expression={[math]::Round($_.WorkingSet/1MB,2)}}
Start-Sleep -Seconds 5
Clear-Host
}

Check Agent Metrics​

& "C:\Program Files\Datadog\Datadog Agent\bin\agent.exe" status | Select-String -Pattern "Metrics"

Automation Scripts​

Automated Installation Script​

# automated-install.ps1
param(
[Parameter(Mandatory=$true)]
[string]$ApiKey,

[string]$Site = "datadoghq.com",
[string]$Environment = "production"
)

# Download installer
Write-Host "Downloading Datadog Agent..."
$installerPath = "$env:TEMP\datadog-agent.msi"
Invoke-WebRequest -Uri "https://s3.amazonaws.com/ddagent-windows-stable/datadog-agent-7-latest.amd64.msi" -OutFile $installerPath

# Install
Write-Host "Installing Datadog Agent..."
Start-Process msiexec.exe -ArgumentList "/qn /i $installerPath APIKEY=$ApiKey SITE=$Site TAGS=env:$Environment" -Wait -NoNewWindow

# Verify
Write-Host "Verifying installation..."
Start-Sleep -Seconds 10
$service = Get-Service -Name "ddagent"
if ($service.Status -eq "Running") {
Write-Host "Datadog Agent installed and running successfully!" -ForegroundColor Green
} else {
Write-Host "Installation completed but service is not running. Starting service..." -ForegroundColor Yellow
Start-Service -Name "ddagent"
}

# Clean up
Remove-Item $installerPath -Force
Write-Host "Installation complete!"

Health Check Script​

# health-check.ps1
$agentStatus = Get-Service -Name "ddagent"
$agentBin = "C:\Program Files\Datadog\Datadog Agent\bin\agent.exe"

Write-Host "`n=== Datadog Agent Health Check ===" -ForegroundColor Cyan

# Service status
Write-Host "`nService Status: " -NoNewline
if ($agentStatus.Status -eq "Running") {
Write-Host "RUNNING" -ForegroundColor Green
} else {
Write-Host "NOT RUNNING" -ForegroundColor Red
}

# Agent version
Write-Host "`nAgent Version:"
& $agentBin version

# Configuration check
Write-Host "`nConfiguration Check:"
& $agentBin configcheck

# Connectivity test
Write-Host "`nDatadog API Connectivity:"
try {
$response = Invoke-WebRequest -Uri "https://api.datadoghq.com" -TimeoutSec 5
Write-Host "OK - Status Code: $($response.StatusCode)" -ForegroundColor Green
} catch {
Write-Host "FAILED - $($_.Exception.Message)" -ForegroundColor Red
}

Write-Host "`n=== End of Health Check ===" -ForegroundColor Cyan

Security Best Practices​

Secure API Key Storage​

Store API key in encrypted file:

# Save API key securely
$apiKey = Read-Host "Enter Datadog API Key" -AsSecureString
$apiKey | ConvertFrom-SecureString | Out-File "C:\SecureConfig\dd-api-key.txt"

# Retrieve and use
$encryptedKey = Get-Content "C:\SecureConfig\dd-api-key.txt" | ConvertTo-SecureString
$BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($encryptedKey)
$apiKeyPlain = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)

Restrict File Permissions​

# Remove inherited permissions
$acl = Get-Acl "C:\ProgramData\Datadog\datadog.yaml"
$acl.SetAccessRuleProtection($true, $false)

# Grant only Administrators access
$adminRule = New-Object System.Security.AccessControl.FileSystemAccessRule("Administrators", "FullControl", "Allow")
$acl.SetAccessRule($adminRule)

# Apply
Set-Acl "C:\ProgramData\Datadog\datadog.yaml" $acl

Quick Reference​

Essential Commands​

# Service management
Get-Service -Name "ddagent"
Start-Service -Name "ddagent"
Stop-Service -Name "ddagent"
Restart-Service -Name "ddagent"

# Agent commands
& "C:\Program Files\Datadog\Datadog Agent\bin\agent.exe" status
& "C:\Program Files\Datadog\Datadog Agent\bin\agent.exe" version
& "C:\Program Files\Datadog\Datadog Agent\bin\agent.exe" health
& "C:\Program Files\Datadog\Datadog Agent\bin\agent.exe" configcheck

# View logs
Get-Content "C:\ProgramData\Datadog\logs\agent.log" -Tail 50 -Wait

File Locations​

  • Configuration: C:\ProgramData\Datadog\datadog.yaml
  • Logs: C:\ProgramData\Datadog\logs\
  • Integrations: C:\ProgramData\Datadog\conf.d\
  • Custom Checks: C:\ProgramData\Datadog\checks.d\
  • Installation: C:\Program Files\Datadog\Datadog Agent\