dd-logs — Claude Code skill: search and archive Datadog logs
A skill for working with Datadog logs through the CLI: search, archives, log-based metrics and exclusion filters for cost control. Useful when you are chasing an incident or trimming an indexing bill.
npx skills add datadog-labs/agent-skills --skill dd-logs -a claude-codeWhat dd-logs does
The skill teaches your agent to query Datadog logs through pup, the Datadog CLI. Searches use queries like status:error, @http.status_code:>=500 or service:api AND env:prod, with numeric ranges and wildcards supported. Separate commands cover archives, restriction queries and custom destinations.
You need pup installed and an authenticated session via pup auth login — without that, nothing runs. The skill also spells out an execution order: check context first, run a discovery command if a value is missing, then run the target command. Fewer speculative calls that fail.
For cost control it covers exclusion filters: drop health checks, debug logs, static assets and heartbeats so only what matters reaches the index. Logs can go to an archive (S3 example included) and you can build metrics from logs, which costs less than indexing. Rehydration is not available through pup — that workflow lives in the Datadog UI or API. There is also a section on sensitive data: hashing rules and sanitizing messages before they leave your app.
What it helps with
- find service errors from the last hour
- cut the indexing bill from noisy logs
- store logs in an archive for compliance
- build a metric from logs instead of indexing
- mask emails and card numbers in messages
Example prompts for the agent
- Search Datadog for all
status:errorlogs from theapiservice in the last hour - Show the top 10 services by log volume over the last hour so I can decide what to exclude
- Create an exclusion filter for debug logs and health checks
How to install dd-logs
1Skills CLI (Vercel)
npx skills add datadog-labs/agent-skills --skill dd-logs -a claude-code2Manually: put the files in place
~/.claude/skills/dd-logs/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/dd-logs/
1Skills CLI (Vercel)
npx skills add datadog-labs/agent-skills --skill dd-logs -a codex2Manually: put the files in place
.agents/skills/dd-logs/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add datadog-labs/agent-skills --skill dd-logs -a cursor2Manually: put the files in place
.cursor/skills/dd-logs/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install datadog-labs/agent-skills dd-logs2Manually: put the files in place
.github/skills/dd-logs/SKILL.md1Skills CLI (Vercel)
npx skills add datadog-labs/agent-skills --skill dd-logs -a gemini-cli2Platform CLI
gemini skills install https://github.com/datadog-labs/agent-skills --path dd-logsManually: put the files in place
.devin/skills/dd-logs/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add datadog-labs/agent-skills --skill dd-logs -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about dd-logs
How do I install dd-logs in Claude?
Run npx skills add datadog-labs/agent-skills --skill dd-logs -a claude-code. The skill file lands at ~/.claude/skills/dd-logs/SKILL.md.
What does dd-logs do?
It gives your agent commands to search Datadog logs, manage archives, restriction queries and custom destinations, and create log-based metrics and exclusion filters.
What do I need before using it?
pup installed and an authenticated session from pup auth login. Search and configuration commands will not run without it.
Source text
SKILL.md · MIT
---
name: dd-logs
description: Log management - search, archives, metrics, and cost control.
metadata:
version: "1.0.1"
author: datadog-labs
repository: https://github.com/datadog-labs/agent-skills
tags: datadog,logs,logging,search,dd-logs
globs: "**/datadog*.yaml,**/*log*"
alwaysApply: "false"
---
# Datadog Logs
Search, process, and archive logs with cost awareness.
## Prerequisites
Datadog Pup should already be installed. See [Setup Pup](https://github.com/datadog-labs/agent-skills/tree/main?tab=readme-ov-file#setup-pup) if not.
## Command Execution Order (Token-Efficient)
For scoped commands, use this order:
1. Check context first (prior outputs, conversation, saved values).
2. If a required value is missing, run a discovery command first.
3. If still ambiguous, ask the user to confirm.
4. Then run the target command.
5. Avoid speculative commands likely to fail.
## Quick Start
```bash
pup auth login
```
## Search Logs
```bash
# Basic search
pup logs search --query="status:error" --from="1h"
# With filters
pup logs search --query="service:api status:error" --from="1h" --limit 100
# JSON output
pup logs search --query="@http.status_code:>=500" --from="1h"
```
### Search Syntax
| Query | Meaning |
|-------|---------|
| `error` | Full-text search |
| `status:error` | Tag equals |
| `@http.status_code:500` | Attribute equals |
| `@http.status_code:>=400` | Numeric range |
| `service:api AND env:prod` | Boolean |
| `@message:*timeout*` | Wildcard |
## Configuration APIs
Available log configuration commands in pup 0.42.0:
```bash
# List log archives
pup logs archives list
# List log restriction queries
pup logs restriction-queries list
# List custom log destinations
pup logs custom-destinations list
```
### Common Processors
```json
{
"name": "API Logs",
"filter": {"query": "service:api"},
"processors": [
{
"type": "grok-parser",
"name": "Parse nginx",
"source": "message",
"grok": {"match_rules": "%{IPORHOST:client_ip} %{DATA:method} %{DATA:path} %{NUMBER:status}"}
},
{
"type": "status-remapper",
"name": "Set severity",
"sources": ["level", "severity"]
},
{
"type": "attribute-remapper",
"name": "Remap user_id",
"sources": ["user_id"],
"target": "usr.id"
}
]
}
```
## Exclusion Filters (Cost Control)
**Index only what matters:**
```json
{
"name": "Drop debug logs",
"filter": {"query": "status:debug"},
"is_enabled": true
}
```
### High-Volume Exclusions
```bash
# Find noisiest log sources
pup logs search --query="*" --from="1h" | jq 'group_by(.service) | map({service: .[0].service, count: length}) | sort_by(-.count)[:10]'
```
| Exclude | Query |
|---------|-------|
| Health checks | `@http.url:"/health" OR @http.url:"/ready"` |
| Debug logs | `status:debug` |
| Static assets | `@http.url:*.css OR @http.url:*.js` |
| Heartbeats | `@message:*heartbeat*` |
## Archives
Store logs cheaply for compliance:
```bash
# List archives
pup logs archives list
# Archive config (S3 example)
{
"name": "compliance-archive",
"query": "*",
"destination": {
"type": "s3",
"bucket": "my-logs-archive",
"path": "/datadog"
},
"rehydration_tags": ["team:platform"]
}
```
### Rehydrate (Restore)
```bash
# No `pup logs rehydrate` command in pup 0.42.0.
# Use Datadog UI/API for rehydration workflows.
```
## Log-Based Metrics
Create metrics from logs (cheaper than indexing):
```bash
# List log-based metrics
pup logs metrics list
# Get one metric by ID
pup logs metrics get api.errors.count
```
**Cardinality warning:** Group by bounded values only.
## Sensitive Data
### Scrubbing Rules
```json
{
"type": "hash-remapper",
"name": "Hash emails",
"sources": ["email", "@user.email"]
}
```
### Never Log
```python
# In your app - sanitize before sending
import re
def sanitize_log(message: str) -> str:
# Remove credit cards
message = re.sub(r'\b\d{4}[-\s]?\d{4}[-\s]?\d{4}[-\s]?\d{4}\b', '[REDACTED]', message)
# Remove SSNs
message = re.sub(r'\b\d{3}-\d{2}-\d{4}\b', '[REDACTED]', message)
return message
```
## Troubleshooting
| Problem | Fix |
|---------|-----|
| Logs not appearing | Check agent, pipeline filters |
| High costs | Add exclusion filters |
| Search slow | Narrow time range, use indexes |
| Missing attributes | Check grok parser |
## References/Documentation
- [Log Search Syntax](https://docs.datadoghq.com/logs/explorer/search_syntax/)
- [Pipelines](https://docs.datadoghq.com/logs/log_configuration/pipelines/)
- [Exclusion Filters](https://docs.datadoghq.com/logs/indexes/#exclusion-filters)
- [Archives](https://docs.datadoghq.com/logs/archives/)
© datadog-labs · MIT · datadog-labs/agent-skills