Status page: what needs attention first, glyphs for what repeats
The page opened with every session in bold green, the normal state, and the brightest numbers on it were the rejection counts, which RPKI doing its job produces by the thousand. The two sessions that were actually down were in the same red, thirty rows down. Now: - A status line at the top says what needs attention, by name and with the reason: sessions down, peers restarting, the kernel behind or refusing routes, RPKI data missing or about to expire. When nothing does, it says so. A second line gives the normal state in grey. - Colour means one thing each. Red: failed, needs a hand. Amber: degraded, worth watching. Green, set small: a system doing its job. Grey: inactive and expected. Normal is black; "Established" is no longer green, and a rejection count no longer red. - Peers that need attention come first, then the others grouped by what they are to us, with a "problems only" switch. Numbers are right aligned with thousands separators; the established time and uptime are one cell; the session's properties are glyphs (v4, v6, GR, ENH, AP, 2B) with the meaning as a tooltip, as are the roles. - Received routes: the best route leads, marked ★; attributes without a column are glyphs (OTC, AA, AGG, AS4, OID, CL); validity is ✓ ✗ –. - Rejected routes: those alike (same prefix, reason and path) are one row with a count and the last time; each peer's reasons are a bar. - Communities with a configured name (community_names, new) are badges with that name, the number as the tooltip: "comrack", "SwissIX", "interconnection 2011" rather than 210036:100:2 and so on. A name for a pattern shows the open part after it. The daemon does nothing with the names but pass them to the page. - One lookup box at the top, which takes a peer's name too; a peer's name anywhere on the page leads to its routes; table headers and the status line stay in view while scrolling. - The host name comes from gethostname(2), not from running `hostname`, which a static binary on a bare machine could not find: comrack said "unknown host". Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
1 parent
23e8b4aadb
commit
1ce7eef27e
12 files changed
+515
-160
No files matched your search
@@ -25,20 +25,63 @@ Table 1 lists the HTTP endpoints. All endpoints are read-only.
|
||||
|
||||
## Status Page
|
||||
|
||||
The status page, `/statusz`, displays the following information:
|
||||
The status page, `/statusz`, opens with a status line that lists what
|
||||
needs attention: neighbors whose sessions are down, with the reason;
|
||||
neighbors that are restarting; the kernel not in step with the routing
|
||||
table, or refusing routes; and RPKI data that is missing or about to
|
||||
expire. When nothing needs attention, the line says so. A second line
|
||||
summarizes the normal state: sessions established, routes installed, and
|
||||
the RPKI state.
|
||||
|
||||
Below the status line, the page displays the following information:
|
||||
|
||||
- A lookup of received routes, by prefix, address, or neighbor name.
|
||||
- The configuration that was read at startup.
|
||||
- Each neighbor, with its session state, address families, role and role
|
||||
confirmation, number of accepted routes, rejected announcements, and held
|
||||
routes, and last error.
|
||||
- The originated routes, and a lookup of received routes.
|
||||
- Each neighbor, with its session state, time established, next hop,
|
||||
session properties, number of accepted routes, rejected announcements,
|
||||
and held routes, and its last error. Neighbors that need attention are
|
||||
listed first; the others are grouped by role. The **problems only**
|
||||
option hides the neighbors that need no attention.
|
||||
- RPKI validation: the cache, the RTR version, and the age of the data.
|
||||
- The originated routes.
|
||||
- Kernel route installation: the number of installed routes, the number of
|
||||
routes not installed and the reason, the last error reported by the
|
||||
kernel, and the interfaces.
|
||||
- Rejected routes, by neighbor and by reason.
|
||||
- The received routes that match the lookup, best path first.
|
||||
- Rejected routes, by neighbor, with the number of rejections for each
|
||||
reason, and the most recent rejected routes. Rejections of the same
|
||||
prefix for the same reason by the same AS path are displayed as one row
|
||||
with a count.
|
||||
- A live event log.
|
||||
|
||||
The page uses color as follows: red indicates a failure that requires
|
||||
action, such as a session that is down; amber indicates a degraded state,
|
||||
such as held or stale routes; green indicates a function that is operating
|
||||
normally, such as the RPKI cache being synchronized; gray indicates an
|
||||
inactive or expected state, such as a passive neighbor waiting for a
|
||||
connection. Normal values are displayed in black.
|
||||
|
||||
Properties that repeat on many rows are displayed as glyphs. Table 2 lists
|
||||
them. Point to a glyph to display its meaning.
|
||||
|
||||
| Glyph | Meaning |
|
||||
|---|---|
|
||||
| `v4`, `v6` | The address families of the session. |
|
||||
| `GR` | Graceful restart is in use. |
|
||||
| `ENH` | IPv4 routes are exchanged with IPv6 next hops (RFC 8950). |
|
||||
| `AP↓`, `AP↑` | ADD-PATH: several paths per prefix are received, or sent. |
|
||||
| `2B` | The neighbor supports two-octet AS numbers only. |
|
||||
| `↑`, `↓`, `↔`, `RS`, `RSC`, `iBGP` | The role of the neighbor: provider, customer, peer, route server, route server client, or a router of the local AS. |
|
||||
| `★` | The best path for the prefix. |
|
||||
| `OTC`, `AA`, `AGG`, `AS4`, `OID`, `CL`, `EXT` | Path attributes without a column of their own: Only to Customer, ATOMIC_AGGREGATE, AGGREGATOR, AS4_PATH, ORIGINATOR_ID, CLUSTER_LIST, and extended communities. |
|
||||
| `✓`, `✗`, `–` | RPKI or ASPA validation state: valid, invalid, or not found. |
|
||||
|
||||
Communities for which `community_names` specifies a name are displayed as
|
||||
a badge with that name; the community itself is displayed when you point
|
||||
to the badge. Communities of the local AS that are control communities
|
||||
display their effect in the same way. Well-known communities are
|
||||
displayed by name.
|
||||
|
||||
To display the name of the holder of an AS number, point to the number. The
|
||||
browser requests the name from [RIPEstat](https://stat.ripe.net/); Ferrix
|
||||
does not send any requests itself. If the browser cannot reach RIPEstat,
|
||||
@@ -47,7 +90,7 @@ the page displays "name not available".
|
||||
## Route Lookup
|
||||
|
||||
The status page provides a lookup of received routes. The HTTP endpoint
|
||||
`/api/routes/received` accepts the same queries. Table 2 lists the query
|
||||
`/api/routes/received` accepts the same queries. Table 3 lists the query
|
||||
parameters.
|
||||
|
||||
| Parameter | Result |
|
||||
@@ -77,18 +120,17 @@ Ferrix does not store rejected routes in the routing table. For each
|
||||
neighbor, it records the number of rejected routes for each reason, and the
|
||||
200 most recent rejected routes with all the path attributes they were
|
||||
received with. The status page displays this information under "Rejected
|
||||
routes"; to display the attributes of a rejected route, select **show** in
|
||||
its row. The HTTP endpoint `/api/routes/rejected` returns the same
|
||||
information as JSON. To display the records for one neighbor, add
|
||||
`?peer=NAME`.
|
||||
routes", with the attributes of each rejected route in the same columns as
|
||||
the received routes. The HTTP endpoint `/api/routes/rejected` returns the
|
||||
same information as JSON. To display the records for one neighbor, add
|
||||
`?peer=NAME`, or select the neighbor's name on the status page.
|
||||
|
||||
The numbers count rejected announcements, not prefixes. When a neighbor
|
||||
announces a route again, for example because an attribute changed, and
|
||||
Ferrix rejects it again, the count increases again. Two neighbors that
|
||||
advertise the same routes can therefore have different counts. The number
|
||||
of routes currently held, because they are RPKI or ASPA invalid or their
|
||||
next hop is unreachable, is displayed in the neighbor table as **held
|
||||
now**.
|
||||
next hop is unreachable, is displayed in the neighbor table as **held**.
|
||||
|
||||
```json
|
||||
[{"peer":"transit-a","total":3,"by_reason":{"RPKI invalid":2,"bogon prefix":1},
|
||||
|
||||
@@ -58,6 +58,7 @@ Top-level statements.
|
||||
| `cluster_id` <span class="type">string</span> | `router_id` | Specifies the cluster ID that the router uses as a route reflector, as a dotted-quad IPv4 address. See [Route Reflection](@/docs/guides/passing-routes-on.md#route-reflection). |
|
||||
| `graceful_restart` <span class="type">[GracefulRestart](#gracefulrestart)</span> | Enabled | Specifies graceful restart for neighbors that have no `graceful_restart` statement. Its `restart_time_seconds` also limits how long Ferrix waits at startup for neighbors to send their routes. |
|
||||
| `export_limits` <span class="type">[ExportLimits](#exportlimits)</span> | None | Specifies limits on the routes advertised to neighbors whose role is `PROVIDER`, `PEER`, or `ROUTE_SERVER`, and to EBGP neighbors without a role, for neighbors that have no `export_limits` statement. See [Export Limits](@/docs/guides/passing-routes-on.md#export-limits). |
|
||||
| `community_names` <span class="type">[CommunityName](#communityname), repeated</span> | None | Specifies names that the status page displays for communities, in place of the numbers. Ferrix does not use the names otherwise. |
|
||||
|
||||
## Peer
|
||||
|
||||
@@ -167,6 +168,16 @@ of the export policy, BGP roles, and communities of the routes. See
|
||||
| `prefixes` <span class="type">[PrefixRange](#prefixrange), repeated</span> | All prefixes | Specifies the prefixes that can be advertised to the neighbor. Ferrix does not advertise learned or originated routes for other prefixes. |
|
||||
| `max_prefixes` <span class="type">uint32</span> | 0 (no limit) | Specifies the maximum number of routes advertised to the neighbor. If more routes are to be advertised, Ferrix advertises none of them, tears down the session with a Cease NOTIFICATION message (subcode Administrative Shutdown) that states the reason (RFC 9003), and places the neighbor in hold-down for its `import.hold_down_seconds`. |
|
||||
|
||||
## CommunityName
|
||||
|
||||
A name for a community, or for a kind of community, displayed on the status
|
||||
page.
|
||||
|
||||
| Statement | Default | Description |
|
||||
|---|---|---|
|
||||
| `community` <span class="type">string</span> | Required | Specifies a standard community (`64500:100`), a large community (`64500:100:2`), or a pattern with `*` for a part left open (`64500:102:*`). For a pattern, the status page displays the name followed by the open part. |
|
||||
| `name` <span class="type">string</span> | Required | Specifies the name to display. |
|
||||
|
||||
## OriginatedRoute
|
||||
|
||||
A route that Ferrix originates.
|
||||
|
||||
Reference in new issue
Block a user