Datadog Agent: no metrics after migrating from Nagios/Zabbix/CloudWatch
Fix missing metrics in Datadog Agent after migrating from Nagios/Zabbix/CloudWatch: diagnose agent status, API key and region (site), intake connectivity, integration enablement, and inconsistent tags.
This runbook covers missing metrics in the Datadog Agent after migrating from Nagios, Zabbix or CloudWatch. If the agent is reporting but chewing up CPU/memory, see the runbook Datadog Agent: high CPU and memory. For the full migration guide: Migrating to Datadog from Nagios, Zabbix and CloudWatch. For observability architecture, book a consulting session.
Symptoms
The agent runs as a service, but the host, its metrics, or an integration are missing in Datadog. Typical signals:
# General agent status - Forwarder, API Keys, Collector sections
sudo datadog-agent status | sed -n '1,60p'
# Typical problem signals:
# "API Key is invalid" / "403 Forbidden" -> wrong API key or wrong site (region)
# "Forwarder ... Errors: N" / "Transactions dropped" -> intake connectivity
# integration missing from the "Checks" section or "Instances: 0" -> integration not enabled
# host visible, but metrics without the expected tags -> inconsistent tags
# Whether the agent delivers data to intake at all
sudo datadog-agent status | grep -A5 "Forwarder"
# Test connectivity to the intake endpoint (site-dependent!)
curl -v "https://api.datadoghq.eu/api/v1/validate" \
-H "DD-API-KEY: ${DD_API_KEY}" 2>&1 | tail -5
# Note: datadoghq.eu (EU) vs datadoghq.com (US) - wrong site = 403 despite a valid key
The host doesn’t appear in Datadog, an integration isn’t reporting (Instances: 0), the forwarder reports errors, or data arrives with tags that don’t match the ones the dashboards migrated from the old system rely on.
Cause
Missing metrics in Datadog after migration usually have one of four causes:
- Wrong API key or wrong site (region): a key from a different organisation, a typo, or the agent configured for
datadoghq.com(US) while the account is in the EU region (datadoghq.eu). The result:403 Forbiddenon validation and zero data - the most common mistake right after installation. - Blocked connectivity to intake: an on-prem firewall/proxy blocks outbound traffic on 443 to the
*-app.agent.datadoghq.eu/.comendpoints. The agent collects metrics locally, but the forwarder doesn’t deliver them (transactions dropped). - Integration not enabled or misconfigured check: the agent on its own doesn’t collect application metrics - you have to enable the integration (
conf.d/<integration>.d/conf.yaml). After migrating from Zabbix/Nagios, teams install the agent but forget to map their checks onto Datadog integrations - henceInstances: 0. - Inconsistent tags (host/env/service): dashboards and monitors migrated from the old system filter on tags (
env,service,host), and the agent sends data without them or with different values. The data is in Datadog, but the views and alerts show nothing - typical during parallel-run on a mixed fleet.
Fix
A) Verify the API key and site (region) - always the first step:
# Check which site the agent targets and whether the key is valid
sudo grep -E '^site:|^api_key:' /etc/datadog-agent/datadog.yaml
# For an EU account it must be: site: datadoghq.eu
# Validate the key against the correct site
curl -s "https://api.datadoghq.eu/api/v1/validate" \
-H "DD-API-KEY: ${DD_API_KEY}" | grep -q '"valid":true' && echo OK || echo FAIL
# FAIL -> wrong key or wrong site. Fix datadog.yaml and restart the agent:
sudo systemctl restart datadog-agent
B) Intake connectivity - unblock outbound traffic:
# Forwarder section in the status: are there dropped transactions
sudo datadog-agent status | grep -A8 "Forwarder"
# Required outbound 443 connectivity to (for EU) among others:
# *-app.agent.datadoghq.eu, api.datadoghq.eu, orch.datadoghq.eu
nc -vz api.datadoghq.eu 443
# If traffic goes through a proxy - configure the proxy in datadog.yaml:
# proxy:
# https: "http://proxy.company.local:3128"
sudo systemctl restart datadog-agent
C) Enable the integration and verify the check:
# Example: PostgreSQL integration - create the config from the template
sudo cp /etc/datadog-agent/conf.d/postgres.d/conf.yaml.example \
/etc/datadog-agent/conf.d/postgres.d/conf.yaml
# Fill in host/port/monitoring user, then restart the agent
sudo systemctl restart datadog-agent
# Check that the integration collects metrics (Instances > 0, Metrics > 0)
sudo datadog-agent check postgres | grep -E "Instances|Metrics|Errors"
# Expected: Instances: 1, Metrics: >0, Errors: 0
D) Align the tags (host/env/service) the dashboards rely on:
# Set global tags in datadog.yaml, consistent with the migrated dashboards/monitors
# tags:
# - env:prod
# - team:platform
# For application metrics, set service/env in the integration config or via autodiscovery.
# Verify the host tags after restart
sudo datadog-agent status | grep -A10 "Host Info"
# Make sure the tag keys (env, service) match by name and value
# the filters in the migrated dashboards - otherwise the views stay empty.
Prevention: settle on one tag convention (env, service, team) before the migration and roll it out via the agent config or autodiscovery, so the migrated dashboards work immediately. During parallel-run, keep the old system as the source of truth until Datadog reports the full set of hosts and integrations with correct tags. Set up a “no-data” monitor on the key metrics to catch silent hosts before you turn off the old monitoring.
Validation
# 1. Agent status without key or forwarder errors
sudo datadog-agent status | grep -E "API Keys|Forwarder" -A3
# Expected: key "valid", no dropped transactions
# 2. The host reports and is visible (validate the key against the correct site)
curl -s "https://api.datadoghq.eu/api/v1/validate" -H "DD-API-KEY: ${DD_API_KEY}"
# Expected: {"valid":true}
# 3. Each required integration collects metrics
for c in postgres nginx disk; do
echo "== $c =="; sudo datadog-agent check $c | grep -E "Instances|Metrics|Errors"
done
# Expected: Instances > 0, Metrics > 0, Errors: 0 for each integration
# 4. Tags consistent with the dashboards (env/service present)
sudo datadog-agent status | grep -A10 "Host Info" | grep -E "env:|service:"
# Expected: tags present and matching the filters in the migrated dashboards
If the agent has a valid key, the forwarder isn’t dropping transactions, the required integrations collect metrics, and the tags match the dashboards, the monitoring migration for that host can be considered confirmed. Only after confirming the full set of hosts and integrations should you turn off the old system.
Datadog not collecting metrics after migration?
Book a free 30-minute call. We'll review your agent configuration, integrations and tag convention, and get the monitoring migration to a clean cutover.