diff options
| author | Nicolas Vollmar <nvo@scaling.ch> | 2024-12-31 16:39:34 +0100 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-12-31 17:39:34 +0200 | 
| commit | 8f0c2c85ca94f737fe07ccc57a761c0c76148c41 (patch) | |
| tree | 219b69451e73be1de1d779729cedb0f6ae362030 /src/conf_mode/service_monitoring_prometheus.py | |
| parent | 6f649d39463d2e56d7cc23debaa9b54486e37cc3 (diff) | |
| download | vyos-1x-8f0c2c85ca94f737fe07ccc57a761c0c76148c41.tar.gz vyos-1x-8f0c2c85ca94f737fe07ccc57a761c0c76148c41.zip | |
T6949: adds blackbox exporter (#4255)
* T6949: adds blackbox exporter
* T6949: adds basic config generation
* T6949: extract shared module config options
* T6949: switch to ipv4/6 literals
* T6949: moves config file to /run
* T6949: adds dns query name option
* T6949: adds dns query type values
* T6949: adds blackbox exporter to debian/control
Diffstat (limited to 'src/conf_mode/service_monitoring_prometheus.py')
| -rwxr-xr-x | src/conf_mode/service_monitoring_prometheus.py | 54 | 
1 files changed, 54 insertions, 0 deletions
| diff --git a/src/conf_mode/service_monitoring_prometheus.py b/src/conf_mode/service_monitoring_prometheus.py index e0a9fc4ef..42628b05c 100755 --- a/src/conf_mode/service_monitoring_prometheus.py +++ b/src/conf_mode/service_monitoring_prometheus.py @@ -35,6 +35,9 @@ node_exporter_systemd_service = 'node_exporter.service'  frr_exporter_service_file = '/etc/systemd/system/frr_exporter.service'  frr_exporter_systemd_service = 'frr_exporter.service' +blackbox_exporter_service_file = '/etc/systemd/system/blackbox_exporter.service' +blackbox_exporter_systemd_service = 'blackbox_exporter.service' +  def get_config(config=None):      if config: @@ -57,6 +60,12 @@ def get_config(config=None):      if tmp:          monitoring.update({'frr_exporter_restart_required': {}}) +    tmp = False +    for node in ['vrf', 'config-file']: +        tmp = tmp or is_node_changed(conf, base + ['blackbox-exporter', node]) +    if tmp: +        monitoring.update({'blackbox_exporter_restart_required': {}}) +      return monitoring @@ -70,6 +79,22 @@ def verify(monitoring):      if 'frr_exporter' in monitoring:          verify_vrf(monitoring['frr_exporter']) +    if 'blackbox_exporter' in monitoring: +        verify_vrf(monitoring['blackbox_exporter']) + +        if ( +            'modules' in monitoring['blackbox_exporter'] +            and 'dns' in monitoring['blackbox_exporter']['modules'] +            and 'name' in monitoring['blackbox_exporter']['modules']['dns'] +        ): +            for mod_name, mod_config in monitoring['blackbox_exporter']['modules'][ +                'dns' +            ]['name'].items(): +                if 'query_name' not in mod_config: +                    raise ConfigError( +                        f'query name not specified in dns module {mod_name}' +                    ) +      return None @@ -84,6 +109,11 @@ def generate(monitoring):          if os.path.isfile(frr_exporter_service_file):              os.unlink(frr_exporter_service_file) +    if not monitoring or 'blackbox_exporter' not in monitoring: +        # Delete systemd files +        if os.path.isfile(blackbox_exporter_service_file): +            os.unlink(blackbox_exporter_service_file) +      if not monitoring:          return None @@ -103,6 +133,20 @@ def generate(monitoring):              monitoring['frr_exporter'],          ) +    if 'blackbox_exporter' in monitoring: +        # Render blackbox_exporter service_file +        render( +            blackbox_exporter_service_file, +            'prometheus/blackbox_exporter.service.j2', +            monitoring['blackbox_exporter'], +        ) +        # Render blackbox_exporter config file +        render( +            '/run/blackbox_exporter/config.yml', +            'prometheus/blackbox_exporter.yml.j2', +            monitoring['blackbox_exporter'], +        ) +      return None @@ -113,6 +157,8 @@ def apply(monitoring):          call(f'systemctl stop {node_exporter_systemd_service}')      if not monitoring or 'frr_exporter' not in monitoring:          call(f'systemctl stop {frr_exporter_systemd_service}') +    if not monitoring or 'blackbox_exporter' not in monitoring: +        call(f'systemctl stop {blackbox_exporter_systemd_service}')      if not monitoring:          return @@ -133,6 +179,14 @@ def apply(monitoring):          call(f'systemctl {systemd_action} {frr_exporter_systemd_service}') +    if 'blackbox_exporter' in monitoring: +        # we need to restart the service if e.g. the VRF name changed +        systemd_action = 'reload-or-restart' +        if 'blackbox_exporter_restart_required' in monitoring: +            systemd_action = 'restart' + +        call(f'systemctl {systemd_action} {blackbox_exporter_systemd_service}') +  if __name__ == '__main__':      try: | 
