惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
云风的 BLOG
云风的 BLOG
博客园 - 聂微东
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
P
Proofpoint News Feed
GbyAI
GbyAI
WordPress大学
WordPress大学
NISL@THU
NISL@THU
V
Vulnerabilities – Threatpost
T
The Exploit Database - CXSecurity.com
D
DataBreaches.Net
F
Full Disclosure
Recent Commits to openclaw:main
Recent Commits to openclaw:main
V
Visual Studio Blog
Last Week in AI
Last Week in AI
L
LangChain Blog
AWS News Blog
AWS News Blog
Martin Fowler
Martin Fowler
V
V2EX
The Hacker News
The Hacker News
Scott Helme
Scott Helme
T
Troy Hunt's Blog
G
GRAHAM CLULEY
L
Lohrmann on Cybersecurity
Cloudbric
Cloudbric
C
Cyber Attacks, Cyber Crime and Cyber Security
O
OpenAI News
月光博客
月光博客
博客园_首页
Blog — PlanetScale
Blog — PlanetScale
B
Blog RSS Feed
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
G
Google Developers Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
IT之家
IT之家
C
Cisco Blogs
Google DeepMind News
Google DeepMind News
T
Tenable Blog
Jina AI
Jina AI
T
Tor Project blog
The Cloudflare Blog
Y
Y Combinator Blog
Spread Privacy
Spread Privacy
L
LINUX DO - 热门话题
Cyberwarzone
Cyberwarzone
Microsoft Security Blog
Microsoft Security Blog
Stack Overflow Blog
Stack Overflow Blog
A
Arctic Wolf

Datadog | The Monitor blog

Introducing our open source AI-native SAST Instrument and monitor Boomi integration flows with OpenTelemetry and Datadog Not all index scans are equal: How we cut query latency by over 99% Platform engineering metrics: What to measure and what to ignore Integrate Recorded Future threat intelligence with Datadog Cloud SIEM CI/CD security: threat modeling using a MITRE-style threat matrix CI/CD security: How to secure your GitHub ecosystem Ingress NGINX is EOL: A practical guide for migrating to Kubernetes Gateway API Operating agentic AI with Amazon Bedrock AgentCore and Datadog LLM Observability: Lessons from NTT DATA Introducing the Datadog Code Security MCP Capture and analyze custom heatmaps in Session Replay Understand session replays faster with AI summaries and smart chapters Monitor ClickHouse query performance with Datadog Database Monitoring How we designed empathetic alert sounds for on-call engineers Search and act across Datadog to resolve issues faster with Bits Assistant Measure the business impact of every product change with Datadog Experiments Analyzing round trip query latency Configuring JavaScript caches for better performance Introducing Bits AI Dev Agent for Code Security Datadog achieves ISO 42001 certification for responsible AI Monitor Nutanix clusters, hosts, and VMs with Datadog Monitor Juniper Mist in Datadog A new Host Map for modern infrastructure Annotate traces to improve LLM quality with Datadog LLM Observability What’s new in Cloud SIEM: AI-powered investigations, enhanced threat intelligence, and scalable security operations Explore Kubernetes with native OpenTelemetry data Monitor Oracle Fusion Cloud Applications with Datadog Announcing the Datadog Terraform provider v4.0.0 Scaling Kubernetes workloads on custom metrics How to design cloud environments for AI-powered threat analysis Monitor Aruba Central in Datadog How we centralize and remediate risks with Datadog Case Management Accelerate incident response with Datadog and ServiceNow Monitor your application and network load balancer logs Understanding Karpenter architecture for Kubernetes autoscaling Tools for collecting metrics and logs from Karpenter Monitor Karpenter with Datadog What your product data is actually saying Key metrics for monitoring Karpenter Securing Datadog’s platform in the AI age: The role of observability data Four ways engineering teams use the Datadog MCP Server to power AI agents Approaching your observability migration with the right mindset Meet the new Bits AI SRE: Deeper reasoning, twice as fast Key learnings from the 2026 State of DevSecOps study Use plain English to query your multi-cloud infrastructure in Resource Catalog Simplifying troubleshooting across the user journey with Datadog Synthetic Monitoring Protect your OCI resources with Datadog Cloud Security This Month in Datadog - February 2026 Amazon EC2 security: How misconfigured and public AMIs expand your cloud attack surface Enable end-to-end visibility into your Java apps with a single command Measure and improve mobile app startup performance with Datadog RUM Evaluating our AI Guard application to improve quality and control cost Identify untested code across every level of your codebase Make use of guardrail metrics and stop babysitting your releases Monitor Versa Networks SD-WAN performance in Datadog Improve performance and reliability with APM Recommendations Remediate transitive vulnerabilities faster with Datadog Software Composition Analysis Generate audit-ready vulnerability and compliance reports with Datadog Sheets Monitor Fortinet FortiManager performance in Datadog Improve test coverage across codebases with Datadog Code Coverage Move fast, don’t break things: Consistent testing standards at scale Enrich logs with ServiceNow CMDB context before routing to any SIEM or logging tool Monitor Lustre with Datadog Make faster, better product decisions with Datadog Product Analytics Surface and remediate runtime posture issues with Workload Protection Findings Protect agentic AI applications with Datadog AI Guard How to optimize JavaScript code with CSS Trace Google Pub/Sub workloads in Cloud Run with Datadog Detect human names in logs with ML in Sensitive Data Scanner How we cut our NLQ agent debugging time from hours to minutes with LLM Observability Debug PostgreSQL query latency faster with EXPLAIN ANALYZE in Datadog Database Monitoring Datadog acquires Propolis Unify and correlate frontend and backend data with retention filters Scale compliance across global frameworks with Datadog Cloud Security Monitor Arista VeloCloud SD-WAN performance with Datadog Building reliable dashboard agents with Datadog LLM Observability Simplify log collection and aggregation for MSSPs with Datadog Observability Pipelines Mitigation for Node.js denial-of-service vulnerability affecting Datadog APM Automate flaky test fixes with the Bits AI Dev Agent and Test Optimization How we built an AI SRE agent that investigates like a team of engineers Datadog integrations 2025 recap: Observability for AI, security, and hybrid cloud Design effective executive dashboards with Datadog Implement dbt data quality checks with dbt-expectations Bring faster visibility into AWS Lambda functions with remote instrumentation Troubleshoot faster with the GitLab Source Code integration in Datadog How Cambia Health Solutions saved $30,000 monthly with Cloud Cost Management and the Datadog Resource Catalog Normalize any logs for Cloud SIEM with Datadog's OCSF processor Optimizing Datadog at scale: Cost-efficient observability at Zendesk Detect, diagnose, and resolve network issues easily with CNM Network Health Connect engineering errors to user impact in early-stage products Cilium configuration for Kubernetes operations at scale Designing feedback loops for progressive delivery Ship features faster and safer with Datadog Feature Flags Choosing the right OpenTelemetry Collector distribution Route your monitor alerts with Datadog monitor notification rules Automate Cloud SIEM investigations with Bits AI Security Analyst Cloud threat detection: How to identify risky activity across control and data planes Collecting Kafka performance metrics Monitoring Kafka with Datadog Monitoring Kafka performance metrics
I use GitHub Actions for Datadog’s Software Catalog, and you should, too
Mike Stemle · 2023-07-14 · via Datadog | The Monitor blog

Today’s guest blog is by Mike Stemle, a software engineer and Principal Architect for the Arc XP division of the Washington Post. In his role, Mike focuses on application security and large-scale architecture.

Anybody who works with me knows that I love the Datadog Software Catalog. Software Catalog is great for our teams because it puts service ownership and production support information right next to the metrics we use to detect outages and performance issues. Having all that information all in one place helps shift production support left, allowing us to proactively detect, mitigate, and resolve issues before they even make it to production—much in the same way we have seen with quality and security in the last 15 years.

But to get this full benefit from Software Catalog, you need to flesh out your organization’s service definitions. During incidents, it’s the definitions in Software Catalog that give you the most useful information, such as which team a service belongs to, where its documentation lives, and what repositories make up each service’s code.

service-catalog-1

So how do you update your service definitions with all this information? You have a number of options. You can use the GitHub integration to feed metadata to Datadog via your GitHub repository. You can also manage service definitions through Terraform. Or you can manually supply definition details to the Service Definition API by using any HTTP client, such as the Node Fetch API.

service-catalog-2

For me, though, the best way to configure your service definitions is to use GitHub Actions to send your information to Datadog Software Catalog. This method uses an open source custom action I authored, called the Datadog Service Catalog Metadata Provider (DSCMP), which is available in the GitHub Marketplace. What’s great about the DSCMP is that it allows you to supply service details to Datadog without giving any third parties special access or permissions to your GitHub organization, and without needing to add another GitHub integration to monitor (did I mention I was involved in AppSec?). Using this custom action is easy, and as a bonus, it can help you promote best practices in your organization through technical controls.

For the rest of this article, I will cover how to use GitHub Actions together with the DSCMP, but first, the obligatory disclaimers: This article represents my own expertise and lived experience. In no way should this article be construed as conveying thoughts or opinions held by my employer—The Washington Post—or any of its related entities. Nor should this article be seen as speaking for Datadog, GitHub, or any of their related entities.

GitHub Actions: automated workflows, actions, and triggers

GitHub Actions is sometimes assumed to be a CI/CD platform only, but it has other uses. It can be used to automate virtually any set of tasks whenever a specified event occurs (such as a code push) in your GitHub repository. For example, I’ve also used GitHub Actions for code scanning with CodeQL, and for automated documentation generation and publication with GitHub Pages, Jekyll, and JSDoc. Sending service metadata to Datadog on a code push, therefore, is perfectly viable.

In GitHub Actions, the tasks you want to automate are defined in YAML files called workflows, saved in the .github/workflows directory in your repository. These workflows start with a trigger and include steps that point to predefined actions—such as the DSCMP. With the DSCMP, the code is already written for you, but you can also author your own custom actions to incorporate into your workflows or make available to others. If you’re interested in learning the basics about how to automate workflows with GitHub Actions, there are many articles and tutorials available (such as this one, this one, this one, or this one).

GitHub Actions secrets

Another thing that’s important to remember, if you want to use the DSCMP as your metadata provider, is that you’ll have to create an API and application key in Datadog. You’ll also want to store those keys as encrypted secrets in GitHub Actions. Doing so will allow the custom action to transmit your information to Datadog when the action is run.

Since I’m an AppSec-type person, I can’t help myself but to give you advice on secrets while we’re on this topic:

  1. Never commit any file to any git repository with a secret or introduce secrets into your workflows or code files.

  2. Use GitHub Secrets management for your secrets. Here’s GitHub’s documentation on Secrets in Actions. You’ll want to read this and understand it well.

(For more information about secrets in GitHub Actions, you can read the documentation here.)

Now that we’ve gotten these basics out of the way, let’s get nerdy.

Using the custom action

Because GitHub can already access the code for DSCMP, to use it, you simply need to point to it in your workflow YAML file with the following key-value pairs:

  • name: Datadog Service Catalog Metadata Provider

  • uses: arcxp/datadog-service-catalog-metadata-provider@v1

The workflow file itself can be very simple. Don’t believe me? Check this one out:

---

name: Datadog Service Catalog Metadata Provider

on:

push:

branches:

- main

workflow_dispatch:

jobs:

deploy:

runs-on: ubuntu-latest

steps:

- uses: actions/checkout@v2

- uses: arcxp/datadog-service-catalog-metadata-provider@v1

with:

datadog-hostname: api.us5.datadoghq.com

datadog-key: ${{ secrets.DATADOG_KEY }}

datadog-app-key: ${{ secrets.DATADOG_APP_KEY }}

service-name: my-service

team: my-team

email: my-team@sirius-cybernetics-corporation.com

This is a fully functional workflow that will tell Datadog information about your service. It is triggered by a push to the main branch, or manually by clicking on the “Run workflow” button on the repository’s Actions tab (thanks to the workflow_dispatch key). Once triggered, this workflow will tell Datadog that your service is called my-service and that it is maintained by a team called my-team. That team can be reached at my-team@sirius-cybernetics-corporation.com if something goes wrong. Having a team name and email address associated with a service might not seem like much information, but it is highly useful for support teams during incidents. You can also see that this workflow is instructing the action to use the us5 host for Datadog (information required by the Datadog API), and it provides an API key as well as an application key.

But you might also want to add other useful information to this YAML file, such as a Jira board URL, a runbook document, and a PagerDuty integration URL. That’s not hard to do. Just look at this example:

---

name: Datadog Service Catalog Metadata Provider

on:

push:

branches:

- main

workflow_dispatch:

jobs:

deploy:

runs-on: ubuntu-latest

steps:

- uses: actions/checkout@v2

- uses: arcxp/datadog-service-catalog-metadata-provider@v1

with:

datadog-hostname: api.us5.datadoghq.com

datadog-key: ${{ secrets.DATADOG_KEY }}

datadog-app-key: ${{ secrets.DATADOG_APP_KEY }}

service-name: my-service

team: my-team

email: my-team@sirius-cybernetics-corporation.com

# Adding Jira, Runbook, and PagerDuty

docs: |

- name: Jira board

url: https://somelegitorg.validatlassiancloudurl.com/ blah/blah

provider: jira

links: |

- name: Downtime Runbook

url: https://totally-normal-url.com/runbooks/downtime

type: runbook

integrations: |

pagerduty: https://valid-pagerduty-url-here.com

It’s that easy. By using this GitHub Action, teams can now push their information to the Datadog Software Catalog without needing to approve any integrations. You can find the full schema for this action here.

To be clear, Datadog does already give you all the tools you need to use the Software Catalog product. Datadog already has a GitHub integration that can grab a simple YAML file that has this info. Datadog also already has an API that lets you send this info to Software Catalog with custom automation. Like many of you, though, I have constraints I’m operating under, which means I have had to innovate! If you’re using GitOps for deployments, for example, more integrations and webhooks can be concerning. By using this GitHub Action, folks can now push their information to the Datadog Software Catalog without needing to approve any integrations. The custom action also allows you to have full control and visibility over this process, including full control over when this information is sent to Datadog.

Use of the pipe character in YAML

Those who are familiar with YAML syntax may have noticed that within the workflow, nodes for docs, links, and integrations look a little unusual: They have a multi-line string pipe character (“|”) after the colon. This is because in GitHub Actions, all of the inputs are constrained to being scalar. In order to work around this limitation, the custom action takes these values in as a multi-line string and then parses them as YAML. It’s a little weird, but it gets the job done.

Organizational controls

A major advantage of the DSCMP is that it lets you supply service metadata to Datadog without opening your repository to any third parties. However, another benefit of using this custom action is that it provides light-touch technical controls to enforce policies that define which metadata must be included in your organization’s service definitions. For example, with the help of the DSCMP, you can set controls such as “everybody must have a tag called division that matches one of the division names within the organization,” or “every service running in production must have a runbook link.”

To set and enforce these organizational controls, you can include them in a file called the Organization Rules file (or Org Rules file), specifically named service-catalog-rules.yml. This file is saved to the directory your-organization-name/.github/. The DSCMP by default will look for the Org Rules in this location and enforce the rules defined there.

To support this function, I made a new YAML schema that has three primary components: rules, selection criteria, and requirements. Rules contain a name, a list of selection criteria, and a list of requirements. The selection criteria are the various fields which make a given rule apply to a repository’s use of the DSCMP. Requirements are the constraints that a repository’s DSCMP workflow must adhere to if the selection criteria apply to the repository.

Before we move on to some examples of how to enforce organizational controls, I want to mention a few “universal truths” about policy enforcement:

  1. There are always going to be exceptions

  2. If the controls aren’t centrally located and auditable, they can sometimes mutate into a gap rather than a control. (To be clear, this problem can happen in all cases, but centrally locating and auditing them is helpful in preventing mutations.)

  3. In order for organizational controls to be helpful:

    • The control must be visible.

    • Version control is a must.

    • Exceptions must be supportable.

    • In the event of non-compliance, the error message must be clear about what needs to change.

Finally, remember that using an org rules file is optional. If a workflow cannot find such a file, it will allow the DSCMP workflow to execute without restrictions.

Now, let’s dig into some examples.

Example 1: Requiring a “division” tag

The following Org Rules file, stored in sirius-cybernetics-corporation/.github/service-catalog-rules.yml, enforces a tagging requirement for all DSCMP workflows within a GitHub organization named Sirius Cybernetics Corporation:

---

org: sirius-cybernetics-corporation

rules:

- name: Division Tag Requirement

selection: all

requirements:

tags:

division: ANY

When this Org Rule file is in place, if you try to run the first DSCMP workflow above—which doesn’t include a division tag—you will see an error reporting that it failed to satisfy the “Division Tag Requirement.” To meet this requirement in the new rule, then, you would need to modify the DSCMP workflow to include tags and division keys with a value, as follows:

---

name: Datadog Service Catalog Metadata Provider

on:

push:

branches:

- main

workflow_dispatch:

jobs:

deploy:

runs-on: ubuntu-latest

steps:

- uses: actions/checkout@v2

- uses: arcxp/datadog-service-catalog-metadata-provider@v1

with:

datadog-hostname: api.us5.datadoghq.com

datadog-key: ${{ secrets.DATADOG_KEY }}

datadog-app-key: ${{ secrets.DATADOG_APP_KEY }}

service-name: my-service

team: my-team

email: my-team@sirius-cybernetics-corporation.com

tags: |

- division:complaints

Now we have identified this service as belonging to the Complaints division of the Sirius Cybernetics Corporation.

Example 2: Constraining the “division” tag

Let’s say that we get the Org Rules file up and running, and folks start adding their division tag. The following week, however, someone makes a typo in the workflow file and specifies the “compliants” division—which is not a real division! To prevent this from happening again, we can iterate on the original Org Rules file to limit which values people can put into that division tag, as follows:

---

org: sirius-cybernetics-corporation

rules:

- name: Division Tag Requirement

selection: all

requirements:

tags:

division:

- complaints

- marketing

With this new version, we have restricted the division tag values to only complaints and marketing. Any other value will fail to satisfy this rule.

Example 3: Selective requirements within an organization

Let’s say the time comes for the services in the marketing division to require an issue tracker. We can configure the Org Rules file as follows to include a second rule requiring a Jira board for only the marketing division:

---

org: sirius-cybernetics-corporation

rules:

- name: Division Tag Requirement

selection: all

requirements:

tags:

division:

- complaints

- marketing

- name: Marketing Jira Board Requirement

selection:

tags:

division: marketing

requirements:

docs:

provider: jira

There, now we have two rules: one for requiring a division tag, and one which will require all DSCMP workflows with a specified division of marketing to also have at least one docs entry with a provider value of jira. Keep in mind the following guidelines and restrictions regarding organizational controls:

  • Lowercase is preferred. For any of the fields outside of name, lowercase values are likely to work more consistently as expected.

  • The Org Rules file must exist within the same org as the repository that hosts the DSCMP workflows.

  • YAML wants you to use spaces around colons, but Datadog uses tags with key:value syntax. If you notice this inconsistency, don’t worry: spaces are automatically handled by the DSCMP.

Wrap-up

I’ll conclude by restating what I think is the value-add of this custom GitHub Actions I’ve been talking about: Datadog’s Software Catalog offering has the potential to substantially improve quality of life during production support. If a service goes down, this product can help them bring it back up more quickly.

But for your teams to get the most out of this Datadog product, you need to find a way to supply metadata about your organization’s services to Software Catalog. I’ve authored the open source GitHub Actions module Datadog Service Catalog Metadata Provider for this very purpose. DSCMP makes life easier by facilitating an easy setup that can be owned by the same engineers who stand to benefit from the quality-of-life improvements introduced by Software Catalog. It also helps ensure that organizations can establish and enforce, with technical controls, internal policies that formalize operational and support expectations. It does all this within the spaces that developers already use, with tools they already know, and without exposing their GitHub organization to any additional integrations.

And yes, as the title of this blog post says, I’m already using the DSCMP, as are several teams I work with. I hope you find it as useful as we do.