Skip to content
Datadog Logs

Datadog Logs Skill

Search Datadog logs from an agent and keep the bill under control — query syntax, exclusion filters, log-based metrics, archives and PII scrubbing.

GitHub Docs

Install

Install with the skills CLI

One command for Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf and dozens of other agents. Needs Node.js; the skill is fetched straight from datadog-labs/agent-skills.

$ npx skills add datadog-labs/agent-skills --skill dd-logs

Run it in a terminal. The CLI finds the agents installed on your machine, asks which ones to add the skill to, and whether to install it into the folder you ran it from or for all your projects.

Other ways to install

Copy the whole skill folder — SKILL.md and any scripts or references beside it — into ~/.claude/skills/dd-logs/, where Claude Code picks it up in every project. Only git is needed.

tmp=$(mktemp -d) && \
  git clone --depth 1 --branch main https://github.com/datadog-labs/agent-skills.git "$tmp" && \
  mkdir -p ~/.claude/skills && \
  cp -R "$tmp"/dd-logs ~/.claude/skills/dd-logs

No scripts or references next to it? Saving the SKILL.md alone as ~/.claude/skills/dd-logs/SKILL.md works too.

Using another agent? Its personal skills folder
Codex
~/.agents/skills/
Cursor
~/.cursor/skills/
GitHub Copilot
~/.copilot/skills/
Gemini CLI
~/.gemini/skills/
Windsurf
~/.codeium/windsurf/skills/
OpenCode
~/.config/opencode/skills/

About

  • Log search syntax: tags, attributes, numeric ranges, booleans, wildcards
  • Pipeline processors — grok parsing, status and attribute remapping
  • Exclusion filters and a jq recipe for finding the noisiest services
  • Log-based metrics as a cheaper alternative to indexing
  • Archive configuration with rehydration tags
  • PII scrubbing at ingestion and in the application

Log search is the easy part; the reason log platforms hurt is indexing volume. This official Datadog skill covers both, and it is unusual in treating cost as a first-class concern rather than an afterthought.

Searching

The pup logs search surface is documented with a compact syntax table — full-text terms, tag equality (status:error), attribute matching and numeric ranges (@http.status_code:>=400), boolean composition and wildcards — plus the pipeline and processor shapes an agent needs to understand the data it is reading: grok parsers, status remappers and attribute remappers that move user_id to the standard usr.id.

Cost control as the main event

The skill is direct about what to stop indexing. It ships a jq recipe that groups an hour of logs by service to find the noisiest producers, then a table of the usual exclusion candidates — health-check and readiness endpoints, status:debug, static asset requests, heartbeat messages. Where a metric is what you actually wanted, it points at log-based metrics as the cheaper alternative to indexing, with an explicit cardinality warning to group only on bounded values. Archives to S3 or equivalent cover the compliance case at storage prices, with rehydration tags set up front.

Sensitive data

Hash-remapper scrubbing rules handle emails and similar fields at ingestion, and there is a sanitiser pattern for stripping card numbers and national ID numbers in the application before the log ever leaves the process — the right layer for that particular problem.

Honest about the tool's limits

Worth noting: the skill explicitly records where pup has no command, pointing the agent at the Datadog UI or API for log rehydration rather than letting it hallucinate a pup logs rehydrate. Requires the pup CLI, authenticated with pup auth login. MIT-licensed, published by Datadog Labs.

SKILL.md

The instructions your agent loads, as published by Datadog.

SKILL.md
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 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
pup auth login
Search Logs
# 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
QueryMeaning
errorFull-text search
status:errorTag equals
@http.status_code:500Attribute equals
@http.status_code:>=400Numeric range
service:api AND env:prodBoolean
@message:*timeout*Wildcard
Configuration APIs

Available log configuration commands in pup 0.42.0:

# 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
{
  "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:

{
  "name": "Drop debug logs",
  "filter": {"query": "status:debug"},
  "is_enabled": true
}
High-Volume Exclusions
# Find noisiest log sources
pup logs search --query="*" --from="1h" | jq 'group_by(.service) | map({service: .[0].service, count: length}) | sort_by(-.count)[:10]'
ExcludeQuery
Health checks@http.url:"/health" OR @http.url:"/ready"
Debug logsstatus:debug
Static assets@http.url:*.css OR @http.url:*.js
Heartbeats@message:*heartbeat*
Archives

Store logs cheaply for compliance:

# 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)
# 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):

# 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
{
  "type": "hash-remapper",
  "name": "Hash emails",
  "sources": ["email", "@user.email"]
}
Never Log
# 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
ProblemFix
Logs not appearingCheck agent, pipeline filters
High costsAdd exclusion filters
Search slowNarrow time range, use indexes
Missing attributesCheck grok parser
References/Documentation
Install

Official Datadog skill for the pup CLI — OAuth2 login with token refresh, plus a command map covering logs, monitors, traces, metrics, incidents, SLOs, on-call, security signals and audit logs.

Browse all skills →