Skip to main content
skill CX Codex

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.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add datadog-labs/agent-skills --skill dd-logs -a claude-code
Open on GitHub

What 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:error logs from the api service 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-code

2Manually: put the files in place

~/.claude/skills/dd-logs/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/dd-logs/

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

Similar skills

Everything for DevOps and infrastructure →

From the same set20

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor