sysmon: Report network addresses as metrics
BUG=chromium:757494
TEST=unittests, manually run sysmon to verify metrics
Change-Id: I7f5f0fe7170ce178bfd746ce54af266de28ce1ad
Reviewed-on: https://chromium-review.googlesource.com/624461
Commit-Ready: Prathmesh Prabhu <pprabhu@chromium.org>
Tested-by: Prathmesh Prabhu <pprabhu@chromium.org>
Reviewed-by: Prathmesh Prabhu <pprabhu@chromium.org>
Reviewed-by: Allen Li <ayatane@chromium.org>
diff --git a/scripts/sysmon/net_metrics.py b/scripts/sysmon/net_metrics.py
index 5aba0f1..e576877 100644
--- a/scripts/sysmon/net_metrics.py
+++ b/scripts/sysmon/net_metrics.py
@@ -51,6 +51,7 @@
_collect_net_io_duplex_counters()
_collect_net_if_stats()
_collect_fqdn()
+ _collect_net_if_addrs()
# Network IO metrics to collect
@@ -117,6 +118,29 @@
metric.set(getattr(stats, counter_name), fields=fields)
+_net_if_addrs_metrics = metrics.StringMetric(
+ 'dev/net/address',
+ description='Network address of physical network interfaces.')
+_family_field_strings = {
+ psutil.AF_LINK: 'AF_LINK',
+ socket.AF_INET: 'AF_INET',
+ socket.AF_INET6: 'AF_INET6',
+}
+
+
+def _collect_net_if_addrs():
+ """Collects network addresses as metrics."""
+ for nic, addresses in psutil.net_if_addrs().iteritems():
+ if _is_virtual_netif(nic):
+ continue
+ for address in addresses:
+ fields = {
+ 'interface': nic,
+ 'family': _family_field_strings.get(address.family, 'UNKNOWN'),
+ }
+ _net_if_addrs_metrics.set(address.address, fields)
+
+
def _is_virtual_netif(nic):
"""Return whether the network interface is virtual."""
# TODO(ayatane): Use a different way of identifying virtual interfaces