bundlewrap/bundles/telegraf/items.py

152 lines
4.7 KiB
Python

telegraf_config = {
'agent': {
'collection_jitter': '5s',
'debug': False,
'flush_buffer_when_full': True,
'flush_interval': '10s',
'flush_jitter': '5s',
'hostname': node.name,
'interval': '60s',
'metric_buffer_limit': 1_000_000,
'quiet': False,
'round_interval': False,
},
'inputs': {
'cpu': [{
'percpu': False,
'totalcpu': True,
'fielddrop': [
'time_*',
],
}],
'disk': [{
'ignore_fs': [
'aufs',
'devtmpfs',
'nsfs',
'tmpfs',
],
}],
'diskio': [{
'skip_serial_number': True,
}],
'kernel': [{}],
'mem': [{}],
'net': [{
'interfaces': [
'en*',
'eth*',
'wg*',
'wlp*',
],
}],
'nstat': [{}],
'processes': [{}],
'system': [{}],
**node.metadata.get('telegraf/input_plugins/builtin', {}),
},
'outputs': {
'influxdb_v2': [{
'urls': [node.metadata.get('telegraf/influxdb_url', repo.libs.defaults.influxdb_url)],
'token': node.metadata.get('telegraf/influxdb_token', repo.vault.decrypt(repo.libs.defaults.influxdb_token)),
'organization': node.metadata.get('telegraf/influxdb_org', repo.vault.decrypt(repo.libs.defaults.influxdb_org)),
'bucket': node.metadata.get('telegraf/influxdb_bucket', repo.vault.decrypt(repo.libs.defaults.influxdb_bucket)),
}],
},
}
# Bundlewrap can't merge lists. To work around this, telegraf/input_plugins/exec(d)
# is a dict, of which we only use the value of it. This also allows us
# to overwrite values set by metadata defaults/reactors in node and group
# metadata, if needed.
for config in sorted(node.metadata.get('telegraf/input_plugins/exec', {}).values(), key=lambda c: ''.join(c['commands'])):
if 'exec' not in telegraf_config['inputs']:
telegraf_config['inputs']['exec'] = []
telegraf_config['inputs']['exec'].append(config)
for config in sorted(node.metadata.get('telegraf/input_plugins/execd', {}).values(), key=lambda c: ''.join(c['command'])):
if 'execd' not in telegraf_config['inputs']:
telegraf_config['inputs']['execd'] = []
telegraf_config['inputs']['execd'].append(config)
for name, config in sorted(node.metadata.get('telegraf/input_plugins/tail', {}).items()):
if 'tail' not in telegraf_config['inputs']:
telegraf_config['inputs']['tail'] = []
telegraf_config['inputs']['tail'].append(config)
for name, config in sorted(node.metadata.get('telegraf/input_plugins/http', {}).items()):
if 'http' not in telegraf_config['inputs']:
telegraf_config['inputs']['http'] = []
config['name_override'] = name
telegraf_config['inputs']['http'].append(config)
for name, config in sorted(node.metadata.get('telegraf/input_plugins/prometheus', {}).items()):
if 'prometheus' not in telegraf_config['inputs']:
telegraf_config['inputs']['prometheus'] = []
config['name_override'] = f'{name}_metrics'
telegraf_config['inputs']['prometheus'].append(config)
files = {
'/etc/telegraf/telegraf.conf': {
'content': repo.libs.faults.dict_as_toml(telegraf_config),
'triggers': {
'svc_systemd:telegraf:restart',
},
},
'/etc/sudoers.d/telegraf': {
'source': 'sudoers',
'content_type': 'mako',
},
}
if node.metadata.get('telegraf/additional_capabilities', set()):
files['/etc/systemd/system/telegraf.service.d/bundlewrap.conf'] = {
'source': 'override.conf',
'content_type': 'mako',
'context': {
'capabilities': node.metadata['telegraf']['additional_capabilities'],
},
'triggers': {
'action:systemd-reload',
'svc_systemd:telegraf:restart',
},
}
else:
files['/etc/systemd/system/telegraf.service.d/bundlewrap.conf'] = {
'delete': True,
'triggers': {
'action:systemd-reload',
'svc_systemd:telegraf:restart',
},
}
directories = {
'/etc/telegraf/.cache': {
'owner': 'telegraf',
},
}
users = {
'telegraf': {
'groups': node.metadata.get('telegraf/additional_groups', set()),
'triggers': {
'svc_systemd:telegraf:restart',
},
},
}
svc_systemd = {
'telegraf': {
'needs': {
'file:/etc/telegraf/telegraf.conf',
'file:/etc/systemd/system/telegraf.service.d/bundlewrap.conf',
'user:telegraf',
},
},
}