dd-monitors
datadog-labs/agent-skills
Create and manage Datadog monitors with alerting best practices and file-based workflows.
What is dd-monitors?
This skill enables you to list, search, create, and manage Datadog monitors programmatically. Use it to set up metric, log, and event alerts with proper scoping, recovery thresholds, and runbook integration to reduce alert fatigue.
- List and search monitors by tags or ID
- Create monitors from JSON/YAML files with validation
- Set recovery thresholds and meaningful alert conditions
- Manage downtime windows to silence notifications
- Audit monitors for ownership and noise patterns
- Mark monitors for safe deletion instead of direct removal
How to install dd-monitors
npx skills add https://github.com/datadog-labs/agent-skills --skill dd-monitors- Datadog account with API access
- pup CLI tool installed and in PATH
- Authentication via `pup auth login`
How to use dd-monitors
- 1.Run `pup auth login` to authenticate with Datadog
- 2.List existing monitors with `pup monitors list` or filter by tags
- 3.Create monitors from JSON files using `pup monitors create --file monitor.json`
- 4.Set recovery thresholds in monitor options to prevent flapping
- 5.Include runbook URLs and context in alert messages
- 6.Use `pup downtime create --file downtime.json` for planned silence windows
- 7.Mark monitors for deletion with `[MARKED FOR DELETION]` prefix instead of direct removal
Use cases
- Set up CPU and memory alerts scoped to production environments with recovery thresholds
- Create log-pattern monitors for error detection with runbook links
- Silence known maintenance windows using downtime payloads
- Audit unmaintained monitors lacking team ownership tags
- Establish composite monitors combining multiple metric queries
- DevOps engineers managing production alerting
- SREs implementing SLO-based monitoring
- Platform teams standardizing monitor creation workflows
- On-call engineers reducing alert fatigue
dd-monitors FAQ
Use longer evaluation windows (e.g., `last_5m` instead of `last_1m`), set recovery thresholds below critical thresholds, and base thresholds on SLOs rather than guesses.
Downtime is for planned silence windows and is the preferred approach. Monitor editing is for changing query or threshold behavior.
No. Use the safe deletion workflow: mark the monitor name with `[MARKED FOR DELETION]` prefix first, then delete after confirmation.
Always include environment and service tags in queries (e.g., `{env:prod,service:api}`) and use `by {host}` to break down by dimension.
Metric alert, query alert, service check, event alert, log alert, composite, and APM monitors.
Full instructions (SKILL.md)
Source of truth, from datadog-labs/agent-skills.
name: dd-monitors description: Monitor management - list, search, file-based create, and alerting best practices. metadata: version: "1.0.1" author: datadog-labs repository: https://github.com/datadog-labs/agent-skills tags: datadog,monitors,alerting,alerts,dd-monitors globs: "/datadog*.yaml,/monitor" alwaysApply: "false"
Datadog Monitors
Create, manage, and maintain monitors for alerting.
Prerequisites
This requires pup in your path. See Setup Pup.
Command Execution Order (Token-Efficient)
For scoped commands, use this order:
- Check context first (prior outputs, conversation, saved values).
- If a required value is missing, run a discovery command first.
- If still ambiguous, ask the user to confirm.
- Then run the target command.
- Avoid speculative commands likely to fail.
Quick Start
pup auth login
Common Operations
List Monitors
pup monitors list
pup monitors list --tags "team:platform"
Get Monitor
pup monitors get <id>
Create Monitor
pup monitors create --file monitor.json
Silence Alerts (Downtime)
# No pup monitors mute/unmute commands.
# Use downtime payloads to silence monitor notifications.
pup downtime create --file downtime.json
pup downtime cancel <downtime_id>
Monitor Creation Best Practices
1. Avoid Alert Fatigue
| Rule | Why |
|---|---|
| No flapping alerts | Use last_Xm not last_1m |
| Meaningful thresholds | Based on SLOs, not guesses |
| Actionable alerts | If no action needed, don't alert |
| Include runbook | @runbook-url in message |
# WRONG - will flap constantly
query = "avg(last_1m):avg:system.cpu.user{*} > 50" # ❌ Too sensitive
# CORRECT - stable alerting
query = "avg(last_5m):avg:system.cpu.user{env:prod} by {host} > 80" # ✅ Reasonable window
2. Use Proper Scoping
# WRONG - alerts on everything
query = "avg(last_5m):avg:system.cpu.user{*} > 80" # ❌ No scope
# CORRECT - scoped to what matters
query = "avg(last_5m):avg:system.cpu.user{env:prod,service:api} by {host} > 80" # ✅
3. Set Recovery Thresholds
monitor = {
"query": "avg(last_5m):avg:system.cpu.user{env:prod} > 80",
"options": {
"thresholds": {
"critical": 80,
"critical_recovery": 70, # ✅ Prevents flapping
"warning": 60,
"warning_recovery": 50
}
}
}
4. Include Context in Messages
message = """
## High CPU Alert
Host: {{host.name}}
Current Value: {{value}}
Threshold: {{threshold}}
### Runbook
1. Check top processes: `ssh {{host.name}} 'top -bn1 | head -20'`
2. Check recent deploys
3. Scale if needed
@slack-ops @pagerduty-oncall
"""
NEVER Delete Monitors Directly
Use safe deletion workflow (same as dashboards):
def safe_mark_monitor_for_deletion(monitor_id: str, client) -> bool:
"""Mark monitor instead of deleting."""
monitor = client.get_monitor(monitor_id)
name = monitor.get("name", "")
if "[MARKED FOR DELETION]" in name:
print(f"Already marked: {name}")
return False
new_name = f"[MARKED FOR DELETION] {name}"
client.update_monitor(monitor_id, {"name": new_name})
print(f"✓ Marked: {new_name}")
return True
Monitor Types
| Type | Use Case |
|---|---|
metric alert | CPU, memory, custom metrics |
query alert | Complex metric queries |
service check | Agent check status |
event alert | Event stream patterns |
log alert | Log pattern matching |
composite | Combine multiple monitors |
apm | APM metrics |
Audit Monitors
# Find monitors without owners
pup monitors list | jq '.[] | select(.tags | contains(["team:"]) | not) | {id, name}'
# Find noisy monitors (high alert count)
pup monitors list | jq 'sort_by(.overall_state_modified) | .[:10] | .[] | {id, name, status: .overall_state}'
Downtime vs Muting
| Use | When |
|---|---|
| Downtime | Any planned silence window |
| Monitor edit | Query/threshold behavior changes |
# Downtime (preferred)
pup downtime create --file downtime.json
Failure Handling
| Problem | Fix |
|---|---|
| Alert not firing | Check query returns data, thresholds |
| Too many alerts | Increase window, add recovery threshold |
| No data alerts | Check agent connectivity, metric exists |
| Auth error | pup auth refresh |
References
Related skills
More from datadog-labs/agent-skills and the wider catalog.

dd-pup
Datadog CLI with OAuth2 auth for logs, monitors, metrics, traces, incidents, dashboards, and more.

agent-skills
Datadog monitoring, logging, tracing, and observability skills for AI agents.

agent-install
Install Datadog Agent on Linux with Single Step Instrumentation (SSI) for automatic APM without code changes.

dd-docs
Look up Datadog documentation and product limits via LLM-optimized index.

warranty-tracker
Track and manage construction warranties. Monitor expiration dates, claims, and manufacturer documentation.

reflection
MUST use this skill when user provides feedback / ask to do things in certain way, or when a tool call fails - for self-improvement - to learn user preferences and store them in AGENT.md / CLAUDE.md, and to propose improvements to skills.