The `linux_netlink.ls` function used a regex to choose which interfaces to collect metric for. `_alphanum_re = re.compile(r'^[a-z0-9]+$')` Unfortunately, by default this excludes vlan and tap interfaces, which are kind of important. ie `bond0.120` or `tap2a3dab86-fb`. We also have a problem where even if we update the regex to include these interfaces... if someone deletes and spawns a new instance then the tap device name changes on the compute host, which will not be monitored unless someone re-runs the `collectd` on the compute again. Less than ideal. This commit lets us choose `VerboseInterface "all"` using Pillar data to avoid this problem.pull/113/head
# -*- coding: utf-8 -*- | |||||
import re | |||||
_alphanum_re = re.compile(r'^[a-z0-9]+$') | |||||
_lo_re = re.compile(r'^lo$') | |||||
def _filter(interface): | |||||
return _alphanum_re.match(interface) and not _lo_re.match(interface) | |||||
def ls(): | |||||
""" | |||||
Provide a list of network interfaces. | |||||
""" | |||||
return filter(_filter, __salt__['grains.get']('ip_interfaces', {}).keys()) |
{% set monitoring = salt['grains.filter_by']({ | {% set monitoring = salt['grains.filter_by']({ | ||||
'default': { | 'default': { | ||||
'zombie': { | 'zombie': { | ||||
'warn': 3, | |||||
'crit': 7, | |||||
'warn': 3, | |||||
'crit': 7, | |||||
}, | }, | ||||
'procs': { | 'procs': { | ||||
'warn': 5000, | |||||
'crit': 10000, | |||||
'warn': 5000, | |||||
'crit': 10000, | |||||
}, | }, | ||||
'load': { | 'load': { | ||||
'warn': '6,4,2', | |||||
'crit': '12,8,4', | |||||
'warn': '6,4,2', | |||||
'crit': '12,8,4', | |||||
}, | }, | ||||
'swap': { | 'swap': { | ||||
'warn': '50%', | |||||
'crit': '20%', | |||||
'warn': '50%', | |||||
'crit': '20%', | |||||
}, | }, | ||||
'disk': { | 'disk': { | ||||
'warn': '15%', | |||||
'crit': '5%', | |||||
'warn': '15%', | |||||
'crit': '5%', | |||||
}, | |||||
'netlink': { | |||||
'interfaces': ['all'], | |||||
'ignore_selected': False, | |||||
}, | }, | ||||
}, | }, | ||||
}, grain='os_family', merge=salt['pillar.get']('linux:monitoring')) %} | }, grain='os_family', merge=salt['pillar.get']('linux:monitoring')) %} |
{%- from "linux/map.jinja" import monitoring with context %} | |||||
local_plugin: | local_plugin: | ||||
linux_network_netlink: | linux_network_netlink: | ||||
plugin: netlink | plugin: netlink | ||||
template: linux/files/collectd_netlink.conf | template: linux/files/collectd_netlink.conf | ||||
ignore_selected: false | |||||
{%- if 'linux_netlink.ls' in salt.keys() %} | |||||
ignore_selected: {{ monitoring.netlink.ignore_selected }} | |||||
interfaces: | interfaces: | ||||
{%- for interface_name in salt['linux_netlink.ls']() %} | |||||
{%- for interface_name in monitoring.netlink.interfaces|sort %} | |||||
- {{ interface_name }} | - {{ interface_name }} | ||||
{%- endfor %} | {%- endfor %} | ||||
{%- endif %} | {%- endif %} |