Check redfish-ethernetinterfaces¶
Overview¶
Checks the state of all Ethernet interfaces in a Redfish-compatible server via the Redfish API. Alerts when any enabled Ethernet interface reports a degraded or failed health state. The link status (up/down) is reported for information but does not by itself trigger an alert, because an unused interface being down is a normal condition. System-level health is deliberately ignored by this check; use redfish-systems for that.
Important Notes:
- Tested on DELL iDRAC and DMTF Simulator
- A check usually completes within a few seconds, but a slow or retried request can take longer. The bundled Director basket allows a 60 second runtime timeout.
- This check runs with both HTTP and HTTPS. It uses GET requests only.
- No additional Python Redfish modules need to be installed.
Data Collection:
- Queries
/redfish/v1/Systemsto enumerate system members - For each member, follows the
EthernetInterfaceslink and queries every interface for its MAC address, link status, speed and health status - Uses HTTP Basic authentication if
--usernameand--passwordare provided - Only evaluates systems and interfaces in "Enabled" or "Quiesced" state
Fact Sheet¶
| Fact | Value |
|---|---|
| Check Plugin Download | https://github.com/Linuxfabrik/monitoring-plugins/tree/main/check-plugins/redfish-ethernetinterfaces |
| Nagios/Icinga Check Name | check_redfish_ethernetinterfaces |
| Check Interval Recommendation | Every 5 minutes |
| Can be called without parameters | Yes |
| Runs on | Cross-platform |
| Compiled for Windows | No |
Help¶
usage: redfish-ethernetinterfaces [-h] [-V] [--always-ok] [--brief]
[--cache-expire CACHE_EXPIRE]
[--ignore IGNORE] [--insecure] [--inventory]
[--match MATCH] [--no-proxy]
[--password PASSWORD] [--retries RETRIES]
[--test TEST] [--timeout TIMEOUT]
[--url URL] [--username USERNAME]
Checks the state of all Ethernet interfaces in a Redfish-compatible server via
the Redfish API. Alerts when any enabled Ethernet interface reports a degraded
or failed health state. The link status (up/down) is reported for information
but does not by itself trigger an alert, because an unused interface being
down is a normal condition. System-level health is deliberately ignored by
this check; use `redfish-systems` for that.
options:
-h, --help show this help message and exit
-V, --version show program's version number and exit
--always-ok Always returns OK.
--brief Hide items that are OK and show only those in
WARN/CRIT state. Alerting is unaffected: all items
still drive the overall check state. Default: False
--cache-expire CACHE_EXPIRE
The amount of time after which the credential/data
cache expires, in minutes. Default: 15
--ignore IGNORE Ignore items whose name matches this Python regular
expression. Case-sensitive by default; use `(?i)` for
case-insensitive matching. Can be specified multiple
times.
--insecure This option explicitly allows insecure SSL
connections.
--inventory Output the parsed components as JSON on stdout and
exit OK, instead of running a health check. Use this
to collect a hardware inventory: the JSON is a single
object keyed by component type, so the output of
several Redfish checks can be merged into one
inventory document with `jq --slurp`. Ignores --brief,
--match and --ignore. Default: False
--match MATCH Only check items whose name matches this Python
regular expression. Case-sensitive by default; use
`(?i)` for case-insensitive matching. Can be specified
multiple times.
--no-proxy Do not use a proxy.
--password PASSWORD Redfish API password.
--retries RETRIES Number of extra attempts if a request to the Redfish
API fails, before the check gives up. Helps against an
occasionally slow or flaky management controller.
Default: 3
--test TEST For unit tests. Needs "path-to-stdout-file,path-to-
stderr-file,expected-retc".
--timeout TIMEOUT Network timeout in seconds. Default: 8 (seconds)
--url URL Redfish API URL. Default: https://localhost:5000
--username USERNAME Redfish API username.
Usage Examples¶
./redfish-ethernetinterfaces --url=https://bmc --username=redfish-monitoring --password='linuxfabrik'
Output:
Everything is ok, checked Ethernet interfaces on 1 member.
Member: Contoso 3500, HostName: web483, SKU: 8675309, SerNo: 437XR1138R2
Interface ! MAC ! Speed Mbps ! Full Duplex ! Link ! State
-------------+-------------------+------------+-------------+--------+------
12446A3B0411 ! 12:44:6A:3B:04:11 ! 1000 ! True ! LinkUp ! [OK]
12446A3B8890 ! AA:BB:CC:DD:EE:00 ! 1000 ! True ! LinkUp ! [OK]
VLAN1 ! 12:44:6A:3B:04:11 ! 1000 ! True ! LinkUp ! [OK]
ToManager ! AA:BB:CC:DD:EE:FE ! 100 ! True ! ! [OK]
States¶
- OK if all enabled Ethernet interfaces report a healthy state.
- WARN if an enabled interface health or health rollup state is "Warning".
- CRIT if an enabled interface health or health rollup state is "Critical".
- The link status is informational only and does not change the result.
--always-oksuppresses all alerts and always returns OK.
Perfdata / Metrics¶
| Name | Type | Description |
|---|---|---|
| ethernet_interfaces | Number | Number of enabled Ethernet interfaces checked. |
| ethernet_interfaces_not_ok | Number | Number of Ethernet interfaces whose health is not OK. |
For Maintainers¶
You don't need a physical server with a real BMC (the management controller that serves the Redfish API, e.g. HPE iLO or Dell iDRAC) to develop or test this plugin. The official DMTF Redfish mockup server serves a static, read-only Redfish tree (including an EthernetInterfaces collection) over plain HTTP, which is exactly what this GET-only plugin needs.
Run the mockup server and point the plugin at it, from the repository root:
podman run \
--detach --rm \
--name lfmp-redfish-mock \
--publish 5000:8000 \
docker.io/dmtf/redfish-mockup-server:latest
sleep 3
check-plugins/redfish-ethernetinterfaces/redfish-ethernetinterfaces --url=http://127.0.0.1:5000 --no-proxy
podman stop lfmp-redfish-mock
Use http://127.0.0.1:5000 rather than http://localhost:5000, because localhost may resolve to IPv6 (::1) while the published container port is bound to IPv4.
The fixtures under unit-test/stdout/ were captured from this mockup server. Each scenario is one set of files named <scenario>-systems, <scenario>-system, <scenario>-ethernetinterfaces and <scenario>-nic-N (one per interface, in collection order); they are the raw Redfish responses the plugin walks. To simulate a fault, copy a healthy set and edit an interface's Status.Health to Critical or Warning. The offline test suite is run with ./run from the unit-test directory.
Credits, License¶
- Authors: Linuxfabrik GmbH, Zurich
- License: The Unlicense, see LICENSE file.