prometheus / node_exporter

Exporter for machine metrics
https://prometheus.io/
Apache License 2.0
10.97k stars 2.33k forks source link

wifi collector not exposing all metrics on arm64 platform #1844

Open muzammil360 opened 4 years ago

muzammil360 commented 4 years ago

Host operating system: output of uname -a

Linux veeve-id-v1-cid-beta-kroger-040101 4.9.140-tegra #1 SMP PREEMPT Thu Jun 25 21:22:12 PDT 2020 aarch64 aarch64 aarch64 GNU/Linux

node_exporter version: output of node_exporter --version

node_exporter, version 1.0.1 (branch: HEAD, revision: 3715be6ae899f2a9b9dbfd9c39f3e09a7bd4559f) build user: root@1f76dbbcfa55 build date: 20200616-12:46:57 go version: go1.14.4

node_exporter command line flags

node_exporter --collector.wifi --web.listen-address=":9101"

Are you running node_exporter in Docker?

No

What did you do that produced an error?

Just ran the command shared above on arm64 device (xavier-AGX actually)

What did you expect to see?

All the 11 metrics exposed by amd64 node exporter

What did you see instead?

Only the following two metrics

node_wifi_interface_frequency_hertz
node_wifi_station_info

Description

It seems that node exporter has a bug for arm64 devices where it can't expose all the wifi collector metrics. I am mainly looking for signal quality metric which is exposed by iwconfig in both arm64 and amd64.

discordianfish commented 3 years ago

Anything in the logs?

muzammil360 commented 3 years ago

Hi @discordianfish, sorry for the late reply. No, I don't see anything particular in logs. However, I think I found another clue. Problem is not with AMD64 or ARM64. The issue seems to be with wifi standard being used by wlan card. I have observed that if IEEE 802.11AC shows up in iwconfig output, then wifi metrics are not exposed properly. However, if we only have IEEE 802.11 then the metrics do show up properly. So it seems to be an issue with network protocol.

Following is a sample iwconfig output where metrics show up properly

wlan0     IEEE 802.11  ESSID:"my_network"  
          Mode:Managed  Frequency:2.462 GHz  Access Point: C8:3A:38:57:86:21   
          Bit Rate=135 Mb/s   Tx-Power=20 dBm   
          Retry short limit:7   RTS thr:off   Fragment thr:off
          Power Management:off
          Link Quality=54/70  Signal level=-56 dBm  
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:16   Missed beacon:0

In following output, they don't show up properly

wlan0     IEEE 802.11AC  ESSID:"another_network"  Nickname:"<WIFI@REALTEK>"
          Mode:Managed  Frequency:5.24 GHz  Access Point: 38:94:EF:2B:DA:73   
          Bit Rate:867 Mb/s   Sensitivity:0/0  
          Retry:off   RTS thr:off   Fragment thr:off
          Power Management:off
          Link Quality=54/100  Signal level=39/100  Noise level=0/100
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0

Can you please look into that?

discordianfish commented 3 years ago

Yeah seems to be a 802.11ac specific issue. This should be probably raised/fixed in https://github.com/mdlayher/wifi

rexagod commented 6 months ago

I was hoping to implement support for NL80211_AC in the aforementioned repository, but looking at the NL80211 constants being used in https://github.com/mdlayher/wifi/blob/main/client_linux.go, it seems that sys/unix does not expose the same set of information around NL80211_AC yet?

In retrospect, it seems that the linux-based APIs in https://github.com/mdlayher/wifi are built from the ground up around NL80211 only.