Skip to content

Commit c8b0088

Browse files
danielpaulusclaude
andcommitted
docs(traceroute): add canonical frontmatter, merge main, regenerate sitemap
Bring the branch up to date with main (it was ~1485 commits behind, predating the sitemap tooling + frontmatter check), add the required canonical URLs to the three Traceroute monitor pages, and regenerate sitemap.xml to include them. Fixes the static-docs-checks failure. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013AYwkvoaANQTH5dGStbBj2
1 parent d926b73 commit c8b0088

4 files changed

Lines changed: 32 additions & 20 deletions

File tree

constructs/traceroute-monitor.mdx

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
title: 'TracerouteMonitor Construct'
33
description: 'Learn how to configure Traceroute monitors with the Checkly CLI.'
44
sidebarTitle: 'Traceroute Monitor'
5+
canonical: 'https://www.checklyhq.com/docs/constructs/traceroute-monitor/'
56
---
67

78
import GeneralMonitorOptionsTable from '/snippets/general-monitor-options-table.mdx';
@@ -59,7 +60,7 @@ new TracerouteMonitor('traceroute-db', {
5960
timeout: 15,
6061
assertions: [
6162
TracerouteAssertionBuilder.hopCount().lessThan(15),
62-
TracerouteAssertionBuilder.responseTime().avg().lessThan(50),
63+
TracerouteAssertionBuilder.responseTime('avg').lessThan(50),
6364
TracerouteAssertionBuilder.packetLoss().lessThan(5),
6465
],
6566
},
@@ -117,7 +118,7 @@ new TracerouteMonitor('traceroute-monitor', {
117118
|-----------|------|----------|---------|-------------|
118119
| `url` | `string` || - | Target hostname or IP address. Do not include a scheme or port |
119120
| `protocol` | `string` || `'TCP'` | Probe protocol: `'TCP'` \| `'UDP'` \| `'ICMP'` \| `'SCTP'` |
120-
| `port` | `number` || `443` | Destination port (1–65535). Defaults to `443` for all non-ICMP protocols. For UDP/SCTP, set `port: 33434` explicitly — a high closed port so the destination returns ICMP Unreachable to confirm arrival. Ignored when `protocol` is `'ICMP'` |
121+
| `port` | `number` || `443` (TCP) / `33434` (UDP, SCTP) | Destination port (1–65535). Defaults to `443` for TCP and to `33434` — a high, typically closed port — for UDP/SCTP, so the destination returns ICMP Destination Unreachable to confirm arrival. Ignored (and not sent) when `protocol` is `'ICMP'` |
121122
| `ipFamily` | `string` || `'IPv4'` | IP family: `'IPv4'` \| `'IPv6'` |
122123
| `maxHops` | `number` || `30` | Maximum hops to probe (1–64) |
123124
| `maxUnknownHops` | `number` || `15` | Maximum consecutive unresponsive hops before stopping (1–30) |
@@ -163,7 +164,7 @@ new TracerouteMonitor("traceroute-latency-tiers", {
163164

164165
Assertions for Traceroute monitors are defined using the `TracerouteAssertionBuilder`. The following sources are available:
165166

166-
- `responseTime(property?)`: Validate RTT at the final responding hop. Defaults to the `avg` property. Use `.avg()`, `.min()`, `.max()`, or `.stdDev()` to target a specific statistic. This assertion fails when `destinationReached` is `false`
167+
- `responseTime(property?)`: Validate RTT at the final responding hop. Pass `'avg'`, `'min'`, `'max'`, or `'stdDev'` as the argument to target a specific statistic; when omitted, it defaults to `'avg'`. This assertion fails when `destinationReached` is `false`
167168
- `hopCount()`: Assert against the total number of hops recorded in the trace
168169
- `packetLoss()`: Assert against the packet loss percentage at the last recorded hop (0–100)
169170

@@ -180,7 +181,7 @@ TracerouteAssertionBuilder.responseTime().lessThan(100)
180181
- Assert against a specific RTT property:
181182

182183
```ts
183-
TracerouteAssertionBuilder.responseTime().max().lessThan(200)
184+
TracerouteAssertionBuilder.responseTime('max').lessThan(200)
184185
// Equivalent to:
185186
{ source: 'RESPONSE_TIME', property: 'max', comparison: 'LESS_THAN', target: '200' }
186187
```

detect/uptime-monitoring/traceroute-monitors/configuration.mdx

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
title: 'Traceroute Monitor Configuration'
33
description: 'Configure your Traceroute monitor to map network paths and detect routing issues, latency, and packet loss.'
44
sidebarTitle: 'Configuration'
5+
canonical: 'https://www.checklyhq.com/docs/detect/uptime-monitoring/traceroute-monitors/configuration/'
56
---
67

78
<Tip>
@@ -46,22 +47,22 @@ Response-time thresholds apply to the **final-hop average RTT**, not the total c
4647

4748
### JSON Response Schema
4849

49-
The Traceroute response is available as structured JSON. All responses share this format:
50+
The Traceroute response is available as structured JSON. These are the key fields (a few internal bookkeeping fields are omitted here, and fields marked as omitted are absent from the JSON rather than empty):
5051

5152
```json
5253
{
5354
"hostname": "api.example.com", // Target hostname or IP as configured
5455
"resolvedIp": "93.184.216.34", // IP address used for the trace
55-
"port": 443, // Destination port; always present (0 for ICMP probes)
56+
"port": 443, // Destination port; for ICMP probes this reports the unused fallback 443
5657
"ipFamily": "IPv4", // "IPv4" or "IPv6"
5758
"maxHops": 30, // Configured max hops
5859
"totalHops": 12, // Number of hops actually recorded
5960
"destinationReached": true, // Whether the destination responded
6061
"truncationReason": "destinationReached",// Why the trace stopped:
6162
// "destinationReached" | "maxHops" | "maxUnknownHops" | "timeout"
6263
"probeProtocol": "TCP", // Probe protocol: "TCP" | "UDP" | "ICMP" | "SCTP"
63-
"finalHopLatency": { // RTT stats for the last responding hop
64-
"avg": 12.34, // Omitted entirely (field absent) when destination is not reached
64+
"finalHopLatency": { // RTT stats for the last responding hop (the whole object is omitted when the destination is not reached)
65+
"avg": 12.34,
6566
"min": 11.80,
6667
"max": 13.10,
6768
"stdDev": 0.42
@@ -70,22 +71,22 @@ The Traceroute response is available as structured JSON. All responses share thi
7071
{
7172
"hop_number": 1,
7273
"main_ip": "10.0.0.1", // Primary IP observed at this hop
73-
"main_host": "router.isp.net", // Reverse-DNS hostname (empty when PTR lookup is off or lookup fails)
74+
"main_host": "router.isp.net", // Reverse-DNS hostname (omitted when PTR lookup is off or the lookup fails)
7475
"sent": 3, // Probe packets sent to this hop
7576
"received": 3, // Replies received from this hop
7677
"loss_percentage": 0.0, // Packet loss at this hop
77-
"rtt": {
78+
"rtt": { // RTT stats (omitted when the hop never replied)
7879
"last_ms": 1.23, // RTT of the most recent probe
7980
"avg_ms": 1.10, // Average RTT across all probes
8081
"best_ms": 0.95, // Minimum RTT
8182
"worst_ms": 1.23, // Maximum RTT
8283
"stddev_ms": 0.12 // Standard deviation
8384
},
84-
"asn": 15169, // Autonomous System Number (0 if unknown)
85-
"asn_org": "GOOGLE", // AS organization name
86-
"country": "US", // Two-letter country code
87-
"aws_region": "", // AWS region name (if hop is in AWS)
88-
"aws_service": "" // AWS service name (if hop is in AWS)
85+
"asn": 15169, // Autonomous System Number (omitted when unknown)
86+
"asn_org": "GOOGLE", // AS organization name (omitted when unknown)
87+
"country": "US", // Two-letter country code (omitted when unknown)
88+
"aws_region": "us-east-1", // AWS region — only present when the hop is inside AWS
89+
"aws_service": "EC2" // AWS service — only present when the hop is inside AWS
8990
}
9091
// ... one entry per recorded hop
9192
],

detect/uptime-monitoring/traceroute-monitors/overview.mdx

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
title: 'Traceroute Monitors Overview'
33
description: 'Map the network path to any host and detect routing issues, high-latency hops, and packet loss.'
44
sidebarTitle: Overview
5+
canonical: 'https://www.checklyhq.com/docs/detect/uptime-monitoring/traceroute-monitors/overview/'
56
---
67

78
<Tip>
@@ -22,7 +23,7 @@ Traceroute monitors map the network path between a Checkly location and your tar
2223
A Traceroute monitor executes the following steps on each run:
2324

2425
1. **Hostname resolution**: If a hostname is provided, Checkly resolves it to an IP address before sending any probes
25-
2. **Probe execution**: The runner sends probe packets using the configured protocol (TCP by default). Each probe carries a progressively higher TTL so each router on the path responds with an ICMP Time Exceeded message before forwarding the packet
26+
2. **Probe execution**: The runner sends probe packets using the configured protocol (TCP by default). Each probe carries a progressively higher TTL, so each router on the path in turn drops the probe whose TTL expires there and responds with an ICMP Time Exceeded message
2627
3. **Hop collection**: RTT statistics (avg, min, max, stddev) and packet loss are collected for each router hop along the path
2728
4. **Destination detection**: When the destination host responds directly, the trace is complete and `destinationReached` is set to `true`
2829
5. **Assertion evaluation**: Configured assertions are evaluated against the results — including final-hop latency, total hop count, and last-hop packet loss
@@ -34,10 +35,10 @@ A Traceroute monitor executes the following steps on each run:
3435
| **TCP** (default) | 443 | SYN-ACK or RST received from destination |
3536
| **UDP** | 33434 | Any ICMP Destination Unreachable from the target (port unreachable, admin-prohibited, host unreachable, etc.) |
3637
| **ICMP** | *(no port)* | Echo Reply from destination |
37-
| **SCTP** | 33434 | SCTP ABORT or INIT-ACK from destination, or ICMP Destination Unreachable from the target |
38+
| **SCTP** | 33434 | Any ICMP Destination Unreachable from the target (protocol unreachable, port unreachable, etc.) |
3839

3940
<Note>
40-
The default port for UDP and SCTP in the Checkly web UI is pre-filled to `33434` a high, typically-closed port where the destination is more likely to return an ICMP Destination Unreachable. When configuring via the CLI or API, the port defaults to `443` for all non-ICMP protocols, so set `port: 33434` explicitly for UDP/SCTP probes if you want the same behavior.
41+
The default port is protocol-dependent everywhere — web UI, CLI, and API: `443` for TCP and `33434` for UDP/SCTP. `33434` is a high, typically-closed port: UDP and SCTP arrival is only confirmed when the destination returns an ICMP Destination Unreachable, which requires the probed port to be closed. Avoid setting an open port (like `443`) for UDP/SCTP probes — it would never confirm arrival.
4142
</Note>
4243

4344
## Traceroute Monitor Results
@@ -71,7 +72,7 @@ Learn more in our documentation on [Results](/concepts/results).
7172

7273
**How to fix**:
7374
1. Switch the probe protocol — try `ICMP` if the host responds to ping, or `UDP` for a connectionless probe
74-
2. Change the port to one that is explicitly open on the target (e.g. `80` or `22`)
75+
2. For TCP probes, change the port to one that is explicitly open on the target (e.g. `80` or `22`). For UDP/SCTP, keep a *closed* port — arrival is only confirmed by an ICMP Destination Unreachable reply
7576
3. Confirm reachability at the application layer with an [API Monitor](/detect/synthetic-monitoring/overview) or [TCP Monitor](/detect/uptime-monitoring/tcp-monitors/overview) targeting the same host and port
7677
</Accordion>
7778

@@ -88,7 +89,7 @@ Learn more in our documentation on [Results](/concepts/results).
8889
<Accordion title="SCTP or raw-socket errors on private locations">
8990
**Symptom**: SCTP probes fail with a socket permission error on a self-hosted Checkly Agent.
9091

91-
**Root cause**: SCTP probes require raw sockets, which need `CAP_NET_RAW`. Container runtimes drop this capability by default.
92+
**Root cause**: Container runtimes drop `CAP_NET_RAW` by default. Traceroute monitors always need it — hop discovery listens for ICMP replies on a raw socket regardless of probe protocol — but SCTP is the case that surfaces an explicit socket error, because SCTP probes are also *sent* over a raw socket.
9293

9394
**How to fix** — In **Kubernetes**, update your pod spec or Helm values:
9495

sitemap.xml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -903,6 +903,9 @@
903903
<url>
904904
<loc>https://www.checklyhq.com/docs/constructs/telegram-alert-channel/</loc>
905905
</url>
906+
<url>
907+
<loc>https://www.checklyhq.com/docs/constructs/traceroute-monitor/</loc>
908+
</url>
906909
<url>
907910
<loc>https://www.checklyhq.com/docs/constructs/url-monitor/</loc>
908911
</url>
@@ -1077,6 +1080,12 @@
10771080
<url>
10781081
<loc>https://www.checklyhq.com/docs/detect/uptime-monitoring/tcp-monitors/quickstart/</loc>
10791082
</url>
1083+
<url>
1084+
<loc>https://www.checklyhq.com/docs/detect/uptime-monitoring/traceroute-monitors/configuration/</loc>
1085+
</url>
1086+
<url>
1087+
<loc>https://www.checklyhq.com/docs/detect/uptime-monitoring/traceroute-monitors/overview/</loc>
1088+
</url>
10801089
<url>
10811090
<loc>https://www.checklyhq.com/docs/detect/uptime-monitoring/url-monitors/configuration/</loc>
10821091
</url>

0 commit comments

Comments
 (0)