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', }, }, }