diff options
4 files changed, 33 insertions, 1 deletions
| diff --git a/data/templates/prometheus/node_exporter.service.j2 b/data/templates/prometheus/node_exporter.service.j2 index 62e7e6774..135439bd6 100644 --- a/data/templates/prometheus/node_exporter.service.j2 +++ b/data/templates/prometheus/node_exporter.service.j2 @@ -16,5 +16,10 @@ ExecStart={{ vrf_command }}/usr/sbin/node_exporter \  {% else %}          --web.listen-address=:{{ port }}  {% endif %} +{% if collectors is vyos_defined %} +{%     if collectors.textfile is vyos_defined %} +        --collector.textfile.directory=/run/node_exporter/collector +{%     endif %} +{% endif %}  [Install]  WantedBy=multi-user.target diff --git a/interface-definitions/service_monitoring_prometheus.xml.in b/interface-definitions/service_monitoring_prometheus.xml.in index 740900f1f..8bcebf5f3 100644 --- a/interface-definitions/service_monitoring_prometheus.xml.in +++ b/interface-definitions/service_monitoring_prometheus.xml.in @@ -21,6 +21,19 @@                      <defaultValue>9100</defaultValue>                    </leafNode>                    #include <include/interface/vrf.xml.i> +                  <node name="collectors"> +                    <properties> +                      <help>Collectors specific configuration</help> +                    </properties> +                    <children> +                      <leafNode name="textfile"> +                        <properties> +                          <help>Enables textfile collector to read from /run/node_exporter/collector</help> +                          <valueless/> +                        </properties> +                      </leafNode> +                    </children> +                  </node>                  </children>                </node>                <node name="frr-exporter"> diff --git a/smoketest/scripts/cli/test_service_monitoring_prometheus.py b/smoketest/scripts/cli/test_service_monitoring_prometheus.py index df737f840..6e7f8c808 100755 --- a/smoketest/scripts/cli/test_service_monitoring_prometheus.py +++ b/smoketest/scripts/cli/test_service_monitoring_prometheus.py @@ -14,6 +14,7 @@  # You should have received a copy of the GNU General Public License  # along with this program.  If not, see <http://www.gnu.org/licenses/>. +import os  import unittest  from base_vyostest_shim import VyOSUnitTestSHIM @@ -55,6 +56,7 @@ class TestMonitoringPrometheus(VyOSUnitTestSHIM.TestCase):      def test_01_node_exporter(self):          self.cli_set(base_path + ['node-exporter', 'listen-address', listen_ip]) +        self.cli_set(base_path + ['node-exporter', 'collectors', 'textfile'])          # commit changes          self.cli_commit() @@ -62,6 +64,11 @@ class TestMonitoringPrometheus(VyOSUnitTestSHIM.TestCase):          file_content = read_file(node_exporter_service_file)          self.assertIn(f'{listen_ip}:9100', file_content) +        self.assertTrue(os.path.isdir('/run/node_exporter/collector')) +        self.assertIn( +            '--collector.textfile.directory=/run/node_exporter/collector', file_content +        ) +          # Check for running process          self.assertTrue(process_named_running(NODE_EXPORTER_PROCESS_NAME)) diff --git a/src/conf_mode/service_monitoring_prometheus.py b/src/conf_mode/service_monitoring_prometheus.py index 42628b05c..9a07d8593 100755 --- a/src/conf_mode/service_monitoring_prometheus.py +++ b/src/conf_mode/service_monitoring_prometheus.py @@ -26,11 +26,11 @@ from vyos.utils.process import call  from vyos import ConfigError  from vyos import airbag -  airbag.enable()  node_exporter_service_file = '/etc/systemd/system/node_exporter.service'  node_exporter_systemd_service = 'node_exporter.service' +node_exporter_collector_path = '/run/node_exporter/collector'  frr_exporter_service_file = '/etc/systemd/system/frr_exporter.service'  frr_exporter_systemd_service = 'frr_exporter.service' @@ -124,6 +124,13 @@ def generate(monitoring):              'prometheus/node_exporter.service.j2',              monitoring['node_exporter'],          ) +        if ( +            'collectors' in monitoring['node_exporter'] +            and 'textfile' in monitoring['node_exporter']['collectors'] +        ): +            # Create textcollector folder +            if not os.path.isdir(node_exporter_collector_path): +                os.makedirs(node_exporter_collector_path)      if 'frr_exporter' in monitoring:          # Render frr_exporter service_file | 
