dd-logs

Quản lý log - tìm kiếm, pipeline, lưu trữ và kiểm soát chi phí.

npx skills add https://github.com/datadog-labs/pup --skill dd-logs

Datadog Logs

Search, process, and archive logs with cost awareness.

Prerequisites

Datadog Pup (dd-pup/pup) should already be installed:

cargo install --git https://github.com/DataDog/pup

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 is the default
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

Trace IDs in Log Results

Logs that show a linked trace in the Datadog UI may not include dd.trace_id / dd.span_id in API results. When a trace ID attribute is remapped for trace correlation (via JSON preprocessing or a Trace Remapper processor), the source attribute is removed and the value is stored as an internal attribute that the Logs Search API does not return. The UI's "trace" link reads that internal attribute, so UI and API results differ.

This is expected Datadog Log Management behavior, not a pup bug or an instrumentation problem. Do not retry queries or change instrumentation to "fix" it. Datadog is tracking making these values queryable (support reference FRLOGSS-4306).

Workarounds until then:

  • Emit the trace ID under a separate attribute that is not remapped (e.g. @custom.trace_id) and query that.
  • Pivot the other way: search spans by the log's service/time window via pup traces search, or use the trace link in the Datadog UI.

Pipelines

Process logs before indexing:

# List pipelines
pup obs-pipelines list

# Create pipeline (JSON)
pup obs-pipelines create --file pipeline.json

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"]
}

Log-Based Metrics

Inspect log-based metrics:

# List existing log-based metrics
pup logs metrics list

⚠️ 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
dd.trace_id missing but UI shows a traceExpected: remapped trace IDs become internal attributes (see Trace IDs in Log Results)

References/Documentation

Thêm skills từ datadog-labs

dd-audit-compliance-report
datadog-labs
Tạo bằng chứng tuân thủ sẵn sàng cho kiểm toán viên từ Datadog Audit Trail cho SOC 2 và PCI DSS. Ánh xạ các kiểm soát khung đến các mẫu truy vấn cụ thể và tạo ra…
experiment-analyzer
datadog-labs
Phân tích kết quả thí nghiệm LLM. Xử lý các thí nghiệm đơn lẻ hoặc so sánh, chế độ khám phá hoặc hỏi đáp. Sử dụng khi người dùng nói "phân tích thí nghiệm", "so sánh…
dd-monitors
datadog-labs
Quản lý giám sát - tạo, cập nhật, tắt tiếng và các phương pháp tốt nhất về cảnh báo.
dd-audit-cost-spike-investigation
datadog-labs
Điều tra sự gia tăng đột biến về mức sử dụng hoặc chi phí sản phẩm Datadog bằng cách đối chiếu dữ liệu Đo lường Mức sử dụng (khi nào/cái gì tăng đột biến) với Nhật ký Kiểm toán các thay đổi cấu hình (ai đã thay đổi cái gì trong…
dd-audit-key-compromise
datadog-labs
Điều tra một khóa API Datadog có khả năng bị xâm phạm — dòng thời gian các hành động, phân tích địa lý/IP, các điểm cuối được gọi, cờ bất thường và các bước khắc phục.
eval-trace-rca
datadog-labs
Phân tích nguyên nhân gốc rễ trên các dấu vết LLM sản xuất bằng cách sử dụng kết quả đánh giá của giám khảo làm tín hiệu. Chẩn đoán lý do tại sao ứng dụng của người dùng đang gặp lỗi. Sử dụng khi người dùng nói "eval…
dd-account-setup
datadog-labs
Đảm bảo người dùng có tài khoản Datadog đã xác thực với DD_API_KEY hợp lệ trên đúng khu vực trước khi thực hiện bất kỳ thiết lập hoặc đo lường Datadog nào. Phát hiện các…
dd-product-recommender
datadog-labs
Đề xuất các sản phẩm Datadog phù hợp cho một codebase và/hoặc mục tiêu đã nêu — dựa trên bản đồ tech-stack→product và bản đồ use-case→product được xây dựng từ Datadog…