agentleFS
Cogni-AI-OUCogni-AI-OU/cogni-ai-agent-skills/datadog-agent/SKILL.md

datadog-agent

Skill4 starsChanged 6 months agoMITView on GitHub

Use when installing, configuring, or updating Datadog Agent;

The file

We split this skill into the rules it gives an agent

11 rules. About 0 are common, 2 are distinctive, and 9 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈2

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 9

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    When configuring, installing, or troubleshooting the Datadog Agent on a Linux host.

    line 15
  2. Very specific:

    When updating Ansible playbooks that deploy the datadog.dd.agent role.

    line 17
  3. Very specific:

    When managing Datadog SaaS configurations like Monitors or SLOs (use datadog-monitors).

    line 22
  4. Distinctive:

    If you are deploying Datadog strictly via a Helm chart in Kubernetes without needing custom host-level Python checks.

    line 23
  5. Very specific:

    Agent Immutability: Prefer immutable configuration deployments (e.g., Ansible) over manual modifications to datadog.yaml or conf.d/.

    line 33
  6. Very specific:

    API Key Handling: Never hardcode datadog_api_key in playbooks.

    line 34
  7. Very specific:

    When using the datadog.dd.agent (or legacy datadog.datadog) Ansible role, ensure correct YAML hierarchy, especially for log collection.

    line 40
  8. Very specific:

    Avoid Array Root: Do not map a check directly to an array.

    line 43
  9. Very specific:

    Create custom Python checks by extending AgentCheck for simple metrics or OpenMetricsBaseCheckV2 for Prometheus endpoints.

    line 59
  10. Very specific:

    Check agent status: datadog-agent status

    line 110
  11. Very specific:

    Subprocess execution: Never use Python's native subprocess module due to the Agent's Go-runtime multithreading constraints.

    line 111

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Skill: datadog-agent

<!-- markdownlint-disable MD013 MD023 MD031 MD032 -->

Expert-level guidance for installing, configuring, and extending the Datadog Agent, including Ansible orchestration and custom OpenMetrics checks.

When to Use

  • When configuring, installing, or troubleshooting the Datadog Agent on a Linux host.
  • To write custom Python check scripts (AgentCheck or OpenMetricsBaseCheckV2) for the agent.
  • When updating Ansible playbooks that deploy the datadog.dd.agent role.

When Not to Use

  • For querying Datadog APIs to read telemetry or dashboard data (use datadog-api instead).
  • When managing Datadog SaaS configurations like Monitors or SLOs (use datadog-monitors).
  • If you are deploying Datadog strictly via a Helm chart in Kubernetes without needing custom host-level Python checks.

Common Pitfalls

  • Subprocess Hangs: Using Python's native subprocess module inside a custom check instead of get_subprocess_output(), which deadlocks the Agent's Go-runtime.
  • Misnamed Files: Creating a custom check script named my_check.py but naming the configuration file custom_check.yaml, causing the Agent to silently ignore it.
  • Root Level Logs: Defining - type: file at the root of a check's YAML configuration instead of properly nesting it under a logs: key.

Core Principles

  • Agent Immutability: Prefer immutable configuration deployments (e.g., Ansible) over manual modifications to datadog.yaml or conf.d/.
  • API Key Handling: Never hardcode datadog_api_key in playbooks; utilize vault secrets or environment variables.
  • Python Compatibility: Custom Agent checks must be Python 3 compatible for modern Agent versions (v7+).
  • File Matching: The custom check script name (e.g., my_check.py) must exactly match its configuration file name (e.g., my_check.yaml).

Ansible Integration & Logs Configuration

When using the datadog.dd.agent (or legacy datadog.datadog) Ansible role, ensure correct YAML hierarchy, especially for log collection.

  • Requirements: Ansible v2.10+, ansible-galaxy collection install datadog.dd
  • Avoid Array Root: Do not map a check directly to an array. A common mistake with logs is defining - type: file at the root check level.
  • Correct Logs Structure: Logs must be encapsulated under a logs: key within the specific check dictionary.
# Correct Ansible definition for logs attached to a custom/syslog check
datadog_checks:
  syslog: # Creates /etc/datadog-agent/conf.d/syslog.d/conf.yaml
    logs:
      - type: file
        path: /var/log/syslog
        service: syslog
        source: syslog

Custom Agent Checks

Create custom Python checks by extending AgentCheck for simple metrics or OpenMetricsBaseCheckV2 for Prometheus endpoints.

  • Directory Paths:
    • Scripts: /etc/datadog-agent/checks.d/
    • Configs: /etc/datadog-agent/conf.d/<CHECK_NAME>.d/conf.yaml
  • Naming Convention: Prefix custom checks with custom_ (e.g., custom_postfix.py) to avoid conflicts with out-of-the-box integrations.
  • Check Verification: sudo -u dd-agent -- datadog-agent check <CHECK_NAME>

Simple Python Check

from datadog_checks.base import AgentCheck

class CustomCheck(AgentCheck):
    def check(self, instance):
        self.gauge('custom.metric', 1, tags=instance.get('tags', []))

OpenMetrics Base Check (V2)

Advanced scraping from Prometheus endpoints. Requires openmetrics_endpoint in the check config.

from datadog_checks.base import OpenMetricsBaseCheckV2, ConfigurationError

class CustomOpenMetricsCheck(OpenMetricsBaseCheckV2):
    __NAMESPACE__ = "my_namespace"

    def __init__(self, name, init_config, instances):
        super(CustomOpenMetricsCheck, self).__init__(name, init_config, instances)
        self.metrics_map = {
            'prom_metric_name': 'datadog.metric.name',
        }

    def get_default_config(self):
        return {'metrics': self.metrics_map}

    def check(self, instance):
        endpoint = instance.get('openmetrics_endpoint')
        if not endpoint:
            raise ConfigurationError("Missing 'openmetrics_endpoint'")
        super().check(instance)

Integrations & Developer Platform

  • Tiles & Dashboards: Official integrations must include out-of-the-box dashboards and telemetry logic. API integrations require OAuth 2.0.
  • Platform Separation: Agent-based integrations collect from local hosts, whereas API-based integrations ingest directly via Datadog REST endpoints.

Diagnostics and Troubleshooting

  • Check agent status: datadog-agent status
  • Subprocess execution: Never use Python's native subprocess module due to the Agent's Go-runtime multithreading constraints. Always use get_subprocess_output() from datadog_checks.base.utils.subprocess_output.
from datadog_checks.base.utils.subprocess_output import get_subprocess_output
out, err, retcode = get_subprocess_output(["ls", "."], self.log, raise_on_empty_output=True)

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.