A Prometheus exporter for Wyebot DEX sensor data, allowing seamless integration of Wyebot metrics into your existing monitoring infrastructure.
This exporter connects to the Wyebot API and exposes metrics from your DEX sensors in Prometheus format, enabling you to:
- Visualize Wyebot data in your preferred monitoring solution (Grafana, etc.)
- Set up alerts based on Wyebot metrics
- Correlate Wyebot data with other infrastructure metrics
- Create a single pane of glass for all your monitoring needs
docker run -d \
--name wyebot-exporter \
-p 8014:8014 \
-e CLOUD_NAME="cloud" \
-e API_KEY="your-api-key" \
wyebotexporter/prometheus:latest
The exporter can be configured via environment variables, command-line arguments, or a configuration file.
| Variable |
Description |
Default |
PORT |
Port on which the exporter listens |
8014 |
CLOUD_NAME |
Wyebot dashboard cloud name (cloud, wip, euro-cloud, etc.) |
cloud |
API_KEY |
Your Wyebot API key |
Required |
THREAD_COUNT |
Number of concurrent threads for API calls |
4 |
PRECISE_TIMESTAMPS |
Use exact timestamps from tests (experimental) |
False |
DETAILED_DHCP |
Add per-device DHCP labels to every network test metric |
False |
LOG_LEVEL |
Logging level (DEBUG, INFO, WARNING, ERROR, CRITICAL) |
INFO |
Note: When PRECISE_TIMESTAMPS is enabled, Prometheus must be configured to accept out-of-order samples.
Note: Enabling detailed_dhcp adds dhcp_ip, dhcp_subnet, dhcp_gw, dhcp_server, dhcp_version, dhcp_ip_v6, dhcp_gw_v6, and dhcp_server_v6 labels to every network test metric (not just DHCP-related ones). Each of these is per-device, so enabling it will significantly increase the number of unique time series.
Create a config.yml file:
cloud_name: "cloud"
api_key: "your-api-key"
exporter_host: "0.0.0.0"
exporter_port: 8014
thread_count: 4
precise_timestamps: false
# Adds per-device DHCP labels to every network test metric. Off by default —
# each device gets its own label values, which multiplies your time series count.
detailed_dhcp: false
log_level: INFO
# Optional: Syslog logging
syslog:
enabled: false
host: "syslog.example.com"
port: 514
protocol: UDP # UDP or TCP
¶ Command Line Arguments
./wyebot_exporter --config config.yml --log-level DEBUG --log-file /var/log/wyebot.log
| Argument |
Description |
Default |
--config |
Path to config file |
config.yml |
--log-level |
Minimum log level |
From config or INFO |
--log-file |
Path to log file or 'stdout' |
stdout |
Configuration Priority: Command-line arguments > Environment variables > Config file > Defaults
Add the following to your prometheus.yml:
scrape_configs:
- job_name: 'wyebot'
scrape_interval: 5m
scrape_timeout: 5m
static_configs:
- targets: ['wyebot-exporter:8014']
services:
wyebot-exporter:
image: wyebotexporter/prometheus:latest
container_name: wyebot-exporter
restart: unless-stopped
ports:
- "8014:8014"
environment:
- CLOUD_NAME=cloud
- API_KEY=your-api-key
- LOG_LEVEL=INFO
volumes:
- ./config.yml:/app/config.yml:ro
| Name |
Description |
Labels |
up |
Prometheus built in metric to report exporter status |
job, instance |
wyebot_api_calls |
Number of API calls for this round of metric scraping |
job, instance |
wyebot_scrape_time |
Time taken for this round of metric scraping in seconds |
job, instance |
| Name |
Description |
Labels |
wyebot_sensor_status |
Current status of sensor (1 if active, 0 otherwise) |
sensor_status, location_id, location_name, sensor_id, sensor_name, job, instance |
wyebot_sensor_issues |
Total number Critical, Major, Minor, or Hidden issues |
severity, location_id, location_name, sensor_id, sensor_name, job, instance |
wyebot_sensor_issue_descriptions |
Total number issues grouped by description |
problem_description, location_id, location_name, sensor_id, sensor_name, job, instance |
wyebot_tests_did_not_run |
Total number of times a scheduled test profile did not run |
profile_id, profile_name, location_id, location_name, sensor_id, sensor_name, job, instance |
| Name |
Description |
Labels |
wyebot_access_point_total |
Total number of access points detected |
classification, location_id, location_name, sensor_id, sensor_name, job, instance |
wyebot_ssid_total |
Total number of SSID/networks detected |
location_id, location_name, sensor_id, sensor_name, job, instance |
wyebot_bssid_total |
Total number of BSSIDs detected |
ssid, channel, band, location_id, location_name, sensor_id, sensor_name, job, instance |
wyebot_bssid_channel |
Current channel of detected BSSID |
ssid, is_hidden, security_type, bssid, ap_name, classification, channel, channel_width, band, location_id, location_name, sensor_id, sensor_name, job, instance |
wyebot_bssid_clients |
Total clients per monitored BSSID |
Same as above |
wyebot_bssid_signal_strength |
BSSID signal strength with detailed labels |
phy_type, max_data_rate, vendor, ssid, is_hidden, security_type, bssid, ap_name, classification, channel, channel_width, band, location_id, location_name, sensor_id, sensor_name, job, instance |
| Name |
Description |
Labels |
wyebot_client_total |
Total number of clients detected |
location_id, location_name, sensor_id, sensor_name, job, instance |
wyebot_client_distribution_total |
Total number of clients detected per band and their supported capabilities |
client_band, location_id, location_name, sensor_id, sensor_name, job, instance |
wyebot_client_signal_strength |
Client signal strength with detailed labels |
client_name, client_mac, vendor, phy_type, ssid, bssid, ap_name, channel, band, location_id, location_name, sensor_id, sensor_name, job, instance |
| Name |
Description |
Labels |
wyebot_airtime_total_percent |
Total airtime usage detected by sensor radios |
radio, channel, band, location_id, location_name, sensor_id, sensor_name, job, instance |
wyebot_airtime_mgmt_percent |
Management airtime usage detected by sensor radios |
Same as above |
wyebot_airtime_ctrl_percent |
Control airtime usage detected by sensor radios |
Same as above |
wyebot_airtime_data_percent |
Data airtime usage detected by sensor radios |
Same as above |
wyebot_airtime_interference_percent |
Interference airtime usage detected by sensor radios |
Same as above |
wyebot_airtime_noise_floor |
Noise floor of the current channel monitored by sensor radios in dB |
Same as above |
| Name |
Description |
Labels |
wyebot_connections_dhcp_time |
Response time of DHCP for sensor connection attempt in milliseconds |
dhcp_threshold_seconds, dhcp_server, connection_status, ssid, band, ap_name, bssid, location_id, location_name, sensor_id, sensor_name, job, instance |
wyebot_connections_dhcp_status |
Pass/Fail of DHCP compared to configured threshold |
Same as above |
wyebot_connections_association_time |
Time between initial connection and test start without DHCP time in milliseconds |
connection_status, ssid, band, ap_name, bssid, location_id, location_name, sensor_id, sensor_name, job, instance |
wyebot_connections_eap_time |
Duration of EAP for sensor connection attempt in milliseconds |
eap_threshold_seconds, connection_status, ssid, band, ap_name, bssid, location_id, location_name, sensor_id, sensor_name, job, instance |
wyebot_connections_eap_status |
Pass/Fail of EAP compared to configured threshold |
Same as above |
wyebot_connections_rssi_current |
RSSI during sensor connection attempt |
connection_status, ssid, band, ap_name, bssid, location_id, location_name, sensor_id, sensor_name, job, instance |
wyebot_connections_rssi_average |
Average RSSI during connection attempt |
Same as above |
wyebot_connections_link_speed |
Link speed of connection in Mbps |
Same as above |
wyebot_connections_dns_time |
Time to resolve the specified domain in milliseconds |
dns_threshold_msec, domain, connection_status, ssid, band, ap_name, bssid, location_id, location_name, sensor_id, sensor_name, job, instance |
wyebot_connections_dns_status |
Pass/Fail of DNS compared to configured threshold |
Same as above |
| Name |
Description |
Labels |
wyebot_tests_ping_loss |
Percentage of packet loss for ping to specificed host |
status, hostname, ip_address, packet_count, ap_name, ssid, band, bssid, connection_status, location_id, location_name, sensor_id, sensor_name, profile_id, profile_name, job, instance |
wyebot_tests_ping_rtt_avg |
Round trip time average for ping to specified host in milliseconds |
Same as above |
wyebot_tests_ping_rtt_min |
Round trip time minimum for ping to specified host in milliseconds |
Same as above |
wyebot_tests_ping_rtt_max |
Round trip time maximum for ping to specified host in milliseconds |
Same as above |
wyebot_tests_ping_status |
Pass/Fail status of test profile result |
Same as above |
| Name |
Description |
Labels |
wyebot_tests_link_doctor_loss |
Percentage of packet loss for ping to specificed host |
status, link_doctor_step, ip_address, packet_count, ap_name, ssid, band, bssid, connection_status, location_id, location_name, sensor_id, sensor_name, profile_id, profile_name, job, instance |
wyebot_tests_link_doctor_rtt_avg |
Round trip time average for ping to specified host in milliseconds |
Same as above |
wyebot_tests_link_doctor_rtt_min |
Round trip time minimum for ping to specified host in milliseconds |
Same as above |
wyebot_tests_link_doctor_rtt_max |
Round trip time maximum for ping to specified host in milliseconds |
Same as above |
wyebot_tests_link_doctor_status |
Pass/Fail status of test profile result |
Same as above |
| Name |
Description |
Labels |
wyebot_tests_application_time |
Response time of specified URL in milliseconds |
status, url, hostname, http_msg, ap_name, ssid, band, bssid, connection_status, location_id, location_name, sensor_id, sensor_name, profile_id, profile_name, job, instance |
wyebot_tests_application_status |
Pass/Fail status of test profile result |
Same as above |
| Name |
Description |
Labels |
wyebot_tests_dns_performance |
Response time for specified domain in milliseconds |
status, domain, dns_server, ap_name, ssid, band, bssid, connection_status, location_id, location_name, sensor_id, sensor_name, profile_id, profile_name, job, instance |
wyebot_tests_dns_performance_status |
Pass/Fail status of test profile result |
Same as above |
| Name |
Description |
Labels |
wyebot_tests_speedtest_download |
Download speed in Mbps |
status, below_threshold, ap_name, ssid, band, bssid, connection_status, location_id, location_name, sensor_id, sensor_name, profile_id, profile_name, job, instance |
wyebot_tests_speedtest_upload |
Upload speed in Mbps |
Same as above |
wyebot_tests_speedtest_latency |
Latency to the selected speedtest server in ms |
status, ap_name, ssid, band, bssid, connection_status, location_id, location_name, sensor_id, sensor_name, profile_id, profile_name, job, instance |
wyebot_tests_speedtest_status |
Pass/Fail status of test profile result |
Same as above |
| Name |
Description |
Labels |
wyebot_tests_iperf_download |
Download speed in Mbps |
status, server, below_threshold, ap_name, ssid, band, bssid, connection_status, location_id, location_name, sensor_id, sensor_name, profile_id, profile_name, job, instance |
wyebot_tests_iperf_upload |
Upload speed in Mbps |
Same as above |
wyebot_tests_iperf_status |
Pass/Fail status of test profile result |
Same as above |
| Name |
Description |
Labels |
wyebot_tests_port_scan |
Number of ports open for target host |
status, hostname, ip_address, ports, ap_name, ssid, band, bssid, connection_status, location_id, location_name, sensor_id, sensor_name, profile_id, profile_name, job, instance |
wyebot_tests_port_scan_status |
Pass/Fail status of test profile result |
Same as above |
| Name |
Description |
Labels |
wyebot_tests_network_discovery |
Number of hosts found during network scan |
status, ap_name, ssid, band, bssid, connection_status, location_id, location_name, sensor_id, sensor_name, profile_id, profile_name, job, instance |
wyebot_tests_network_discovery_status |
Pass/Fail status of test profile result |
Same as above |
| Name |
Description |
Labels |
wyebot_tests_video_mos_downstream |
MOS of downstream for video test |
status, server_hostname, simulation_name, ap_name, ssid, band, bssid, connection_status, location_id, location_name, sensor_id, sensor_name, profile_id, profile_name, job, instance |
wyebot_tests_video_mos_upstream |
MOS of upstream for video test |
Same as above |
wyebot_tests_video_speed_downstream |
Speed of downstream for video test in Kbps |
Same as above |
wyebot_tests_video_speed_upstream |
Speed of upstream for video test in Kbps |
Same as above |
wyebot_tests_video_loss_downstream |
Percent of downstream packet loss for video test |
Same as above |
wyebot_tests_video_loss_upstream |
Percent of upstream packet loss for video test |
Same as above |
wyebot_tests_video_latency_downstream |
Downstream latency for video test in milliseconds |
Same as above |
wyebot_tests_video_latency_upstream |
Upstream latency for video test in milliseconds |
Same as above |
wyebot_tests_video_jitter_downstream |
Downstream jitter for video test in milliseconds |
Same as above |
wyebot_tests_video_jitter_upstream |
Upstream jitter for video test in milliseconds |
Same as above |
wyebot_tests_video_status |
Pass/Fail status of test profile result |
Same as above |
| Name |
Description |
Labels |
wyebot_tests_voice_mos_downstream |
MOS of downstream for voice test |
status, server_hostname, simulation_name, ap_name, ssid, band, bssid, connection_status, location_id, location_name, sensor_id, sensor_name, profile_id, profile_name, job, instance |
wyebot_tests_voice_mos_upstream |
MOS of upstream for voice test |
Same as above |
wyebot_tests_voice_speed_downstream |
Speed of downstream for voice test in Kbps |
Same as above |
wyebot_tests_voice_speed_upstream |
Speed of upstream for voice test in Kbps |
Same as above |
wyebot_tests_voice_loss_downstream |
Percent of downstream packet loss for voice test |
Same as above |
wyebot_tests_voice_loss_upstream |
Percent of upstream packet loss for voice test |
Same as above |
wyebot_tests_voice_latency_downstream |
Downstream latency for voice test in milliseconds |
Same as above |
wyebot_tests_voice_latency_upstream |
Upstream latency for voice test in milliseconds |
Same as above |
wyebot_tests_voice_jitter_downstream |
Downstream jitter for voice test in milliseconds |
Same as above |
wyebot_tests_voice_jitter_upstream |
Upstream jitter for voice test in milliseconds |
Same as above |
wyebot_tests_voice_status |
Pass/Fail status of test profile result |
Same as above |
| Name |
Description |
Labels |
wyebot_tests_traceroute_hops |
Number of hops for traceroute to specified host |
status, hostname, ap_name, ssid, band, bssid, connection_status, location_id, location_name, sensor_id, sensor_name, profile_id, profile_name, job, instance |
wyebot_tests_traceroute_status |
Pass/Fail status of test profile result |
Same as above |
| Name |
Description |
Labels |
wyebot_tests_device_monitor |
Current status of monitored device (1 if up, 0 if down) |
status, server, hostname, location_id, location_name, sensor_id, sensor_name, profile_id, profile_name, job, instance |
wyebot_tests_device_monitor_status |
Pass/Fail status of test profile result |
Same as above |
| Label |
Description |
job |
Prometheus job identifier (wyebot) |
instance |
Prometheus exporter hostname/IP and port |
location_id |
Unique identifier for a location |
location_name |
Human-readable name of the location |
sensor_id |
Unique identifier for a sensor |
sensor_name |
Human-readable name of the sensor |
sensor_status |
Current status name of the sensor (e.g., Active, Offline) |
profile_id |
Unique identifier for a test profile |
profile_name |
Human-readable name of the test profile |
severity |
Severity level of issues (Critical, Major, Minor, Hidden) |
problem_description |
Description of the sensor issue |
classification |
Classification of AP (Mine, Known, Unauthorized, Unclassified) |
ssid |
Name of SSID or 'Wired' |
channel |
Wi-Fi channel number |
band |
Frequency band (2.4GHz, 5GHz, 6GHz) |
client_band |
Client distribution band capability string (e.g., 2.4GHz Limited, 5GHz Capable) |
is_hidden |
Indicates if an SSID is hidden (True or False) |
security_type |
Type of security used (e.g., WPA2-Personal, WPA3-Enterprise) |
bssid |
BSSID of AP radio |
ap_name |
Discovered hostname of the access point |
channel_width |
Width of the channel in MHz |
phy_type |
Physical layer type (e.g., 802.11ac, 802.11ax) |
max_data_rate |
Maximum data rate supported |
vendor |
Manufacturer of the device based on MAC address |
client_name |
Human-readable name of the client device |
client_mac |
MAC address of the client device |
radio |
Radio identifier for a sensor (0 or 1) |
status |
Human-readable status of the test result (e.g., SUCCESS) |
connection_status |
Human-readable status of the connection attempt |
domain |
Domain name used for DNS lookup |
hostname |
Target hostname for tests |
ip_address |
IP address of the target host |
packet_count |
Number of packets sent for test |
link_doctor_step |
Step in the link doctor diagnostic process |
url |
URL for application test |
http_msg |
HTTP response message |
dns_server |
DNS server address |
dhcp_server |
IP address of DHCP server used during connection attempt |
dhcp_threshold_seconds |
DHCP threshold for network configured in the Wyebot dashboard |
eap_threshold_seconds |
RADIUS threshold for network configured in the Wyebot dashboard |
dns_threshold_msec |
DNS threshold for network configured in the Wyebot dashboard |
below_threshold |
Indicates if a measurement is below configured threshold |
server |
Server used for tests (iPerf, Device Monitor) |
ports |
Network ports used in scan |
server_hostname |
Hostname of the test server |
simulation_name |
Name of the quality simulation profile |