EOL Risk Scores
in your Datadog account
What it does
A small Python exporter pushes four metric families into your Datadog account. Every point is tagged with the product (endoflife.ai slug), its letter grade, its lifecycle label and date, its lifecycle phase (approaching, past or none) and whether an active CISA KEV entry applies.
The dashboard. The integration tile includes the EOL Risk Overview dashboard: products past end of life with an active CISA KEV entry, the nearest end-of-life deadlines, products by risk grade and, once the stack scan has run, your riskiest hosts.
The stack scan. dd_stack_scan.py reads your host inventory from Datadog (host names, host tags and the apps the Datadog Agent detected), matches it against endoflife.ai's products on your own machine, and pushes endoflife.stack_risk_score per host and product back to Datadog. That turns a catalog-wide reference into a view of what you actually run.
Set it up
Python 3.8 or later, standard library only: nothing to install. The steps below come from the exporter's README.
Step 1
In Datadog, open Integrations, search endoflife and install the endoflife.ai tile (app.datadoghq.com/integrations/endoflife, login required).
Step 2
Get the exporter from the public repository github.com/endoflife-ai/datadog-eol-metrics (clone it or download dd_push.py and dd_stack_scan.py).
Step 3
In Datadog, Organization Settings → API Keys: create or copy an API key. Set the environment variables (Windows shown; use export elsewhere). DD_SITE is optional and defaults to datadoghq.com; set it to your account's site if different: datadoghq.eu, us3.datadoghq.com, us5.datadoghq.com, ap1.datadoghq.com, ddog-gov.com.
setx DD_API_KEY "your-datadog-api-key" setx DD_SITE "datadoghq.com"
Step 4
Push the catalog scores, then confirm in Metrics → Summary (search endoflife.risk_score). Schedule the push daily (cron, Task Scheduler, a CI job): endoflife.ai rebuilds the scores every day.
python dd_push.py
Step 5
Optional: score the software on your own hosts. The stack scan reads the Datadog Hosts API, which needs an application key as well (Organization Settings → Application Keys). DD_APP_KEY is needed only for this step.
setx DD_APP_KEY "your-datadog-application-key" python dd_stack_scan.py --sample # try the matching logic on synthetic hosts; pushes nothing to Datadog python dd_stack_scan.py # scan your real hosts and push the matches to Datadog
If the scan finds no matches, the product names your hosts report may need entries in the script's alias map; the script says so when it happens.
Monitors. The repository's assets/monitors/ folder holds four monitor templates: critical EOL risk, end of life within 30 days, host running end-of-life software, and KEV-exposed product. To create one, open Monitors → New Monitor → Import from JSON and paste the object under the file's definition key.
What data goes where
The exporter reads one public file, endoflife.ai/scores.json, rebuilt daily. From the repository's README:
The exporter downloads endoflife.ai's public scores file and identifies itself by user agent (endoflife-datadog-exporter/<version>), so endoflife.ai can count active installations in aggregate. Nothing else is sent to endoflife.ai: your Datadog API and application keys go only to Datadog, and the stack scan reads your host inventory from Datadog, matches it locally and pushes the results only to Datadog. There is no install ID and no telemetry endpoint.
github.com/endoflife-ai/datadog-eol-metrics, Data collection
The stack scan's user agent is endoflife-datadog-exporter-stackscan/<version>. We count fetches of the scores file per user agent, per day, in aggregate; no install ID exists to count.
Free, and what the paid API adds
The integration is free: the tile, the exporter and the scores file cost nothing, and no endoflife.ai key is needed. The paid developer API is for teams that check stacks and SBOMs programmatically at volume: /v1/batch scores a list of products in one call and /v1/sbom resolves and scores a CycloneDX or SPDX document. Plans start at USD 89 a month (Starter, 10,000 requests per day); see the API page for every tier.
FAQ
Does the endoflife.ai integration for Datadog cost anything?
No. The integration tile, the exporter and the public scores file it reads are free, and no endoflife.ai account or key is needed.
What does endoflife.ai learn about my Datadog account?
Nothing beyond a download of the public scores file. The exporter identifies itself by user agent so we can count installations in aggregate; there is no install ID. Your Datadog API and application keys go only to Datadog, and the stack scan matches your host inventory on your own machine and pushes the results only to Datadog.
Which Datadog sites does it support?
Set DD_SITE to your account's site: datadoghq.com (the default), datadoghq.eu, us3.datadoghq.com, us5.datadoghq.com, ap1.datadoghq.com or ddog-gov.com.
Why does the stack scan need an application key?
The stack scan reads your host list from the Datadog Hosts API, which needs both an API key and an application key. The catalog push (dd_push.py) needs only DD_API_KEY.
How often should the exporter run?
Once a day. endoflife.ai rebuilds scores.json daily, so a daily scheduled run (cron, Task Scheduler or a CI job) keeps the metrics current.
Is this integration made by Datadog?
No. It is built and supported by endoflife.ai and is available in the Datadog Integrations catalog. endoflife.ai is not affiliated with or endorsed by Datadog, Inc. Support: [email protected].
Not on Datadog?
The same data runs our Dynatrace exporter, Grafana dashboard, Zabbix template, Nagios check and the developer API.
All integrations Dynatrace Risk Score methodology