feat: add frr_exporter class
All checks were successful
Build / precommit (pull_request) Successful in 4m56s

- add frr exporter to all nodes running frr
This commit is contained in:
Ben Vincent 2025-08-03 15:38:13 +10:00
parent 53fabc923b
commit 9deeacce22
10 changed files with 140 additions and 0 deletions

View File

@ -2,6 +2,7 @@
hiera_include:
- profiles::selinux::setenforce
- frrouting
- exporters::frr_exporter
profiles::packages::include:
cobbler: {}
@ -35,6 +36,7 @@ networking::interfaces:
mtu: 1500
# frrouting
exporters::frr_exporter::enable: true
frrouting::ospfd_router_id: "%{facts.networking.ip}"
frrouting::ospfd_redistribute:
- connected
@ -46,6 +48,12 @@ frrouting::ospfd_interfaces:
frrouting::daemons:
ospfd: true
# consul
profiles::consul::client::node_rules:
- resource: service
segment: frr_exporter
disposition: write
# additional repos
profiles::yum::global::repos:
frr-extras:

View File

@ -2,6 +2,7 @@
hiera_include:
- frrouting
- profiles::dhcp::server
- exporters::frr_exporter
# networking
anycast_ip: 198.18.19.18
@ -19,6 +20,7 @@ networking::interfaces:
mtu: 1500
# frrouting
exporters::frr_exporter::enable: true
frrouting::ospfd_router_id: "%{facts.networking.ip}"
frrouting::ospfd_redistribute:
- connected
@ -30,6 +32,12 @@ frrouting::ospfd_interfaces:
frrouting::daemons:
ospfd: true
# consul
profiles::consul::client::node_rules:
- resource: service
segment: frr_exporter
disposition: write
# additional repos
profiles::yum::global::repos:
frr-extras:

View File

@ -1,6 +1,7 @@
---
hiera_include:
- frrouting
- exporters::frr_exporter
profiles::dns::master::ns_role: roles::infra::dns::master
profiles::dns::master::use_ns: region
@ -178,6 +179,7 @@ networking::interfaces:
mtu: 1500
# frrouting
exporters::frr_exporter::enable: true
frrouting::ospfd_router_id: "%{facts.networking.ip}"
frrouting::ospfd_redistribute:
- connected
@ -189,6 +191,12 @@ frrouting::ospfd_interfaces:
frrouting::daemons:
ospfd: true
# consul
profiles::consul::client::node_rules:
- resource: service
segment: frr_exporter
disposition: write
# additional repos
profiles::yum::global::repos:
frr-extras:

View File

@ -1,6 +1,7 @@
---
hiera_include:
- frrouting
- exporters::frr_exporter
profiles::dns::resolver::acls:
acl-main.unkin.net:
@ -228,6 +229,7 @@ networking::interfaces:
mtu: 1500
# frrouting
exporters::frr_exporter::enable: true
frrouting::ospfd_router_id: "%{facts.networking.ip}"
frrouting::ospfd_redistribute:
- connected
@ -239,6 +241,12 @@ frrouting::ospfd_interfaces:
frrouting::daemons:
ospfd: true
# consul
profiles::consul::client::node_rules:
- resource: service
segment: frr_exporter
disposition: write
# additional repos
profiles::yum::global::repos:
frr-extras:

View File

@ -2,6 +2,7 @@
hiera_include:
- frrouting
- profiles::haproxy::server
- exporters::frr_exporter
# networking
anycast_ip: 198.18.19.17
@ -19,6 +20,7 @@ networking::interfaces:
mtu: 1500
# frrouting
exporters::frr_exporter::enable: true
frrouting::ospfd_router_id: "%{facts.networking.ip}"
frrouting::ospfd_redistribute:
- connected
@ -69,6 +71,9 @@ profiles::consul::client::node_rules:
- resource: service
segment: haproxy-metrics
disposition: write
- resource: service
segment: frr_exporter
disposition: write
# haproxy
profiles::haproxy::peers::enable: true

View File

@ -7,6 +7,7 @@ hiera_include:
- profiles::ceph::node
- profiles::ceph::client
- profiles::storage::cephfsvols
- exporters::frr_exporter
# FIXME: puppet-python wants to try manage python-dev, which is required by the ceph package
python::manage_dev_package: false
@ -75,6 +76,9 @@ profiles::consul::client::node_rules:
- resource: service
segment: cephmgr
disposition: write
- resource: service
segment: frr_exporter
disposition: write
# additional repos
profiles::yum::global::repos:
@ -147,6 +151,7 @@ networking::interfaces:
mtu: 1500
# frrouting
exporters::frr_exporter::enable: true
frrouting::ospfd_router_id: "%{hiera('networking_loopback0_ip')}"
frrouting::ospfd_redistribute:
- connected

View File

@ -4,6 +4,7 @@ hiera_include:
- frrouting
- profiles::ceph::node
- profiles::ceph::client
- exporters::frr_exporter
# FIXME: puppet-python wants to try manage python-dev, which is required by the ceph package
python::manage_dev_package: false
@ -90,7 +91,14 @@ networking::interfaces:
netmask: 255.255.255.255
mtu: 1500
# consul
profiles::consul::client::node_rules:
- resource: service
segment: frr_exporter
disposition: write
# frrouting
exporters::frr_exporter::enable: true
frrouting::ospfd_router_id: "%{hiera('networking_loopback0_ip')}"
frrouting::ospfd_redistribute:
- connected

View File

@ -1,6 +1,7 @@
---
hiera_include:
- frrouting
- exporters::frr_exporter
profiles::consul::server::members_lookup: true
profiles::consul::server::data_dir: /data/consul
@ -38,6 +39,11 @@ profiles::nginx::simpleproxy::nginx_aliases:
profiles::nginx::simpleproxy::proxy_port: 8500
profiles::nginx::simpleproxy::proxy_path: '/'
# consul
profiles::consul::client::node_rules:
- resource: service
segment: frr_exporter
disposition: write
profiles::consul::prepared_query::rules:
vault:
ensure: 'present'
@ -116,6 +122,7 @@ networking::interfaces:
mtu: 1500
# frrouting
exporters::frr_exporter::enable: true
frrouting::ospfd_router_id: "%{facts.networking.ip}"
frrouting::ospfd_redistribute:
- connected

View File

@ -0,0 +1,68 @@
class exporters::frr_exporter (
Boolean $enable = false,
String $user = 'frr_exporter',
String $group = 'frr_exporter',
Boolean $manage_user = true,
Boolean $manage_service = true,
Stdlib::Port $port = 9342,
Stdlib::Absolutepath $exec_path = '/usr/bin/frr_exporter',
Stdlib::Absolutepath $socket_dir = '/var/run/frr',
){
if $enable {
# install required package
package {'frr_exporter':
ensure => installed,
}
# manage the user/group
if $manage_user {
group { $group:
ensure => present,
}
user { $user:
ensure => present,
shell => '/usr/sbin/nologin',
groups => [$group, 'frrvty'],
managehome => true,
}
}
# manage the systemd service
if $manage_service {
# Use these in notifications or file resources
systemd::unit_file { 'frr_exporter.service':
content => template('exporters/frr_exporter.service.erb'),
enable => true,
active => true,
subscribe => Package['frr_exporter'],
}
}
# manage consul service
consul::service { 'frr_exporter':
service_name => 'frr_exporter',
address => $facts['networking']['ip'],
port => $port,
tags => [
'metrics',
'metrics_scheme=http',
'metrics_job=frr',
],
checks => [
{
id => 'frr_exporter_http_check',
name => 'frr_exporter HTTP Check',
http => "http://${facts['networking']['fqdn']}:${port}/metrics",
method => 'GET',
tls_skip_verify => true,
interval => '10s',
timeout => '1s',
},
],
}
}
}

View File

@ -0,0 +1,15 @@
[Unit]
Description=Prometheus frr_exporter
Wants=network-online.target
After=network-online.target
[Service]
User=<%= @user %>
Group=<%= @group %>
ExecStart=<%= @exec_path %> --frr.socket.dir-path="<%= @socket_dir %>"
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=always
[Install]
WantedBy=multi-user.target