Build1 distinct publisher3 min readPublished
A dev.to walkthrough sells embedded metrics as zero overhead because the second API call disappears. The stringify, the ingested bytes and the Insights scans do not, and one missing field drops the metric silently.
The Engineer · Build desk

Compiled by The EngineerSomething wrong?How this is made
On the request path, an EMF line costs a JSON.stringify and a write to stdout [15]. That really is cheaper than the signed round trip the article is comparing against, which it says adds network hops and milliseconds to every inference [2]. The work changes owner rather than disappearing: the log agent ships the bytes, CloudWatch ingests them, and the extraction happens downstream [3].
The article prices three of the consequences of that move and skips one. It tells you Logs Insights scans the entire log volume at $0.005 per GB [11], that log groups never expire unless you set retention [12], and that 1-second resolution runs about three times the cost of 1-minute [13]. What it does not price is ingesting the extra bytes, which is where per-request line count lands. Take 300 requests per second, inside the article's own "hundreds per second" figure [17]: one line per request is 25.92 million lines a day [20]. Scanning a terabyte of that in Insights is $5.12 per query [21], and you will run more than one, because logs are where you go when a metric looks wrong.
Now read the example block against the spec printed above it. The CloudWatchMetrics array declares a single MetricName, InferenceLatency [6]. The prose immediately below calls InferenceLatency, TokenCount and Success the measurements [7]. Extraction follows the declaration, so as printed you get one metric and two ordinary log fields, and Success is a boolean rather than a number in any case [22]. Copy the block expecting three series and you get one, with nothing raised to tell you why [8]. The author's mitigation for that class of error is a unit test on the JSON, which is the correct instinct applied to a very quiet failure [9].
The final section attributes diagnostics_channel to Node.js 22 and imports createChannel from it [18][19]. Check both against the exports in your own runtime before you make the formatter depend on them; the excerpt stops mid-file [19]. The pattern holds regardless, because the reason to broadcast on a channel is to keep the formatter out of the inference call.
In my context I would take EMF for the standing series that the source enumerates per request, latency, token count and error, and keep PutMetricData for the handful of numbers that must exist when the log pipeline is the thing that broke [17]. For the "zero overhead" claim to transfer to your service, three things have to be true: you were already emitting one structured line per request, you set a retention policy instead of accepting the default [12], and you stop querying Insights for numbers you have already extracted [11]. Add a log line purely to carry a metric and you have moved the charge from the metrics line item to the logs line item, which is often worth doing and is not the same as removing it [16].
Ranked by verification strength, evidence, and original report placement.
Embedded Metrics Format embeds metric data directly inside a CloudWatch Logs event; CloudWatch reads the numbers, extracts them, and stores them as regular CloudWatch metrics without any separate API call.
An EMF log entry is a JSON object with a top-level @aws key that must contain Timestamp in epoch milliseconds, a CloudWatchMetrics array describing each metric, and a Namespace that groups related metrics.
All other top-level keys in the EMF object become dimensions (labels) or measurements (numeric values) for the metric.
The article's example EMF line declares Namespace MyAIService, MetricName InferenceLatency and Dimensions [["ModelName", "Endpoint"]], and carries ModelName gpt-4-mini, Endpoint text-completion, InferenceLatency 124, TokenCount 57 and Success true.
The article states that InferenceLatency, TokenCount and Success are the measurements in that example, and that ModelName and Endpoint are the dimensions.
If Timestamp or Namespace is omitted, CloudWatch silently drops the EMF data: the log still appears in CloudWatch Logs but no metric shows up.
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · August 31, 2026
Follow any of these and your For You feed starts watching them — no settings page required.
build
EventBridge Pipes as agent glue: the retries move to config, the three-step Lambda stays1 distinct publisher
build
A recorded cutoff and an operation key make the second delete delivery a no-op1 distinct publisher
build
Force the tool call, then hand Lightsail a long-lived key1 distinct publisher
build
CSA's 2026 threat list is a flat line, so ask which threats a config snapshot can prove1 distinct publisher
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
One tutorial, nothing cited behind it
Every operational and pricing statement here traces back to a single dev.to post, and that post cites nothing — no AWS pricing page, no EMF specification, no release note for the Node.js claim. Where the text can be checked against itself it slips: the worked example declares one metric while the prose names three, and the code excerpt stops mid-explanation. What does hold is the JSON shape and the silent-drop failure mode, which dev.to states plainly and consistently.
No deployments in view
This is a walkthrough, not a report on anyone's production system. Our coverage shows no service running this pattern, no volume figures from a real workload, no release, no benchmark — the "hundreds of requests per second" is a scenario the author sets up, not a system he measured.
"Zero overhead" with a cost section attached
The headline sells zero overhead and the benefits list says you pay only for storage you already have. Then the same author bills you: per-GB query scans, retention that never lapses, triple price for one-second resolution. Meanwhile the sample code stringifies an object and writes to stdout inside the inference path, which is smaller overhead than an HTTP call but is not zero. The gap is not fabrication — it is a promise the body of the piece quietly retracts.
Attention-shaped, not vendor-shaped
No sponsor, no product to sell, no disclosed relationship with AWS anywhere in the piece — the pull is the ordinary one of developer-platform publishing, where "Zero-Overhead" and "self-monitoring powerhouse" travel further than "cheaper on one axis, dearer on another." That pressure shows up in the ordering: the superlatives lead, the invoice follows.
Sure what was said, unsure it is right
We have the text in hand, so what this piece claims and recommends is not in doubt, and the internal contradictions are things anyone can see by reading it twice. What we cannot do from here is confirm the service behaviour or the prices, because there is exactly one publisher and it references nothing — and the excerpt cuts off inside the code discussion, which is where the remaining detail would have been.