This exporter allows a Prometheus instance to scrape metrics from Cisco Catalyst 9800 Wireless Controllers.
Prometheus pulls from the exporter, and the exporter pulls from the controller on its own schedule.
flowchart TB
P["Prometheus"] -- "scrapes /metrics" --> E
subgraph E ["cisco-wnc-exporter"]
M(["/metrics"])
I[["Info cache<br>--collector.info-cache-ttl"]]
S[["WNC data cache<br> --wnc.cache-ttl "]]
M -- "_info series" --> I
M -- "other series" --> S
end
E -- "refreshes" --> R
E -- "refreshes" --> C
subgraph W ["Cisco C9800 RESTCONF"]
R[(" ap_radio_oper_data ")]
C[("client_common_oper_data")]
end
Note
Scrapes read the last completed refresh, never waiting on the controller. See Scrape Path for the details.
Cisco Catalyst 9800 Wireless Network Controller running on:
Important
This exporter requires these minimum versions due to RESTCONF defects in earlier releases. It fails on 17.15.4b and 17.18.1. See cisco-ios-xe-wireless-go #28 and cisco-ios-xe-wireless-go #29 for details.
This exporter supports container images and OS-specific binaries.
docker pull ghcr.io/umatare5/cisco-wnc-exporter
Or, download the binaries from Releases. (linux|darwin)_(amd64|arm64) and windows_amd64 are supported.
This exporter requires RESTCONF and HTTPS to be enabled on the Cisco Catalyst 9800 beforehand.
See the Programmability Configuration Guide, Cisco IOS XE 17.15.x - RESTCONF for enabling them.
# username:password → Base64 Encode echo -n "admin:your-password" | base64 # Output: YWRtaW46eW91ci1wYXNzd29yZA==
export WNC_CONTROLLER="wnc1.example.internal" export WNC_ACCESS_TOKEN="YWRtaW46eW91ci1wYXNzd29yZA=="
docker run -p 10039:10039 -e WNC_CONTROLLER -e WNC_ACCESS_TOKEN \ ghcr.io/umatare5/cisco-wnc-exporter:v0.15.1 --collector.ap.general
curl http://localhost:10039/metrics
Tip
See Collectors for the complete metrics, and Prometheus Configuration for scrape jobs and alerting rules.
This exporter uses command-line flags for all configuration.
cisco-wnc-exporter --help prints full flags. See Help for details.
| Component | Flag | Description |
|---|---|---|
| Collector | --collector.* |
Which collectors register. See Collectors. |
| Endpoint | --web.* |
The listen address and the telemetry path. See Endpoints. |
| Exporter | --wnc.* |
Controller credentials and refresh pacing. |
The --collector.* flags toggle these collectors. See the pages below for details.
| Collector | Flag | Description |
|---|---|---|
| AP Collector | --collector.ap.* |
RF foundation and radio performance metrics |
| Client Collector | --collector.client.* |
User experience and connection performance metrics |
| WLAN Collector | --collector.wlan.* |
Logical SSID performance metrics |
| Controller Collector | --collector.controller.* |
Controller-wide metrics |
Important
All collectors are disabled by default. Enable them based on the requirements.
The exporter exposes these endpoints. See Endpoints for what each status code means.
| Path | Description |
|---|---|
/ |
Landing page, confirming the exporter is up |
/metrics |
Metrics endpoint, set by --web.telemetry-path |
/healthz |
Liveness probe, ignoring controller state |
This exporter exposes metrics for various aspects of the wireless network.
The following table summarizes the popular metrics. See Collectors for the complete metrics.
| Collector | Metric | Type | Description |
|---|---|---|---|
| AP | wnc_ap_clients |
Gauge | Run-state clients count |
| AP | wnc_ap_channel_utilization_ratio |
Gauge | Channel utilization ratio (CCA) |
| Client | wnc_client_speed_mbps |
Gauge | Negotiated PHY rate |
| Client | wnc_client_rssi_dbm |
Gauge | Signal strength (dBm) |
| WLAN | wnc_wlan_enabled |
Gauge | WLAN status |
| WLAN | wnc_wlan_clients |
Gauge | Run-state clients count |
The following table summarizes the health metrics of the exporter itself. See Exporter Health for details.
| Metric | Type | Description |
|---|---|---|
wnc_up |
Gauge | Last completed refresh reached WNC |
wnc_refresh_duration_seconds |
Gauge | Duration of the last attempt |
wnc_refresh_errors_total |
Counter | Failed fetches per data type |
There are several operational examples below.
The three patterns below cover the common use cases.
Minimal Pattern: By default, the exporter publishes wnc_build_info alone.
./cisco-wnc-exporter
Standard Pattern: The three general groups cover the APs, the clients and the WLANs.
./cisco-wnc-exporter --collector.ap.general --collector.client.general --collector.wlan.general
Complete Pattern: Every group registers, and each --collector.*.info-labels flag takes its widest set.
./cisco-wnc-exporter \
--collector.ap.general \
--collector.ap.radio --collector.ap.traffic --collector.ap.errors \
--collector.ap.join --collector.ap.geolocation --collector.ap.spectrum \
--collector.ap.info \
--collector.ap.info-labels "name,ip,band,model,serial,sw_version,eth_mac" \
--collector.client.general \
--collector.client.radio --collector.client.traffic --collector.client.errors \
--collector.client.info \
--collector.client.info-labels "ap,band,wlan,wlan_id,name,device_type,username,ipv4,ipv6" \
--collector.wlan.general \
--collector.wlan.traffic --collector.wlan.config \
--collector.wlan.info \
--collector.wlan.info-labels "name" \
--collector.controller.generalNote
See .air.toml for the development configuration this pattern is taken from.
See the following Prometheus configuration examples:
examples/prometheus.yml to your Prometheus.examples/prometheus_alert_rules.yml to your Prometheus.Two layer of dashboards are available: The admin-level dashboard and the user-level dashboard
Admin-level: Import examples/grafana_cisco-wnc-exporter-admin-dashboard.json and visualize the metrics.
Tip
See docs/assets/cisco-wnc-exporter-admin-dashboard_full.png for the full capture.
User-level: Import examples/grafana_cisco-wnc-exporter-user-dashboard.json and visualize the metrics.
Tip
See docs/assets/cisco-wnc-exporter-user-dashboard_full.png for the full capture.
The following pages detail additional information.
See CONTRIBUTING.md for development setup, test conventions and others.
MIT. The binary statically links Apache-2.0, MIT and BSD 3-Clause dependencies. Their notices are reproduced in NOTICE and shipped alongside LICENSE in every release archive and container image.
Owner
Contributors
Categories
NetworkingObservabilityProducts
Catalyst Access PointsProgramming Languages
GoLicense
Code Exchange Community
Get help, share code, and collaborate with other developers in the Code Exchange community.View Community