diff options
| -rw-r--r-- | data/templates/monitoring/override.conf.j2 | 7 | ||||
| -rw-r--r-- | data/templates/telegraf/override.conf.j2 | 15 | ||||
| -rw-r--r-- | data/templates/telegraf/syslog_telegraf.j2 (renamed from data/templates/monitoring/syslog_telegraf.j2) | 0 | ||||
| -rw-r--r-- | data/templates/telegraf/telegraf.j2 (renamed from data/templates/monitoring/telegraf.j2) | 0 | ||||
| -rw-r--r-- | interface-definitions/service-monitoring-telegraf.xml.in | 1 | ||||
| -rwxr-xr-x | smoketest/scripts/cli/test_service_monitoring_telegraf.py | 2 | ||||
| -rwxr-xr-x | src/conf_mode/service_monitoring_telegraf.py | 60 | ||||
| -rw-r--r-- | src/systemd/telegraf.service (renamed from data/templates/monitoring/systemd_vyos_telegraf_service.j2) | 3 | 
8 files changed, 48 insertions, 40 deletions
| diff --git a/data/templates/monitoring/override.conf.j2 b/data/templates/monitoring/override.conf.j2 deleted file mode 100644 index 9f1b4ebec..000000000 --- a/data/templates/monitoring/override.conf.j2 +++ /dev/null @@ -1,7 +0,0 @@ -[Unit] -After=vyos-router.service -ConditionPathExists=/run/telegraf/vyos-telegraf.conf -[Service] -Environment=INFLUX_TOKEN={{ influxdb.authentication.token }} -CapabilityBoundingSet=CAP_NET_RAW CAP_NET_ADMIN CAP_SYS_ADMIN -AmbientCapabilities=CAP_NET_RAW CAP_NET_ADMIN diff --git a/data/templates/telegraf/override.conf.j2 b/data/templates/telegraf/override.conf.j2 new file mode 100644 index 000000000..d30bb19de --- /dev/null +++ b/data/templates/telegraf/override.conf.j2 @@ -0,0 +1,15 @@ +{% set vrf_command = 'ip vrf exec ' ~ vrf ~ ' ' if vrf is vyos_defined else '' %} +[Unit] +After= +After=vyos-router.service +ConditionPathExists=/run/telegraf/telegraf.conf + +[Service] +ExecStart= +ExecStart={{ vrf_command }}/usr/bin/telegraf --config /run/telegraf/telegraf.conf --config-directory /etc/telegraf/telegraf.d --pidfile /run/telegraf/telegraf.pid +PIDFile=/run/telegraf/telegraf.pid +EnvironmentFile= +Environment=INFLUX_TOKEN={{ influxdb.authentication.token }} +CapabilityBoundingSet=CAP_NET_RAW CAP_NET_ADMIN CAP_SYS_ADMIN CAP_BPF CAP_DAC_OVERRIDE +AmbientCapabilities=CAP_NET_RAW CAP_NET_ADMIN + diff --git a/data/templates/monitoring/syslog_telegraf.j2 b/data/templates/telegraf/syslog_telegraf.j2 index cdcbd92a4..cdcbd92a4 100644 --- a/data/templates/monitoring/syslog_telegraf.j2 +++ b/data/templates/telegraf/syslog_telegraf.j2 diff --git a/data/templates/monitoring/telegraf.j2 b/data/templates/telegraf/telegraf.j2 index 6b395692b..6b395692b 100644 --- a/data/templates/monitoring/telegraf.j2 +++ b/data/templates/telegraf/telegraf.j2 diff --git a/interface-definitions/service-monitoring-telegraf.xml.in b/interface-definitions/service-monitoring-telegraf.xml.in index 36f40a539..dc014ee16 100644 --- a/interface-definitions/service-monitoring-telegraf.xml.in +++ b/interface-definitions/service-monitoring-telegraf.xml.in @@ -306,6 +306,7 @@                    </leafNode>                  </children>                </node> +              #include <include/interface/vrf.xml.i>              </children>            </node>          </children> diff --git a/smoketest/scripts/cli/test_service_monitoring_telegraf.py b/smoketest/scripts/cli/test_service_monitoring_telegraf.py index 1c8cc9759..c1c4044e6 100755 --- a/smoketest/scripts/cli/test_service_monitoring_telegraf.py +++ b/smoketest/scripts/cli/test_service_monitoring_telegraf.py @@ -24,7 +24,7 @@ from vyos.util import process_named_running  from vyos.util import read_file  PROCESS_NAME = 'telegraf' -TELEGRAF_CONF = '/run/telegraf/vyos-telegraf.conf' +TELEGRAF_CONF = '/run/telegraf/telegraf.conf'  base_path = ['service', 'monitoring', 'telegraf']  org = 'log@in.local'  token = 'GuRJc12tIzfjnYdKRAIYbxdWd2aTpOT9PVYNddzDnFV4HkAcD7u7-kndTFXjGuXzJN6TTxmrvPODB4mnFcseDV==' diff --git a/src/conf_mode/service_monitoring_telegraf.py b/src/conf_mode/service_monitoring_telegraf.py index 62f5e1ddf..18b32edab 100755 --- a/src/conf_mode/service_monitoring_telegraf.py +++ b/src/conf_mode/service_monitoring_telegraf.py @@ -22,6 +22,8 @@ from shutil import rmtree  from vyos.config import Config  from vyos.configdict import dict_merge +from vyos.configdict import is_node_changed +from vyos.configverify import verify_vrf  from vyos.ifconfig import Section  from vyos.template import render  from vyos.util import call @@ -32,20 +34,14 @@ from vyos import ConfigError  from vyos import airbag  airbag.enable() - -base_dir = '/run/telegraf'  cache_dir = f'/etc/telegraf/.cache' -config_telegraf = f'{base_dir}/vyos-telegraf.conf' +config_telegraf = f'/run/telegraf/telegraf.conf'  custom_scripts_dir = '/etc/telegraf/custom_scripts'  syslog_telegraf = '/etc/rsyslog.d/50-telegraf.conf' -systemd_telegraf_service = '/etc/systemd/system/vyos-telegraf.service' -systemd_telegraf_override_dir = '/etc/systemd/system/vyos-telegraf.service.d' -systemd_override = f'{systemd_telegraf_override_dir}/10-override.conf' - +systemd_override = '/etc/systemd/system/telegraf.service.d/10-override.conf'  def get_interfaces(type='', vlan=True):      """ -    Get interfaces      get_interfaces()      ['dum0', 'eth0', 'eth1', 'eth1.5', 'lo', 'tun0'] @@ -62,9 +58,7 @@ def get_interfaces(type='', vlan=True):      return interfaces  def get_nft_filter_chains(): -    """ -    Get nft chains for table filter -    """ +    """ Get nft chains for table filter """      nft = cmd('nft --json list table ip filter')      nft = json.loads(nft)      chain_list = [] @@ -78,7 +72,6 @@ def get_nft_filter_chains():  def get_config(config=None): -      if config:          conf = config      else: @@ -87,8 +80,12 @@ def get_config(config=None):      if not conf.exists(base):          return None -    monitoring = conf.get_config_dict(base, key_mangling=('-', '_'), get_first_key=True, -                                    no_tag_node_value_mangle=True) +    monitoring = conf.get_config_dict(base, key_mangling=('-', '_'), +                                      get_first_key=True, +                                      no_tag_node_value_mangle=True) + +    tmp = is_node_changed(conf, base + ['vrf']) +    if tmp: monitoring.update({'restart_required': {}})      # We have gathered the dict representation of the CLI, but there are default      # options which we need to update into the dictionary retrived. @@ -131,6 +128,8 @@ def verify(monitoring):      if not monitoring:          return None +    verify_vrf(monitoring) +      # Verify influxdb      if 'influxdb' in monitoring:          if 'authentication' not in monitoring['influxdb'] or \ @@ -173,7 +172,7 @@ def verify(monitoring):  def generate(monitoring):      if not monitoring:          # Delete config and systemd files -        config_files = [config_telegraf, systemd_telegraf_service, systemd_override, syslog_telegraf] +        config_files = [config_telegraf, systemd_override, syslog_telegraf]          for file in config_files:              if os.path.isfile(file):                  os.unlink(file) @@ -190,33 +189,34 @@ def generate(monitoring):      chown(cache_dir, 'telegraf', 'telegraf') -    # Create systemd override dir -    if not os.path.exists(systemd_telegraf_override_dir): -        os.mkdir(systemd_telegraf_override_dir) -      # Create custome scripts dir      if not os.path.exists(custom_scripts_dir):          os.mkdir(custom_scripts_dir)      # Render telegraf configuration and systemd override -    render(config_telegraf, 'monitoring/telegraf.j2', monitoring) -    render(systemd_telegraf_service, 'monitoring/systemd_vyos_telegraf_service.j2', monitoring) -    render(systemd_override, 'monitoring/override.conf.j2', monitoring, permission=0o640) -    render(syslog_telegraf, 'monitoring/syslog_telegraf.j2', monitoring) - -    chown(base_dir, 'telegraf', 'telegraf') +    render(config_telegraf, 'telegraf/telegraf.j2', monitoring, user='telegraf', group='telegraf') +    render(systemd_override, 'telegraf/override.conf.j2', monitoring) +    render(syslog_telegraf, 'telegraf/syslog_telegraf.j2', monitoring)      return None  def apply(monitoring):      # Reload systemd manager configuration +    systemd_service = 'telegraf.service'      call('systemctl daemon-reload') -    if monitoring: -        call('systemctl restart vyos-telegraf.service') -    else: -        call('systemctl stop vyos-telegraf.service') +    if not monitoring: +        call(f'systemctl stop {systemd_service}') +        return + +    # we need to restart the service if e.g. the VRF name changed +    systemd_action = 'reload-or-restart' +    if 'restart_required' in monitoring: +        systemd_action = 'restart' + +    call(f'systemctl {systemd_action} {systemd_service}') +      # Telegraf include custom rsyslog config changes -    call('systemctl restart rsyslog') +    call('systemctl reload-or-restart rsyslog')  if __name__ == '__main__':      try: diff --git a/data/templates/monitoring/systemd_vyos_telegraf_service.j2 b/src/systemd/telegraf.service index 234ef5586..553942ac6 100644 --- a/data/templates/monitoring/systemd_vyos_telegraf_service.j2 +++ b/src/systemd/telegraf.service @@ -5,8 +5,7 @@ After=network.target  [Service]  EnvironmentFile=-/etc/default/telegraf -User=telegraf -ExecStart=/usr/bin/telegraf -config /run/telegraf/vyos-telegraf.conf -config-directory /etc/telegraf/telegraf.d $TELEGRAF_OPTS +ExecStart=/usr/bin/telegraf --config /run/telegraf/vyos-telegraf.conf --config-directory /etc/telegraf/telegraf.d  ExecReload=/bin/kill -HUP $MAINPID  Restart=on-failure  RestartForceExitStatus=SIGPIPE | 
