wip
This commit is contained in:
parent
40254b403e
commit
4b6afb503d
7 changed files with 248 additions and 22 deletions
|
@ -1,2 +1,56 @@
|
||||||
#sudo systemctl unmask influxdb.service
|
from tomlkit import dumps
|
||||||
#sudo systemctl start influxdb
|
from shlex import quote
|
||||||
|
|
||||||
|
directories['/var/lib/influxdb'] = {
|
||||||
|
'owner': 'influxdb',
|
||||||
|
'group': 'influxdb',
|
||||||
|
'needs': [
|
||||||
|
'zfs_dataset:tank/influxdb',
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
|
directories['/etc/influxdb'] = {
|
||||||
|
'purge': True,
|
||||||
|
}
|
||||||
|
files['/etc/influxdb/config.toml'] = {
|
||||||
|
'content': dumps(node.metadata.get('influxdb/config')),
|
||||||
|
'triggers': [
|
||||||
|
'svc_systemd:influxdb:restart',
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
svc_systemd['influxdb'] = {
|
||||||
|
'needs': [
|
||||||
|
'directory:/var/lib/influxdb',
|
||||||
|
'file:/etc/influxdb/config.toml',
|
||||||
|
'pkg_apt:influxdb2',
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
actions['setup_influxdb'] = {
|
||||||
|
'command': 'influx setup --username={username} --password={password} --org={org} --bucket={bucket} --token={token} --retention=0 --force'.format(
|
||||||
|
username=node.metadata.get('influxdb/username'),
|
||||||
|
password=quote(str(node.metadata.get('influxdb/password'))),
|
||||||
|
org=node.metadata.get('influxdb/org'),
|
||||||
|
bucket=node.metadata.get('influxdb/bucket'),
|
||||||
|
token=str(node.metadata.get('influxdb/token')),
|
||||||
|
),
|
||||||
|
'unless': 'influx bucket list',
|
||||||
|
'needs': [
|
||||||
|
'svc_systemd:influxdb',
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
|
files['/root/.influxdbv2/configs'] = {
|
||||||
|
'content': dumps({
|
||||||
|
node.metadata.get('influxdb/bucket'): {
|
||||||
|
'url': f"http://localhost:{node.metadata.get('influxdb/port')}",
|
||||||
|
'token': str(node.metadata.get('influxdb/token')),
|
||||||
|
'org': node.metadata.get('influxdb/org'),
|
||||||
|
'active': True,
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
'needs': [
|
||||||
|
'action:setup_influxdb',
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
from ipaddress import ip_interface
|
||||||
|
|
||||||
defaults = {
|
defaults = {
|
||||||
'apt': {
|
'apt': {
|
||||||
'packages': {
|
'packages': {
|
||||||
|
@ -7,4 +9,59 @@ defaults = {
|
||||||
'deb https://repos.influxdata.com/debian {release} stable',
|
'deb https://repos.influxdata.com/debian {release} stable',
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
'influxdb': {
|
||||||
|
'port': '8200',
|
||||||
|
'username': 'admin',
|
||||||
|
'org': 'default',
|
||||||
|
'org': 'default',
|
||||||
|
'bucket': 'default',
|
||||||
|
'config': {
|
||||||
|
'bolt-path': '/var/lib/influxdb/influxd.bolt',
|
||||||
|
'engine-path': '/var/lib/influxdb/engine',
|
||||||
|
'reporting-disabled': True,
|
||||||
|
'http-bind-address': ':8200'
|
||||||
|
},
|
||||||
|
},
|
||||||
|
'zfs': {
|
||||||
|
'datasets': {
|
||||||
|
'tank/influxdb': {
|
||||||
|
'mountpoint': '/var/lib/influxdb'
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@metadata_reactor.provides(
|
||||||
|
'influxdb/password',
|
||||||
|
)
|
||||||
|
def admin_password(metadata):
|
||||||
|
return {
|
||||||
|
'influxdb': {
|
||||||
|
'password': repo.vault.password_for(f"{node.metadata.get('id')} influxdb admin"),
|
||||||
|
'token': repo.vault.random_bytes_as_base64_for(f"{node.metadata.get('id')} influxdb default token", length=64),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@metadata_reactor.provides(
|
||||||
|
'dns',
|
||||||
|
)
|
||||||
|
def dns(metadata):
|
||||||
|
dns = {}
|
||||||
|
|
||||||
|
dns[metadata.get('influxdb/hostname')] = {
|
||||||
|
'A': [
|
||||||
|
str(ip_interface(network['ipv4']).ip)
|
||||||
|
for network in metadata.get('network').values()
|
||||||
|
if 'ipv4' in network
|
||||||
|
],
|
||||||
|
'AAAA': [
|
||||||
|
str(ip_interface(network['ipv6']).ip)
|
||||||
|
for network in metadata.get('network').values()
|
||||||
|
if 'ipv6' in network
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
'dns': dns,
|
||||||
|
}
|
||||||
|
|
14
bundles/telegraf/items.py
Normal file
14
bundles/telegraf/items.py
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
from tomlkit import dumps
|
||||||
|
|
||||||
|
files['/etc/telegraf/telegraf.conf'] = {
|
||||||
|
'content': dumps(node.metadata.get('telegraf/config')),
|
||||||
|
'triggers': [
|
||||||
|
'svc_systemd:telegraf:restart',
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
|
svc_systemd['telegraf'] = {
|
||||||
|
'needs': [
|
||||||
|
'file:/etc/telegraf/telegraf.conf',
|
||||||
|
],
|
||||||
|
}
|
77
bundles/telegraf/metadata.py
Normal file
77
bundles/telegraf/metadata.py
Normal file
|
@ -0,0 +1,77 @@
|
||||||
|
defaults = {
|
||||||
|
'apt': {
|
||||||
|
'packages': {
|
||||||
|
'telegraf': {},
|
||||||
|
},
|
||||||
|
'sources': [
|
||||||
|
'deb https://repos.influxdata.com/debian {release} stable',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
'telegraf': {
|
||||||
|
'config': {
|
||||||
|
'agent': {
|
||||||
|
'hostname': node.name,
|
||||||
|
'collection_jitter': '0s',
|
||||||
|
'flush_interval': '10s',
|
||||||
|
'flush_jitter': '0s',
|
||||||
|
'interval': '10s',
|
||||||
|
'metric_batch_size': 1000,
|
||||||
|
'metric_buffer_limit': 10000,
|
||||||
|
'omit_hostname': False,
|
||||||
|
'round_interval': True
|
||||||
|
},
|
||||||
|
'inputs': {
|
||||||
|
'cpu': [{
|
||||||
|
'collect_cpu_time': False,
|
||||||
|
'percpu': True,
|
||||||
|
'report_active': False,
|
||||||
|
'totalcpu': True
|
||||||
|
}],
|
||||||
|
'disk': [{
|
||||||
|
'ignore_fs': [
|
||||||
|
'tmpfs',
|
||||||
|
'devtmpfs',
|
||||||
|
'devfs',
|
||||||
|
'iso9660',
|
||||||
|
'overlay',
|
||||||
|
'aufs',
|
||||||
|
'squashfs'
|
||||||
|
],
|
||||||
|
}],
|
||||||
|
'diskio': [{}],
|
||||||
|
'kernel': [{}],
|
||||||
|
'mem': [{}],
|
||||||
|
'processes': [{}],
|
||||||
|
'swap': [{}],
|
||||||
|
'system': [{}],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@metadata_reactor.provides(
|
||||||
|
'telegraf/config/outputs/influxdb_v2',
|
||||||
|
)
|
||||||
|
def influxdb(metadata):
|
||||||
|
influxdb_node = repo.get_node(metadata.get('telegraf/influxdb_node'))
|
||||||
|
|
||||||
|
influxdb_server_url = "http://{hostname}:{port}".format(
|
||||||
|
hostname=influxdb_node.metadata.get('influxdb/hostname'),
|
||||||
|
port=influxdb_node.metadata.get('influxdb/port'),
|
||||||
|
)
|
||||||
|
|
||||||
|
return {
|
||||||
|
'telegraf': {
|
||||||
|
'config': {
|
||||||
|
'outputs': {
|
||||||
|
'influxdb_v2': [{
|
||||||
|
'urls': [influxdb_server_url],
|
||||||
|
'token': str(influxdb_node.metadata.get('influxdb/token')),
|
||||||
|
'organization': influxdb_node.metadata.get('influxdb/org'),
|
||||||
|
'bucket': influxdb_node.metadata.get('influxdb/bucket'),
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
10
groups/applications/monitored.py
Normal file
10
groups/applications/monitored.py
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
{
|
||||||
|
'bundles': [
|
||||||
|
'telegraf',
|
||||||
|
],
|
||||||
|
'metadata': {
|
||||||
|
'telegraf': {
|
||||||
|
'influxdb_node': 'home.server',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
|
@ -8,8 +8,10 @@
|
||||||
],
|
],
|
||||||
'bundles': [
|
'bundles': [
|
||||||
'gitea',
|
'gitea',
|
||||||
|
'influxdb2',
|
||||||
'postgresql',
|
'postgresql',
|
||||||
'wireguard',
|
'wireguard',
|
||||||
|
'zfs',
|
||||||
],
|
],
|
||||||
'metadata': {
|
'metadata': {
|
||||||
'id': 'af96709e-b13f-4965-a588-ef2cd476437a',
|
'id': 'af96709e-b13f-4965-a588-ef2cd476437a',
|
||||||
|
@ -25,6 +27,9 @@
|
||||||
'sha256': '0d11d87ce60d5d98e22fc52f2c8c6ba2b54b14f9c26c767a46bf102c381ad128',
|
'sha256': '0d11d87ce60d5d98e22fc52f2c8c6ba2b54b14f9c26c767a46bf102c381ad128',
|
||||||
'domain': 'git.sublimity.de',
|
'domain': 'git.sublimity.de',
|
||||||
},
|
},
|
||||||
|
'influxdb': {
|
||||||
|
'hostname': 'influxdb.sublimity.de',
|
||||||
|
},
|
||||||
'users': {
|
'users': {
|
||||||
'root': {
|
'root': {
|
||||||
'shell': '/usr/bin/zsh',
|
'shell': '/usr/bin/zsh',
|
||||||
|
@ -41,5 +46,15 @@
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
'zfs': {
|
||||||
|
'pools': {
|
||||||
|
'tank': {
|
||||||
|
'mirrors': [
|
||||||
|
'/dev/disk/by-partlabel/zfs-data-1',
|
||||||
|
'/dev/disk/by-partlabel/zfs-data-2',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,13 +6,12 @@
|
||||||
'hetzner-cloud',
|
'hetzner-cloud',
|
||||||
'debian-10',
|
'debian-10',
|
||||||
'mailserver',
|
'mailserver',
|
||||||
|
'monitored',
|
||||||
'webserver',
|
'webserver',
|
||||||
'dnsserver',
|
'dnsserver',
|
||||||
],
|
],
|
||||||
'bundles': [
|
'bundles': [
|
||||||
'wireguard',
|
'wireguard',
|
||||||
'nextcloud', #TEMP
|
|
||||||
'influxdb2', #TEMP
|
|
||||||
'zfs',
|
'zfs',
|
||||||
],
|
],
|
||||||
'metadata': {
|
'metadata': {
|
||||||
|
@ -53,24 +52,24 @@
|
||||||
'gateway6': 'fe80::1',
|
'gateway6': 'fe80::1',
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
'nginx': {
|
# 'nginx': {
|
||||||
'vhosts': {
|
# 'vhosts': {
|
||||||
'nextcloud': {
|
# 'nextcloud': {
|
||||||
'domain': 'test.ckn.li',
|
# 'domain': 'test.ckn.li',
|
||||||
'ssl': 'letsencrypt',
|
# 'ssl': 'letsencrypt',
|
||||||
'letsencrypt': {
|
# 'letsencrypt': {
|
||||||
'active': True,
|
# 'active': True,
|
||||||
'force_ssl': False,
|
# 'force_ssl': False,
|
||||||
},
|
# },
|
||||||
'proxy': {
|
# 'proxy': {
|
||||||
'/': {
|
# '/': {
|
||||||
'target': 'https://mail.sublimity.de:443',
|
# 'target': 'https://mail.sublimity.de:443',
|
||||||
'websocket': True,
|
# 'websocket': True,
|
||||||
},
|
# },
|
||||||
},
|
# },
|
||||||
},
|
# },
|
||||||
},
|
# },
|
||||||
},
|
# },
|
||||||
'mailserver': {
|
'mailserver': {
|
||||||
'hostname': 'mail.sublimity.de',
|
'hostname': 'mail.sublimity.de',
|
||||||
'admin_email': 'postmaster@sublimity.de',
|
'admin_email': 'postmaster@sublimity.de',
|
||||||
|
|
Loading…
Reference in a new issue